Таблица истинности которая считывает функцию Python
Создать программное приложение автоматического построения таблиц
истинности для выражений булевой алгебры.
Программа должна позволять пользователю вводить произвольный булево
выражение, определять булевы переменные и динамично строить таблицу
истинности.

'-' — возражения "нет"
'+' — дизъюнкция "или"
'*' — конъюнкция "и"
'>' — импликация "если ..., тогда"
'=' — эквивалентность "ровно"

програма должна принимать функцию -p+(p*q)=q, вот все что я сделал
<code>
def __no__(a):
    return not a

def __or__(a, b):
    return a or b

def __and__(a, b):
    return a and b

def __ifto__(a, b):
    return (not a) or b

def __equal__(a, b):
    return a == b

q = [True, False, True, False]
p = [False, True, True, False]

infunc = input('Enter your function: ')
</code>

Чтобы не парсить выражение, можно привлечь Питон вычислять введённую функцию и заполнять таблицу истинности. Для этого завести класс, который будет представлять переменные в выражении, и у него переопределить соответствующие операторы. А дальше инициализировать переменные всеми возможными значениями и получать результат введённой функции для каждого набора значений переменных при помощи штатной функции
eval().

import re

class BoolVar:
    def __init__(self, value):
        self.value = value
        #print("INIT =", value)

    # '-' — возражения "нет"
    def __neg__(self):
        return BoolVar(not self.value)

    # '+' — дизъюнкция "или"
    def __add__(self, other):
        return BoolVar(self.value or other.value)

    # '*' — конъюнкция "и"
    def __mul__(self, other):
        return BoolVar(self.value and other.value)

    # '>' — импликация "если ..., тогда"
    def __gt__(self, other):
        return BoolVar((not self.value) or other.value)

    # '=' — эквивалентность "ровно"
    def __eq__(self, other):
        return BoolVar(self.value == other.value)

    # строковое представление значения
    def __str__(self):
        return "True" if self.value else "False"

    def __format__(self, format_spec):
        return format(str(self), format_spec)

infunc = input('Enter your function: ')
# в питоне знак эквивалентности - это '==', так что заменяем
infunc = infunc.replace("=", "==")
# находим переменные в функции, т.е. просто буквы
# set() делает этот набор уникальным, ну и сортируем
variables = sorted(set(re.findall(r"[A-Za-z]", infunc)))
# или так, если надо без использования регулярных выражений
# variables = sorted(set([c for c in infunc if c.isalpha()]))

# просто красивое оформление для таблицы
header = [""]*2
for key in variables:
    header[0] += "-"*7 + "+"
    header[1] += f"   {key}   |"
header[0] += "-+" + "-"*7
header[1] += " | Result"
print("\n".join(header + header[0:1]))

vars_for_eval = {}
# вариантов входных значений для таблицы - 2 в степени кол-ва переменных
for variant in range(1 << len(variables)):
    # заполняем входной словарь c представлением переменных
    # в виде экземпляров нашего класса для функции eval()
    # key идут в прямом порядке, а i - в обратном
    for i, key in reversed(list(enumerate(reversed(variables)))):
        # используем биты этого числа для инициализыции булевых значений
        vars_for_eval[key] = BoolVar(variant & (1 << i))
        # вывод строки таблицы истинности
        print(f" {vars_for_eval[key]:<5}", end=" |")
    # вычисляем результат
    result = eval(infunc, {}, vars_for_eval)
    print(f" | {result:<5}")

print(header[0])

Оно даже чего-то считает:

D:\Programming\Python\1>python bools.py
Enter your function: a+b
-------+-------+-+-------
   a   |   b   | | Result
-------+-------+-+-------
 False | False | | False
 False | True  | | True
 True  | False | | True
 True  | True  | | True
-------+-------+-+-------

D:\Programming\Python\1>python bools.py
Enter your function: -x=y
-------+-------+-+-------
   x   |   y   | | Result
-------+-------+-+-------
 False | False | | False
 False | True  | | True
 True  | False | | True
 True  | True  | | False
-------+-------+-+-------

D:\Programming\Python\1>python bools.py
Enter your function: -p+(p*q)=q
-------+-------+-+-------
   p   |   q   | | Result
-------+-------+-+-------
 False | False | | False
 False | True  | | True
 True  | False | | True
 True  | True  | | True
-------+-------+-+-------

Кстати, программу заодно можно использовать как калькулятор. :)

D:\Programming\Python\1>python bools.py
Enter your function: 55*23-16**5//16
-+-------
 | Result
-+-------
 | -64271
-+-------


Обращение к элементам формы родительского класса
Qt Designer генерирует при изменении формы новый файл, затирая старые изменения добавленные в ручную поэтому возникает потребность все изменения вынести в отдельный файл. В файле создаю класс формы, унаследовав старую, но при попытке обратиться к ним во время компиляции появляется ошибка (данный атрибут не найден).
<code>
# parent class
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(550, 366)
    self.btn_connect = QtWidgets.QPushButton(self.centralwidget)
    self.btn_connect.setGeometry(QtCore.QRect(440, 250, 101, 41))
...
# child class
class Terminal(Ui_MainWindow):
    def setupUii(self, MainWindow):
        MainWindow.setObjectName("MainWindow2")
    def add_function(self):
        Ui_MainWindow.btn_connect.clicked.connect(self.start) # error AttributeError: type object
                                                    #'Ui_MainWindow' has no attribute 'btn_connect'
</code>
Как обращаться к элементам к элементам формы из дочернего класса?

Попробуйте:
<code>
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow

# parent class
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(550, 366)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        MainWindow.setCentralWidget(self.centralwidget)

        self.btn_connect = QtWidgets.QPushButton(self.centralwidget)
        self.btn_connect.setGeometry(QtCore.QRect(440, 250, 101, 41))

# child class
class Terminal(Ui_MainWindow):
    def setupUi(self, MainWindow):
        super().setupUi(MainWindow)
        MainWindow.setObjectName("MainWindow2")

    def add_function(self):
        self.btn_connect.clicked.connect(self.start)

    def start(self):
        print('!!!!')

class MainWindow(QMainWindow, Terminal):
    def __init__(self):
        super().__init__()

        self.setupUi(self)

        self.add_function()

if __name__ == '__main__':
    app = QApplication([])

    mw = MainWindow()
    mw.show()

    app.exec()
</code>


Python Error in double function -> UnboundLocalError: local variable 'x1' referenced before assignment
Так всё работает хорошо:

def x(x1):
    def y(y1):
        return x1 + y1
    return y

print(x(5)(6))

А так, если я проверяю переменную, то вылезает что она у меня не определена:

def x(x1):
    def y(y1):
        if x1 == 5:
            x1 = 10
        return x1 + y1
    return y

print(x(5)(6))

Не подскажите, в чём может быть ошибка?

<code>
def x(x1):
    def y(y1):
        nonlocal x1 # <-- добавлено явное указание области видимости
        if x1 == 5:
            x1 = 10 # <-- из-за этого переменная считается локальной
        return x1 + y1
    return y
print(x(5)(6))

# 16
</code>
Пояснение. Вы можете свободно читать не локальные переменные без дополнительных объявлений. Но как только вы внутри функции попытаетесь такую переменную поменять, питон сразу будет считать эту переменную локальной и перестанет видеть её там, где до того вроде бы прекрасно видел. Так что нужно явно описать область видимости такой переменной, чтобы питон перестал ругаться.


Редактирование предыдущих сообщений при создании телеграм бота
У меня есть inline кнопки
[![введите сюда описание изображения][1]][1]
При нажатии на
Информация о парковках выводиться следующее
[![введите сюда описание изображения][2]][2]
Если выбрать
Тарифы на парковки, то будет так
[![введите сюда описание изображения][3]][3]
Мне необходимо заменять старые сообщения новыми
Пробую через метод
edit_message_text

bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text=text)

Получаю
[![введите сюда описание изображения][4]][4]
Удаляються inline кнопки с сообщением и 1 сообщение после кнопок заменяться на нужное
Как можно решить мою проблему?
Код

@bot.callback_query_handler(func=lambda c:True)
def ans(c):
    if c.data == "pricingplansparking":
        for d in data:
            adress = d['adress']
            minimaltimeforpayment = d['minimaltimeforpayment']
            price = d['price']
            text = f"Адрес: {adress}\nМинимальное время для оплаты: {minimaltimeforpayment}\nЦена: {price}"
            bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text=text)

Когда Вы изменяете сообщение, Вам так же нужно передавать по новой кнопки, которые вы хотите видеть в сообщении. Сделать это можно, указав аргумент
reply_markup в функции
edit_message_text:

bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text=text, reply_markup=keyboard)

Вместо keyboard укажите Вашу переменную с клавиатурой, где вы храните кнопки.


Python не подцепает устройство измерения Agilent B1500 по GPIB
Пытаюсь провести измерения с помощью Agilent B1500, написав код в python, используя библиотеку pymeasure 0.9.0.
Проверка подключенных к компьютеру устройств:

rm = pyvisa.ResourceManager()
print (rm.list_resources())

Выполняется и выдает:

('GPIB0::10::INSTR', 'GPIB0::22::INSTR', 'GPIB0::28::INSTR')
По адресу
'GPIB0::10::INSTR' и находится мой Agilent B1500.
Импортируя библиотеку и присваивая значение:

from pymeasure.instruments.agilent import agilentB1500
b1500 = agilentB1500("GPIB0::10::INSTR", read_termination='\r\n', write_termination='\r\n', timeout=100000)

Появляется ошибка:

Traceback (most recent call last):
  line 11, in <module>
    b1500 = agilentB1500("GPIB0::10::INSTR", read_termination='\r\n', write_termination='\r\n', timeout=100000)
TypeError: 'module' object is not callable

Подскажите как побороть данную ошибку...
Мой файл
agilentB1500.py находится по адресу
C:\Users\admin\AppData\Local\Programs\Python\Python37\Lib\pymeasure\instruments\agilent
Версия установленных модулей:

importlib-metadata==4.0.1
numpy==1.20.2
pandas==1.2.4
PyMeasure==0.9.0
pyqtgraph==0.12.1
pyserial==3.5
python-dateutil==2.8.1
pytz==2021.1
PyVISA==1.11.3
six==1.15.0
typing-extensions==3.7.4.3
zipp==3.4.1

В этой строке
from pymeasure.instruments.agilent import agilentB1500 объект
agilentB1500 является модулем, потому что в пакете
agilent/ есть
agilentB1500.py. Но в файле
__init__py пакета
agilent/ уже есть импорт класса AgilentB1500, поэтому можно из пакета сделать импорт класса (пример ниже из документации):

...
from .agilentB1500 import AgilentB1500

Из примера документации импорт должен быть такой:

from pymeasure.instruments.agilent import AgilentB1500

Тогда:

b1500 = AgilentB1500("GPIB0::10::INSTR", read_termination='\r\n', write_termination='\r\n', timeout=100000)

PS.
А так, можно импортировать самостоятельно напрямую из модуля:

from pymeasure.instruments.agilent.agilentB1500 import AgilentB1500


PySide не "видит" файл со стилями
Подключаю в Pyside отдельный файл qss

 if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = App()
    File = QtCore.QFile("styles/styles.qss")
    qss = QtCore.QTextStream(File)
    app.setStyleSheet(qss.readAll())
    window.show()
    sys.exit(app.exec_())

Содержимое qss

 QListWidget, QListView, QTreeWidget, QTreeView {
outline: 0px;
}
QListWidget {
    min-width: 120px;
    max-width: 120px;
    color: white;
    background: black;
}
QListWidget::item:selected {
    background: rgb(52, 52, 52);
    border-left: 2px solid rgb(9, 187, 7);
}
HistoryPanel::item:hover {background: rgb(52, 52, 52);}
QStackedWidget {background: rgb(30, 30, 30);}
QLabel {color: white;}

Получаю ошибку

QIODevice::read (QFile, "styles/styles.qss"): device not open

Файл на месте,всё ок. Не пойму, что не так

Для
QFile нужно сначала open вызвать с обязательным указанием режима:

from PyQt5.QtCore import QFile

f = QFile("styles/styles.qss")
f.open(QFile.ReadOnly)
print(f.readAll())

Проще использовать open из питона:

with open("styles/styles.qss") as f
    print(f.read())


Воспользуйтесь set - он сам удалит все дубликаты, оставив только уникальные значения:

res = set()
with open('serials.txt') as f1:
    for line in f1:
        res.add(line.strip())
res = list(res)

Из официальной документации:

A
set is an unordered collection with no duplicate elements. Basic
uses include membership testing and eliminating duplicate entries. Set
objects also support mathematical operations like
union,
intersection,

difference, and
symmetric difference.


Хочу преобразовать тип данных
<code>
a = int(input("Введите число: "))
str(a)
print(len(a))
</code>
Так как команда len работает только с string я хочу перевести переменную a в string, что-бы он мне вернул количество цифр. Но он мне выдаёт ошибку. Пожалуйста помогите, как правильно преобразовать?

Вы можете переделать данные в string и получить количество символов:
<code>
a = int(input("Введите число: "))
answer = str(a)

print(len(answer))
</code>


Вставка данных из JSON в bot.send_message
У меня есть JSON который я разбираю и получаю нужные мне данные

data = response.json()
   for d in data:
        adress = d['adress']
        starttime = d['starttime']

Как мне эти данные вставить в bot.send_message?
Текст можно вставить так

bot.send_message(c.message.chat.id, 'Текст')

Но как вместо
'Текст' вставить
adress = d['adress'] и
starttime = d['starttime']

data = response.json()
   for d in data:
        adress = d['adress']
        starttime = d['starttime']

text = f"Address: {adress}\n Starttime: {starttime}"

bot.send_message(c.message.chat.id, text)


Как убрать перевод строки при вызове print?
Пример:
<code>
a = int(input("Введите длину линии: "))

def line(a):
    for i in range(a):
        print("—")

print(line(a))
</code>
Всё работает без ошибок, вот только он выводит "—" его по одной на одну строку, а мне надо чтобы он вывел их всех в одну строку. Не знаете как это сделать?

Если вы выводите результат функции через
print, то в самой функции не делайте
print, а только формируйте строку, и возвращайте ее через
return:

a = int(input("Введите длину линии: "))

def line(a):
    s = ''

    for i in range(a):
        s += '-'

    return s

print(line(a))

Можно функцию упростить до двух строк:

def line(a):
    return '-' * a


Поменяй местами циклы - вывод же явно транспонированный.
Для вывода перевода строки не надо указывать пустой end. К тому же, логичнее разместить его после вывода строки, а не до.
А что в этом коде вообще забыл
break?


Как создать массив функций Python?

array1 = []
for i in range(10):
    array1.append(timeit.timeit("method1()", globals=globals(), number=10) / 10)
array2 = []
for i in range(10):
    array2.append(timeit.timeit("method2()", globals=globals(), number=10) / 10)

Как в данном коде создать массив функций method1(), method2(), чтобы можно было использовать только 1 for (ну и соответственно, 1 append)?
Уточню вопрос - можно ли написать что-то подобное:

function_array = [method1(), method2()]
array1 = []
for i in range(10):
    array1.append(timeit.timeit("function_array[0]", globals=globals(), number=10) / 10)

Если я правильно понял вопрос:

array1 = []
for method in ['method1()', 'method2()']:
    for i in range(10):
        array1.append(timeit.timeit(method, globals=globals(), number=10) / 10)

Если нужно размещать результаты всё же в разные списки, то можно, к примеру, так:

from collections import defaultdict
arrays = defaultdict(list)
for method in ['method1()', 'method2()']:
    for i in range(10):
        arrays[method].append(timeit.timeit(method, globals=globals(), number=10) / 10)


Способы перебора различно вложенных списков
Пример списка - [[[1, 2], [3, 4]],  [1]]
То есть, в первом индексе может 4 вложенных в друг друга списков, во втором 2 таких списка.
Какие есть способы, кроме рекурсии, перебрать все элементы списка?

Да используйте стек или очередь
<code>
a =  [[[1, 2], [3, 4]], [5]]
st = []
st.append(a)
while len(st):
    l = st.pop()
    for x in l:
        if type(x) is list:
            st.append(x)
        else:
            print(x)
</code>


Создание обработчика по нажатию на inline кнопки и получение текста этой кнопки
Создаю телеграм бота на основе telebot
У меня динамически создаются кнопки в массиве

keyboard = InlineKeyboardMarkup()
keyboard.row_width = 2
for i in range(0, len(adress)):
    keyboard.add(InlineKeyboardButton(adress[i].text, callback_data=adress[i].text))
bot.send_message(cid, 'Выберите адрес парковки', reply_markup=keyboard)

Как мне отследить нажатие одной из кнопок и получить из неё текст? У всех кнопок разный callback_data
Если бы я знал их callback_date, то я бы сделал так:

@bot.callback_query_handler(func=lambda c:True)
def ans(c):
    cid = c.message.chat.id
    if c.data == "callback_data":

Но как это сделать в моём случае если callback_data формируется динамически?

keyboard = InlineKeyboardMarkup()
keyboard.row_width = 2
for i in range(0, len(adress)):
    keyboard.add(InlineKeyboardButton(adress[i].text, callback_data=f"address_{adress[i].text}"))
bot.send_message(cid, 'Выберите адрес парковки', reply_markup=keyboard)

Хэндлер:

@bot.callback_query_handler(lambda query: query.data.startswith("address_"))
def ans(query):
    chat_id = query.message.chat.id
    address = query.data.split("_")[1] # адрес, с которым можно работать


Как выполнить фильтрацию массива?
У меня есть список списков чисел в строковом выражении (после парсинга CSV файла). Надо оставить только списки, у которых первый элемент больше 0.
Делаю так:

data = filter(lambda record: int(record[0]) >= 0, src_data)

Все ок.
Поскольку дальше будет выборка чисел в NumPy массивы, то решил работать с NumPy массивами сразу, т.е. парсинг CSV файла сразу идет в NumPy массив и дальше работа только с такими данными.
Поэтому, для фильтрации использую следующий код:

data = src_data[np.array(src_data[:, 0], int) >= 0]

И вот тут выдает ошибку:

data = src_data[np.array(src_data[:, 0], int) >= 0]
OverflowError: Python int too large to convert to C long

Для меньшего размера массивов, все нормально, но если мне из массива нужно лишь какое-то небольшое кол-во элементов, то можно сделать так:

data = src_data[:32][np.array(src_data[:32, 0], int) >= 0]

И тоже все нормально.
Но можно ли через numpy сделать нормальную фильтрацию больших массивов или использовать только родной питоновский
filter?
P.S. из CSV сразу все не перевожу в тот же
int, потому что некоторые столбцы нужны как
int, другие как
float и т.д..

Вариантов несколько. Можно перевести в
np.float, но нужно подбирать размер, при котором вам хватит разрядов и ничего не исказится (
float - не точный тип). Но может хватить и
np.int какого-то размера. Можно потестировать разные варианты, код на примере максимума взятого как
sys.maxsize+1. Проверю, вылетит ли
exception и какова будет разница между тем, что поместилось в массив и
sys.maxsize+1:

import sys
import numpy as np
for dtype in [int,np.float,np.float16,np.float32,np.int32,np.int64,np.uint64]:
    preds = np.zeros((1, 3), dtype=dtype)
    print(preds.dtype, end=': ')
    p = [sys.maxsize+1]
    try:
        preds[0] = p
        print(preds[0]-p)
    except Exception as ex:
        print(ex)

Вывод:

int64: Python int too large to convert to C long
float64: [0. 0. 0.]
float16: [inf inf inf]
float32: [0. 0. 0.]
int32: Python int too large to convert to C long
int64: Python int too large to convert to C long
uint64: [0 0 0]

Пока я писал код вроде уже разобрались в чём дело, но пусть уж будет.
Как видно, в случае с
sys.maxsize+1 из
int-ов подходит только
uint64, но это беззнаковый тип, в случае отрицательных чисел будет фигня. Видимо, всё же
float более универсален, начиная с
float32.


Как правильно обрезать строку начиная с конца до первого с начала заданного символа?
Допустим у меня есть такая строка:

a = "Hello:World:OK"

Мне нужно обрезать строку, чтобы она выглядела вот так:

a = "Hello"

То есть, обрезать начиная с конца все символы до первого с начала ":".

Я бы в этом случае воспользовался str.partition(), т.к. нам не нужно разбивать строку по двоеточию больше одного (первого) раза:

a = a.partition(":")[0]
print(a)

или явно указать значение
maxsplit=1 в функции
str.split():

a = a.split(":", maxsplit=1)[0]


Как нарисовать квадрат по координатам? Получается нарисовать только две линии
<code>
import tkinter as tk
import tkinter.messagebox as tkmb

class MyWindow(tk.Frame):
    def __init__(self):
       self.root=tk.Tk()
       super().__init__(self.root)
       menu_main=tk.Menu(self.root)
       self.root.config(menu=menu_main)
       menu1=tk.Menu(menu_main)
       menu_main.add_cascade(label="File",menu=menu1)
       menu1.add_command(label="Quit",command=self.ext)
       menu2=tk.Menu(menu_main)
       menu_main.add_cascade(label="Edit",menu=menu2)
       menu2.add_command(label="Input",command=self.inp)
       self.canva=tk.Canvas(self.root,width=600,height=600,bg="white")
       self.canva.pack()
       self.xa=2
       self.ya=0
       self.xb=0
       self.yb=0
       self.xc=0
       self.yc=2
       self.xd=0
       self.yd=0
       self.show()
       self.root.mainloop()
    def show(self):
        self.canva.create_line(self.scale(self.xa),self.scale(self.ya),
                               self.scale(self.xb),self.scale(self.yb))
        self.canva.create_line(self.scale(self.xc),self.scale(self.yc),
                               self.scale(self.xd),self.scale(self.yd))
        self.canva.create_line(self.scale(self.xa),self.scale(self.ya),
                               self.scale(self.xb),self.scale(self.yd))
        self.canva.create_line(self.scale(self.xb),self.scale(self.yb),
                               self.scale(self.xd),self.scale(self.yd))

    def scale(self,value):
        return 300+60*value

    def ext(self):
       if tkmb.askyesno("Exit","Do you want to exit?"):
           self.root.destroy()
    def inp(self):
        self.root.destroy()

MyWindow()
</code>

   self.xb=0
   self.yb=0
   ...
   self.xd=0
   self.yd=0

У квадрата все вершины - разные:

   self.xd=2
   self.yd=2

В линиях перепутаны координаты точек.


Не понимаю в классах python [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 2 года назад.

                        Улучшить вопрос

Итак есть три класса. Скажем А, B, С - они как подпрограммы. Создаем класс майн.
В майн пишем:

    import A
    import B
    class ASR:

      def rr(self):
         self.a = A() #например подключаем класс конфига
         self.b = B() #например подключаем класс бд

   ASR.rr()

Примеры:

    class A:

        def config_run(self):
            self.config = ConfigUpdater()

            if not (os.path.isfile('config.ini')):
                cnf ="connect = :memory:"
                self.config.read_string(cnf)

    class B():
    def connect(self,connect):

       if a.get_value('connect') != ":memory:":

Как из А обратится к методам или атрибутам b, ну или наоборот? Передавать в качестве параметра к методам в инит?
Когда классы в одном файле, то через глобальную переменную хорошо выходит. А как это сделать из файлов классов я тупо не понимаю. Если делать через наследование - то пишет что вы получаете цикличность, импортируя майн в классе А.

Попробуйте выполнить сначала простой import, у вас проблемы именно с этим:
main.py

from class_a import A
from class_b import B

a = A()
b = B()

b.method1(a) # 5
b.method2()  # 5
b.method3(a)
b.method4()  # 5

class_a.py

class A:
    def __init__(self):
        self.i = 5

class_b.py

from class_a import A

class B:
    def __init__(self):
        self.i = 7

    def method1(self, a):
        print(a.i)

    def method2(self):
        a = A()
        print(a.i)

    def method3(self, a):
        self.a = a

    def method4(self):
        print(self.a.i)


Как получить набор уникальных индексов из индексов двух фреймов?
Есть
df1 и
df2. У
df1 индексы
1,2,3,4,5,6,7, у
df2 - индексы
1,2,3,8.
Как из двух наборов индексов получить один, который включает в себя как индексы первого датафрейма, так и второго без дубликатов? Т.е.,
df0 с индексами
1,2,3,4,5,6,7,8?
Пробовала так:

df0 = pd.concat([df1, df2], keys=['First', 'Second'], sort=False)
df0.groupby('Index').sum()

Здесь я использовала
sum(), но по сути не имеет значение какую функцию использовать, так как в дальнейшем будут использованы только индексы. Но почему-то этот способ не работает. У меня сокращается общий набор индексов.
Пример данных.

решение для приведенного в вопросе примера данных:
<code>
In [8]: df1 = pd.DataFrame(index=[1,2,3,4,5,6,7])

In [9]: df2 = pd.DataFrame(index=[1,2,3,8])

In [10]: df0_index = df1.index.union(df2.index)

In [11]: df0_index
Out[11]: Int64Index([1, 2, 3, 4, 5, 6, 7, 8], dtype='int64')
</code>


Аппроксимация функции нескольких переменных
Для нахождения приближающей функции y = f(x) по методу наименьших квадратов и построения графиков я использовал следующие функции из пакета NumPy:
<code>
t = np.polyfit(x, y, 3)
f = np.poly1d(t)
ax.plot(x, f(x))
</code>
Теперь появилась необходимость найти коэффициенты и построить график для функции у которой несколько переменных y = f(x,z). Как можно решить данную задачу?

Вам нужна интерполяция или аппроксимация?
Интерполяция - это поиск значений между точками с известными значениями. На практике используют линейные приближения (в двумерном случае триангуляционные), либо кубические сплайны.
Аппроксимация - приближение неизвестной функции функцией из известного семейства. Семейство выбирают из каких-либо теоретических соображений.
Судя по вашему комментарию, вам нужна именно аппроксимация - подбор параметра по известной модели. Для аппроксимации в
scipy.optimize есть функция
curve_fit(f,x,y)
Она принимает на вход функцию вида
f(x, p1, p2, ..., pn), где x - переменная (возможно, многомерная),
p1,
p2, ...,
pn - параметры.
curve_fit пытается подобрать параметры
p_i так, чтобы минимизировать отклонения в заданных точках x от известных значений y.
Пример.
Подбор параметров для двумерной функции вида
r*cos(2*pi*r) - три параметра: амплитуда A, сдвиг по оси x
dx и сдвиг по оси y
dy.

def r_cos(var_2d, A, dx, dy):
    x = var_2d[0] - dx
    y = var_2d[1] - dy
    r = np.sqrt(x*x + y*y)
    return A*r*np.cos(2*np.pi*r)

Для двумерности в переменную
var_2d передается двумерный массив, где первая строка
x а вторая строка
y.
Тестовые данные - набор случайных 20 точек с небольшим шумом. Пареметры
A=1.5,
dx=0.2,
dy=0.3.

vx = np.random.rand(20)
vy = np.random.rand(20)
v_2d = np.vstack((vx,vy))
Z = r_cos(v_2d, 1.5, 0.2, 0.3) + 0.05*np.random.rand(len(vx))

Подбор параметров:

p, p_cov = curve_fit(r_cos, v_2d, Z, p0=[1.0,0.0,0.0])

Возвращаемое значение
p - оптимальный набор параметров,
p_cov ковариционная матрица. Ошибка приближения i-го параметра оценивается как квадратный корень из соответствующего элемента на диагонали
p_cov, вектор ошибок можно вычислить как
np.sqrt(np.diag(p_cov)). Результат таков:

[1.46694227, 0.19898437, 0.29632489] ± [0.01517198, 0.0016201 , 0.00238286]


Обнуление статистики sqlite в полночь
Создаю телеграм-бота. Сам бот уже готов, теперь встал вопрос о сборе статистики. Как записывать пользователя в базу и удалять при отписке худо-бедно разобрался. Еще хотелось бы вести статистику взаимодействия с ботом, которая обнуляется раз в сутки.
На выходе хотелось получить такую стату:

Общее количество пользователей (это есть)
Количество пользователей за сутки (обнулять в полночь)
Количество запросов контента в боте (обнулять в полночь)
Среднее количество взаимодействий юзера с ботом (тут уже легко, если решить 2-ой и 3-ый пункт)

Направьте пожалуйста на путь решения. Может это легче решить вообще без sqlite? Работаю через aiogram.

Всё очень просто! тебе всего лишь нужно написать функцию, которая обнуляет статистику. И запускать ее раз в сутки.
В этом тебе может помочь совет от разработчиков aiogram


Реализация FIFO на python 2.x
Нужно реализовать метод
FIFO на
Python 2.x. Я реализовал таким образом, что я не учел?
Если это нормальный вариант реализации, то возможно ли сделать лучше и как это сделать? (Только касательно логики)

class A:
    def __init__(self):
        self.mas = []

    def append_element(self, element):
        self.mas.append(element)

    def get_element(self):
        out = self.mas[0]
        del self.mas[0]
        print out
        return out

    def print_list(self):
        print self.mas

a = A()
a.append_element(5)
a.append_element("a")
a.get_element()
a.get_element()
a.print_list()

P.S.
Ограничения на количество элементов нет.

Можно чуть короче и с проверкой на непустоту
<code>
def get_element(self):
    if self.mas:
        out = self.mas.pop(0)
    else:
        out = None
    print out
    return out
</code>


Почему html код в браузере и в Beautiful Soup отличается?
В браузере в панеле разработчика показывает вот такой вот тег:

<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response" value="03AGdBq25WAkToUZeuT7g4nM7immntzoP3yfZbJbkCOnrVgaNyLHjXhI2z-yZCOI3ZJn1_bUSyfoqfvyhURkuAD-mY1YQ7k3IHBxl1641M4vnbGstqwbpYplZ8F4MQ2xlxAOjUS0cKvmVvcPXwGdiMpIjEq3osk0ItwAKGmKgtn5fT6-Dlos7mU7X7GtNrXrk2nTUIrN9G-W944VubpLXWptMfKl2m5J5boT1eM_59HDRduOOUzPiX2zbctQSTRDs_ieyBkDJG29hFe3g2Na7EHWw8JSCxKrI1QFMmVvQh7-ppV0eiQqLNtoxy8EcW-6qHxG16cV9uqktKQdllpq_qU9EwbriAKvnuLV2ykBZEGu2d2r0kA9DB_AV__VdlUr_qsncPQ1Pi3jSE5FEDfMKWGi7US8jURtkJtwfRqGJTZ8h2gJh8bADkv5EG5XvbxKcoq3-bbTj1oM8H">

При парсинге с помощью beautiful-soup этот же тег выглядит так:

<input id="g-recaptcha-response" name="g-recaptcha-response" type="hidden"/>

Как мне получить значение value?

Две проблемы, почему так происходит:

Возможно, вы не авторизовались на сайте и тег, который вы хотите увидеть в HTML  коде страницы, могут увидеть только авторизованные пользователи.
Возможно, тег, который вы хотите получить, динамически подгружается javascript - скриптом. Метод
GET, с помощью которого вы получаете HTML - код страницы, работает только один раз, он не может получать обновления, происходящие на странице. Скорее всего, вам стоит использовать
selenium для решения поставленной задачи.


Динамическое генерирование inline кнопок при создании телеграм бота
Делаю телеграм бота через telebot
У меня есть сайт и с него через парсинг берутся данные
После парсинга получаю данные:
Адрес: ул. Балканская, 26
Адрес: ул. Ратная, 27
Мне необходимо создавать inline кнопки в зависимости от полученных значений после парсинга. Эти значения могут быть разными и создавать кнопки надо динамически. Как это можно сделать?

from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton

keyboard = InlineKeyboardMarkup()
keyboard.row_width = 2

for i in range(0, len(adress)):
    keyboard.add(InlineKeyboardButton(adress[i].text, callback_data="address_"))

bot.send_message(cid,'Выберите адрес парковки',reply_markup = keyboard)

Вам только нужно изменить под себя
callback_data (ID адреса, например, или что там у Вас) и при отправке сообщения (
bot.send_message()) в аргументе reply_markup передавать переменную keyboard.


Как вызвать функцию (каждый раз возвращает разные значения), в теле цикла несколько раз, чтобы возвращенное значение менялось? Python
Как вызвать функцию
gen_prog(), с разными выходными значениями в теле цикла функции
add_all()?

import random
import math

n = 513
a = []
b = [str(x) for x in str(n)]
all_var = []

def gen_prog():
    '''Генерирует новую комбинацию из чисел в "n".'''
    while True:
        z = random.choice(b)
        if z not in a:
            a.append(z)
        if len(a) == len(b):
            break

    return ''.join(a)

def add_all():
    '''Должна добавлять сгенерированную ранее комбинацию в список "all_var".
    Цикл длится до тех пор, пока все возможные значения не будут добавлены в список "all_var".
    Цикл бесконечный, так как значение "y" в теле цикла всегда равно одному и тому же.'''
    while len(all_var) != math.factorial(len(b)):
        y = gen_prog()
        if y not in all_var:
            all_var.append(y)

add_all()

Проблема в том, что в цикле функции
add_all() значение
y всегда равно одному и тому же. Соответственно значение
y будет добавлено в список
all_var только один раз, а затем условие
if y not in all_var: будет соблюдено и цикл станет бесконечным. Чтобы этого не произошло нужно чтобы функция
gen_prog, значение которой присвоено
y, каждый раз генерировала новые значения. Сама по себе функция
gen_prog работает исправно, однако если она находится в цикле, ее значение всегда равно одному и тому же числу.

Проблема в использовании глобальной переменной
a.
После первого вызова она заполнена, и последующие вызовы всегда генерируют то же значение. Сделайте
a локальной:

def gen_prog():
    '''Генерирует новую комбинацию из чисел в "n".'''
    a = []
    while True:
        z = random.choice(b)
        if z not in a:
            a.append(z)
        if len(a) == len(b):
            break

    return ''.join(a)


Помогите исправить ошибку "member is a required argument that is missing"
Помогите исправить ошибку.
Тольку учу питон, пытаюсь написать дискорд бота, нужно что бы он выдавал роли.
Код:

import discord
from discord.ext import commands
from discord.ext.commands import bot

bot = commands.Bot(command_prefix = "-")

@bot.command()
async def give_role (ctx, member: discord.Member):

    role_1 = discord.utils.get(ctx.message.guild.roles, name = "role name")
    await member.add_roles(role_1)

    retStr = (f"""```{member} Получил новую роль ! ```""")
    embed = discord.Embed(title="New Role", colour = discord.Color.red())
    embed.add_filed(name="role name", value = retStr)
    await ctx.send(embed=embed)

bot.run(TOKEN)

Ошибка:

File "C:\Users\user_1\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\user_1\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 855, in invoke
    await self.prepare(ctx)
  File "C:\Users\user_1\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 789, in prepare
    await self._parse_arguments(ctx)
  File "C:\Users\user_1\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 697, in _parse_arguments
    transformed = await self.transform(ctx, param)
  File "C:\Users\user_1\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 542, in transform
    raise MissingRequiredArgument(param)
discord.ext.commands.errors.MissingRequiredArgument: member is a required argument that is missing.

*Дополнение.
Ещё, опытным путем выяснял, даже есть оставить такой код ошибка остается.

import discord
from discord.ext import commands
from discord.ext.commands import bot

bot = commands.Bot(command_prefix = "-")

@bot.command()
async def give_role (ctx, member: discord.Member):
.....print("0")

bot.run(TOKEN)

Но, если функции
async def give_role (ctx, member: discord.Member): оставить только один аргумент(например
ctx) ошибка пропадет.

import discord
from discord.ext import commands
from discord.ext.commands import bot

bot = commands.Bot(command_prefix = "-")

@bot.command()
async def give_role (ctx):
.....print("0")

bot.run(TOKEN)

Как это можно исправить ?

В общем, сама проблема крылась в embed,
<code>
from discord.utils import get

@bot.command()
async def das(ctx, member: discord.Member = None):

    if member is None:
        return

    embed = discord.Embed(title=f"123", color=random.randint(0, 0xffffff))
    embed.add_field(name="321", value=member.name, inline=True)
    await ctx.send(embed=embed)

    role = "name"
    role = get(gui.roles, name=role)
    await member.add_roles(role)
</code>
в embed, title не обязателен.
Вы неправильно написали add_field и так же опечатка была в color)


Функция добавления замечаний и предложений
Нужно написать, используя функцию, добавления замечаний и предложений.
Есть магазин:
Я так понимаю нужно создать отдельный словарь в который будет записываться и выводиться предложение или замечания от покупателя. Я думаю ключ это товар содержащий сообщение от пользователя который он вводит сам.
Подскажите как это сделать.
<code>
shop = {
    "мучное": {
        "хлеб": 200
    },
    "молочное":{
        "молоко":50
    },
    "мясное": {
        "говядина":500
    }
}
</code>

<code>
shop = {
    "мучное": {
        "хлеб": 200
    },
    "молочное":{
        "молоко":50
    },
    "мясное": {
        "говядина":500
    }
    "Замечания":{}
}

fail = input("Напишите замечание")
author = input("Как вас зовут по имени и фамилии? ")
shop["Замечания"][author] = fail
</code>
Вам должно помочь понять как решить вашу проблему


Проверка всех условий в функции
есть следующий кусочек кода, в нём описан метод определенного класса.
Как сделать так, что бы эта функция завершалась только тогда, когда все условия выполнены. Причём не очень хочется пользоваться оператором and, т.к. если одно из условий не выполняется, должна сработать функция print, и вывести на экран, почему условие не выполнилось. Вот код:
<code>
def rename(self):

name = input('Введите новое имя счёта: ')

while name:

    while name[0].isdigit() == True:
        print('\nИмя счёта не должно начинаться с цифры')
        name = input('Введите новое имя счёта: ')
        continue

    while len(name) <= 3:
        print('\nИмя счёта должно быть длиннее 3-ех символов')
        name = input('Введите новое имя счёта: ')
        continue

    while name.isprintable() == False:
        print('\nИмя счёта не должно содержать посторонних символов')
        name = input('Введите новое имя счёта: ')
        continue

    while name.isspace() == True:
        print('\nИмя счёта не должно содержать только пробельные символы')
        name = input('Введите новое имя счёта: ')
        continue

    while name[0].isspace() == True:
        print('\nИмя счёта не должно начинаться с пробела')
        name = input('Введите новое имя счёта: ')
        continue
</code>
Сейчас это работает так. Если условие не выполнилось (к примеру мы ввели имя с цифрой в начале), принт выведет на экран почему, мы конечно же исправляем его, но снова допускаем ошибку (к примеру ввели имя не длиннее 3ех символов), мы снова исправляем ошибку, но если снова введём имя начиная с цифры, ошибка не обнаружится. Расскажите как исправить, на ум приходит только громадное повторение кода, где условия меняются местами по расположению выше\ниже.
Пробовал сделать вложенные циклы, но результата особо не дало, так же проскакивало через одно из условий

проверяйте сразу все ошибки
<code>
while True:
    name = input('Введите новое имя счёта: ')
    err = []
    if name[0].isdigit() :
        err.append('\nИмя счёта не должно начинаться с цифры')
    if len(name) <= 3:
        err.append('\nИмя счёта должно быть длиннее 3-ех символов')
    if not name.isprintable():
        err.append('\nИмя счёта не должно содержать посторонних символов')
    if name.isspace():
        err.append('\nИмя счёта не должно содержать только пробельные символы')
    if name[0].isspace():
        err.append('\nИмя счёта не должно начинаться с пробела')
    if err:
       print(''.join(err))
    else:
        break
</code>


Аналог Pythonовского numpy.linspace в qt c++
Собственно, есть команда на Python:
<code>
x = np.linspace(0, l, N + 1)
</code>
Как её переписать на Qt\C++?

Такая функция легко пишется "на коленке". Где то так
<code>
#include <iostream>
#include <vector>

std::vector<double> linspace(double start, double end, int count)
{
    std::vector<double> r;
    r.reserve(count);
    double step = (end - start) / (count-1);
    for (int i = 0; i < count ; i++) {
        r.push_back(start + i * step);
    }
    return r;
}

int main()
{
    auto v = linspace(0,1,11);
    for (auto a : v) {
        std::cout << a << '\n';
    }
}
</code>


проверка переменой str из списка
недавно начал программировать на python.
решил по курсу написать лёгкого голосового помощника, всё получается, но есть одно но.
<code>
def working(task):
    if "привет" == task:
        talk("Привет!")
    elif "пока" in task:
        talk("Пока!")
</code>
дело в том, что я хочу использовать список, и что бы не только одно слово проверялось а проверялись все варианты, допустим возьму лёгкий список:
"ctime": ('текущее время','сейчас времени','который час'),
хочу что бы при всех этих словах у меня появлялся нужный мне результат, но не могу додуматься.
может я что то упускаю...

Самым простым и лучшем решением будет перебор данных словоря
Представим что словарь с возможными вариантами будет под именем data
Тогда код можно написать следующим образом:
<code>
data = {"ctime":[...]}
def working(task):
 if task in data['ctime']:
  ...
</code>


Как получить одномерные срезы столбцов из 2d-массива (список списков)?
Подскажите, можно ли из списка списков выбрать столбцы командой в 1 строчку?
Конечно можно сделать через
for, например:

col0 = [obj[0] for obj in arr]
col1 = [obj[1] for obj in arr]

Но есть ли возможность сделать это как-нибудь через срезы, что-то типа
[:;0]?
Опять же, если надо получить несколько столбцов, то как-то не очень красиво писать кучу строк по выборке нескольких столбцов или через
append делать.

Вариант 1: воспользуйтесь zip() для транспонирования матрицы:

l = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]

c1, c2, c3 = zip(*l)

результат:

In [87]: print(c1, c2, c3)
(0, 3, 6, 9) (1, 4, 7, 10) (2, 5, 8, 11)

Вариант 2: если хотите через срезы - можно использовать срезы в транспонированной матрице:

m = list(zip(*l))
c1, c2, c3 = m[0], m[1], m[2]

Вариант 3: или же используйте модуль Numpy, где все это и многое другое доступно "из коробки":

import numpy as np

In [98]: a = np.array(l)

In [99]: a
Out[99]:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

In [100]: a[:, 2]
Out[100]: array([ 2,  5,  8, 11])


Неубывающая последовательность
Задана последовательность целых чисел(каждое число вводится на отдельной строке).Найти длинну самой длинной непрерывной неубывающей последовательности
Ввод:
2
4
1
5
7
9
10
3
Вывод: 4
(Максимальная последовательность 5 7 9 10)
Мой код выдает мне ошибку "string index out of range"
<code>
z=input()
vvod=[]
vvod.append(z)
nc=[]
while z!="":
    z=input()
    if z!="":
      vvod.append(z)
for i in range(len(vvod)):
  for x in vvod:
    if x<=x[i+1]:
      nc.append(i)
    else:
      nc.clear
print(len(nc))
</code>

Во-первых, вы забыли преобразовать введённые строки в числа.
Во-вторых, у вас будет
x - это введённое число, а вы пытаетесь брать их него элементы
x[i+1]. Ну и даже если это было бы нечто индексируемое, то был бы выход за границы, т.к. у вас цикл по всей длине.
В-третьих,
clear - это функция, т.е. скобочки забыли.
В-четвёртых, вы нигде не сохраняете максимальную длину списка
nc.
В общем, я думаю, что вы хотели написать что-то подобное:

print("Введите числа последовательности (или нажмите Enter чтобы завершить ввод)")
vvod = []
nc   = 1

z = input("Введите число : ")
while z != "":
    vvod.append(int(z))
    z = input("Введите число : ")

max_len = len(vvod)
if max_len > 1:
    max_len = 0

for i in range(len(vvod)-1):
    if vvod[i] <= vvod[i+1]:
        nc += 1
    else:
        nc = 1
    if nc > max_len:
        max_len = nc

print(max_len)


Как узнать telegram ID автора пересланого сообщения?
Пишу телеграм-бот, и решил добавить функцию, которая выдаёт ID автора пересланого сообщения. И у меня сразу две проблемы: во-первых, как получить ID человека, который написал пересланое сообщение? Во-вторых, как взять этот ID из сообщения ниже?
@bot.message_handler(commands=['id'])
def id(msg):
message = msg.from_user.idвозьмёт id пользователя, который написал /id как и сообщение, соответсвенно. 1)Как взять ID сообщения ниже? 2)Сработает ли при этом
message_under.from_user.id, что бы получить ID именно автора, а не человека, который переслал сообщение?

Не понятно какая библиотека используется, но согласно документации Telegram Bot API, у обьекта message должен быть аттрибут
forward_from типа User.
Ответ:
message.forward_from.user


Как сделать сравнение двух бинарных деревьев без рекурсии на языке Python?
Нужно написать функцию, которая в параметрах принимает два корневых узла бинарного дерева, а на выходе возвращает True, если бинарные деревья равны и False, если они не равны. Функция должна быть БЕЗ РЕКУРСИЙ.
Прошу помогите, пожалуйста, искал на просторах интернета, не смог найти НЕ рекурсивный способ.

Предлагаю преобразовать дерево в список, содержащий пары ("путь_до_узла", "значение"), и потом уже сравнивать списки обычным способом.
Существует довольно простой алгоритм обхода дерева "по левой стенке" используя стек:

Создаём пустой стек

Инициализируем текущий узел узлом, который находится в корне дерева

Добавляем текущий узел в стек и устанавливаем текущий узел на его левый подузел до тех пор пока не достигнем конца левой ветки (т.е. текущий узел будет равен None)

Если текущий узел равен None и стек не пустой, то
а. Извлекаем узел из стека
б. Обрабатываем его как нам надо (в вашем случае запоминаем его в списке) и устанавливаем текущий узел на его правый подузел
в. Возвращаемся на шаг №3

Если текущий узел равен None и стек пуст - то всё дерево обработано

Ну и код:

class Node:
    def __init__(self, value):
        self.left  = None
        self.right = None
        self.value = value

def tree_to_list(tree_root):
    current_node = tree_root
    stack = []
    path  = ""
    resulted_list = []

    while True:
        # идём по левой стороне дерева до конца
        if current_node != None:
            # сохраняем промежуточный узел и путь до него в стеке
            stack.append((path, current_node))
            current_node = current_node.left
            # обновляем путь до узла (идём влево 'L')
            path += 'L'
        # постепенно возвращаемся по стеку и идём вправо
        # чтобы затем опять пойти по левой стороне до конца
        elif stack:
            path, current_node = stack.pop()
            # запоминаем значение, которое хранит узел, и путь до него
            # в результируещий список, т.к. мы его полностью обработали
            # (сходили влево и теперь идём вправо)
            resulted_list.append((path, current_node.value))
            current_node = current_node.right
            # не забываем трекать путь до узла (идём вправо 'R')
            path += "R"
        else:
            # обошли всё дерево, т.к. не обработанных узлов
            # больше не осталось и стек тоже пуст
            break

    return resulted_list

def are_trees_equal(tree_root1, tree_root2):
    return tree_to_list(tree_root1) == tree_to_list(tree_root2)

#======================================================================
# тесты
tree1 = Node("root")
tree1.left                  = Node("L")
tree1.right                 = Node("R")
tree1.left.left             = Node("L-L")
tree1.left.left.right       = Node("L-L-R")
tree1.left.right            = Node("L-R")
tree1.left.right.left       = Node("L-R-L")
tree1.right.left            = Node("R-L")
tree1.right.left.left       = Node("R-L-L")

from copy import deepcopy

tree2 = deepcopy(tree1)
tree3 = deepcopy(tree1)
tree3.left.right.value = "another_value"
tree4 = deepcopy(tree1)
tree4.left.left = None

lst1 = tree_to_list(tree1)
lst2 = tree_to_list(tree2)
lst3 = tree_to_list(tree3)
lst4 = tree_to_list(tree4)
print("tree1 в виде list =", lst1)
print("tree2 в виде list =", lst2)
print("tree3 в виде list =", lst3)
print("tree4 в виде list =", lst4)

print("tree1 и tree2 -", "эквивалентны" if are_trees_equal(tree1, tree2) else "не эквивалентны")
print("tree1 и tree3 -", "эквивалентны" if are_trees_equal(tree1, tree3) else "не эквивалентны")
print("tree1 и tree4 -", "эквивалентны" if are_trees_equal(tree1, tree4) else "не эквивалентны")

Ну и результат:

D:\Programming\Python>python cmp_trees.py
tree1 в виде list = [('LL', 'L-L'), ('LLR', 'L-L-R'), ('L', 'L'), ('LRL', 'L-R-L'), ('LR', 'L-R'), ('', 'root'), ('RLL', 'R-L-L'), ('RL', 'R-L'), ('R', 'R')]
tree2 в виде list = [('LL', 'L-L'), ('LLR', 'L-L-R'), ('L', 'L'), ('LRL', 'L-R-L'), ('LR', 'L-R'), ('', 'root'), ('RLL', 'R-L-L'), ('RL', 'R-L'), ('R', 'R')]
tree3 в виде list = [('LL', 'L-L'), ('LLR', 'L-L-R'), ('L', 'L'), ('LRL', 'L-R-L'), ('LR', 'another_value'), ('', 'root'), ('RLL', 'R-L-L'), ('RL', 'R-L'), ('R', 'R')]
tree4 в виде list = [('L', 'L'), ('LRL', 'L-R-L'), ('LR', 'L-R'), ('', 'root'), ('RLL', 'R-L-L'), ('RL', 'R-L'), ('R', 'R')]
tree1 и tree2 - эквивалентны
tree1 и tree3 - не эквивалентны
tree1 и tree4 - не эквивалентны


Есть ли способ динамически обновлять таблицу по мере добавления данных?
К примеру - есть изначально выгруженные в таблицу данные из бд, появилась необходимость дополнить их, по нажатию кнопки вылазит диалоговое окно, заполняются данные и уходят в бд и одновременно в таблицу, этот способ не очень мне подходит.
Можно ли сразу после добавления данных в бд заново заполнить таблицу ? Или как-то обновить её данные ?
Пробовал так -
<code>
self.tableWidget.clear()
table_index = 0
self.add_table()
</code>
Но данные не добавляются и увеличивается кол-во последующих строк

Я очень рекомендую вам начать изучение
Qt SQL и
SQL Programming
А также посмотрите некоторые ответы как правильно работать с БД использую PyQt:
PyQt5 и QtSql, вывод элементов БД ,
PYQt5. Вызов формы для заполнения БД, считывание данных из этой формы


Дана строка из латинских букв и цифр. Как из нее извлечь отдельно цифры и отдельно буквы? (python) [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 2 года назад.

                        Улучшить вопрос

Дана строка из латинских букв и цифр. Как из нее извлечь отдельно цифры и отдельно буквы? (python)

Прогнать строку через цикл

если содержится в (Aa-Zz):    в строку с буквами
если содержится в (0-9):    в строку с цифрами


Найти числа между максимальным и минимальным в списке
Имеется массив A из N произвольных чисел. Найти максимальное и минимальное число. Напечатать те элементы массива, которые находятся между ними. Я только учусь и поэтому смог только написать это:
<code>
A = []
N = int(input('Сколько в массиве будет элементов '))

for i in range(N):
    A.append(int(input()))

a1 = max(A)
a2 = min(A)
</code>

array = []
n = int(input('Сколько в массиве будет элементов '))

for i in range(n):
    array.append(int(input(f'{i+1}-е число: ')))

допустим, после заполнения вы получили такой список:

[3, 5, -1, 2, 13, 42, 3, 7, 1]

вам нужны индексы минимального и максимального элемента:

index_min = index_max = 0
value_min = value_max = array[0]

for i, a in enumerate(array[1:], 1):
    if a < value_min:
        value_min = a
        index_min = i
    if a > value_max:
        value_max = a
        index_max = i

зная их, выведите срезом то, что между ними:

>>> print(array[index_min+1:index_max])
[2, 13]

UPD Если индекс минимального элемента может быть больше индекса максимального, перед срезом стОит это проверить:

if index_min < index_max:
    print(array[index_min+1:index_max])
else:
    print(array[index_max+1:index_min])

Спасибо CrazyElf за уточнение!


Как ответить на сообщения пользователя в боте телеграм с кнопками
нужно при нажатии button что бы выводилось сообщение о том что бы пользователь ввел число, он должен ввести число но не меньше 2 и не больше 80 как описано в этом отрывке кода, и если число от 2 до 80 то нужно вывести другое сообщение с другой инлайн кнопкой

@bot.callback_query_handler(func=lambda call:True)
def keyboard_inline_call(call):
    elif call.data == 'button':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,text='Enter num')
        try:
            if int(call.message.text) < 2:
                bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='❌')
            elif int(call.message.text) > 80:
                bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='❌')
            else:
                k = telebot.types.InlineKeyboardMarkup()
                k.add(types.InlineKeyboardButton(text='Buy', callback_data='buy'))
                bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
                text='что то', reply_markup=k)
        except ValueError:
            bot.send_message(call.message.chat.id, 'Sorry: Error')

но бот отправляет сразу

Enter num
Sorry: Error

не давая пользователю ввести число
помогите как решить данный вопрос

получилось найти решение для моего вопроса

elif call.data == 'button':
            amount_item = bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,text='Enter num')
            bot.register_next_step_handler(amount_item, answer_item)
def answer_item(message):
    try:
        item_summ = message.text
        if int(item_summ) < 2:
            amount_item = bot.send_message(message.chat.id, text='❌')
        elif int(item_summ) > 80:
            amount_item = bot.send_message(message.chat.id, text='❌')
        else:
            ppk = telebot.types.InlineKeyboardMarkup()
            ppk.add(types.InlineKeyboardButton(text='Buy', callback_data='buy'))
            bot.send_message(message.chat.id,
            text='🧾CHTO-TOTAM'+ str(item_summ),
            reply_markup=ppk, parse_mode="Html")
    except ValueError:
        bot.send_message(message.chat.id, 'Sorry: Error')


Подскажите как сделать % наценку сразу на все товары
Подскажите как сделать % наценку сразу на все товары.
Изменения цены это так выполняется:
<code>
shop = {
    "мучное": {
        "хлеб": 200
    },
    "молочное":{
        "молоко":50
    },
    "мясное": {
        "говядина":500
    }
}

def update_price(user_group, products, news_price,shop=shop):
    shop[user_group][products] += news_price
    return shop

update_price(user_group, products, news_price)

def print_all_products(shop=shop):
    for group, array in shop.items():
        print ("Раздел: " + group)
        for product, price in array.items():
            print(product + " - " + str(price))
print_all_products()
</code>

Процент добавляется через умножение
<code>
def update_percent(persent, shop=shop):
    for group in shop.keys():
        for products in shop[group].keys():
            shop[group][products] *= 1 + persent/100

update_percent(5)
</code>


Как пронумеровать элементы списка? [дубликат]

На этот вопрос уже даны ответы здесь:

Как пронумеровать каждый вывод print?

                                (3 ответа)

Закрыт 2 года назад.

<code>
    def click_element(url):                                                                                #
        driver.get(url)                                                                                #Перейти по URL
        sleep(3)                                                                                #Ждём 3 сек
        driver.find_element_by_class_name("btn_green_white_innerfade.btn_medium.market_noncommodity_buyorder_button").click()       #Найти кнопку "Заказать"
        driver.find_element_by_id("market_buy_commodity_input_price").click()                                                       #Нажать на поле указа стоимости
        driver.find_element_by_id("market_buy_commodity_input_price").send_keys(u'\ue009' + u'\ue003')                              #Очистить строку стоимость
        driver.find_element_by_id("market_buy_commodity_input_price").send_keys(cost)                                               #Добавить свою стоимость
        driver.find_element_by_id("market_buy_commodity_input_quantity").click()                                                    #Нажать на поле указа кольчевства
        driver.find_element_by_id("market_buy_commodity_input_quantity").send_keys(u'\ue014' + u'\ue009' + u'\ue003')               #Очистить строку количевство
        driver.find_element_by_id("market_buy_commodity_input_quantity").send_keys(suma)                                            #Добавить свою сумму
        driver.find_element_by_id("market_buyorder_dialog_accept_ssa").click()                                                      #Ставим галку "Подтвердить сделку"
        driver.find_element_by_id("market_buyorder_dialog_purchase").click()                                                        #Заказываем
        sleep(15)                                                                                #Ждём 15 сек
        print(URL)

    if __name__ == "__main__":                                                                                #
        links = [link1, link2, link3, link4, link5, link6, link7, link8, link9, link10                                              #Ссылки которые будет менятся в строке 154
    , link11, link12, link13, link14, link15, link16, link17, link18, link19, link20
    , link21, link22, link23, link24, link25, link26, link27, link28, link29, link30
    , link31, link32, link33, link34, link35, link36, link37, link38, link39, link40
    , link41, link42, link43, link44, link45, link46, link47, link48, link49, link50
    , link51, link52, link53, link54, link55, link56, link57, link58, link59, link60
    , link61, link62, link63, link64, link65, link66, link67, link68, link69, link70
    , link71, link72, link73, link74, link75, link76, link77, link78, link79, link80
    , link81, link82, link83, link84, link85, link86, link87, link88, link89, link90
    , link91, link92, link93, link94, link95, link96, link97, link98, link99, link100
    , link101, link102, link103, link104, link105, link106, link107, link108, link109
    , link110, link111]
        for link in links:                                                                                #
            click_element(link)
</code>

links = [
    'link1',
    'link2',
    'link3',
    'link42'
    ]

"Задача вывести номер ссылки с которой щас производятся действия": enumerate на каждой итерации возвращает кортеж (i, link), просто печатайте i там, где нужно:

for i, link in enumerate(links, 1):
        print(f'{i}: {link}')

выведет:

1: link1
2: link2
3: link3
4: link42

ps ассоциация


Python VK_API: TypeError

import vk_api
import rpc
token = 'токен стандалона'
vk = vk_api.VkApi(token=token)
user = vk.method('account.getProfileInfo',access_token='токен моего аккаунта')
print(user)

В ответ:

TypeError: method() got an unexpected keyword argument 'access_token'

Я понимаю то, что ошибка возникает из-за того, что в функции метод нет аргумента
access_token, но куда тогда вставлять
access_token?
UPD: Документацию читал, ничего подробного не нашел

Тут есть сразу несколько вариантов. Попробуйте для начала через
vk_api, я однажды уже столкнулся с этой проблемой, могу разъяснить подробнее в комментариях. Метод
vk_api.VkApi требует не просто
token, а
access_token, возможно, это и есть решение проблемы

import vk_api
vk_session = vk_api.VkApi(access_token = "ваш токен")
vk = vk_session.get_api()

Обнаружил новую схему, которая имеет надежду на выживание. Тут сразу достается новый токен, нужен лишь пароль и логин :

vk_session = vk_api.VkApi(LOGIN, PASSWORD)
vk_session.auth()
new_token = vk_session.token['access_token']


Написать функцию покупка товара и добавление его в корзину магазина [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 2 года назад.

                        Улучшить вопрос

Написать функцию покупка товара и добавление его в корзину магазина.
Есть магазин:
<code>
shop = {
    "мучное": {
        "хлеб": 200
    },
    "молочное":{
        "молоко":50
    },
    "мясное": {
        "говядина":500
    }
}
# Создаем словарь
shopping_cart = {}
</code>
Теперь создаем функцию которая исходя из запроса пользователя брала бы товал из shop, перезаписывала в новый словарь нашу корзину shopping_cart удаляла купленный товар из shop и выводила вы приобрели товар и какие товары лежат в корзине, и опять выводила предложение о покупке и список оставшихся товаров в shop.
При условии, что в корзину можно добавить только те товары которые есть в магазине.
Но как это сделать я не знаю подскажите.

Вот готовый вариант, который будет работать при заданном словаре. Программа не будет работать, если там будет куча вложенных словарей потому, что я не вижу в этом потребностей. Если надо это сделать, то я могу попробовать.
<code>
shop = {
"мучное": {
    "хлеб": 200
},
"молочное":{
    "молоко":50
},
"мясное": {
    "говядина":500
}
shopping_cart = {}

def buy(name):
    global shop, shopping_cart
    for keys in shop.keys():
        for keys2 in shop[keys].keys():
            if keys2 == name:
                shopping_cart[name] = shop[keys][name]
                del shop[keys][name]
                if len(shop[keys]) == 0: del shop[keys]
                print('Вы купили товары:', shopping_cart)
                return
    print('Такого товара нет')
while len(shop) > 0:
    name = input('Товар, который вы хотите купить:').lower()
    buy(name)

print('Все.Товары закончились')
</code>


В чем ошибка sqlite3 python?
Есть телеграм бот, в который если прописать /start, то он добавит пользователя в базу данных sqlite3 если его там не было. При перезапуске бота, если открыть профиль то выдает ошибку на подобие что пользователя нету в базе данных, хотя он там есть! Если также после перезапуска сначала написать /start, то в базе данных ничего не добавляется, значит пользователь там есть, но после если написать профиль, та же самая ошибка
Текст ошибки:

File "C:\Users\tornado\Desktop\changer\changer.py", line 269, in cmds
    profile(message)
  File "C:\Users\tornado\Desktop\changer\changer.py", line 134, in profile
    user = list(cursor.fetchone())
TypeError: 'NoneType' object is not iterable

Код:

import telebot
import config
from telebot import types
import sqlite3

# конект к дб юзеров
conn = sqlite3.connect("users.db", check_same_thread=False)
cursor = conn.cursor()
try:
    cursor.execute("""CREATE TABLE users (id int, balance int, transactions int, turnover int, ltc_rate_min int, ltc_rate_max int)""")
except:
    pass
conn.close()

# токен
bot = telebot.TeleBot(config.TOKEN)

@bot.message_handler(commands=['start'])
# если старт
def welcome(message):
    # подключение к дб
    conn = sqlite3.connect("users.db", check_same_thread=False)
    cursor = conn.cursor()
    sql = "SELECT * FROM users WHERE id=?"
    tg_id = message.from_user.id
    cursor.execute(sql, [(tg_id)])
    # если пользователя нету в дб то добавляем
    if cursor.fetchone() is None:
        new_user = """INSERT INTO users VALUES ({0}, 0, 0, 0, 0, 0)"""
        tg_id = message.from_user.id
        cursor.execute(new_user.format(tg_id))
        conn.commit()
    conn.close()

    # запуск alarm!
    t = Thread(target=alarm, args=(message, ))
    t.start()

    menu(message)

# отправка профиля
def profile(message):
    # отправка клавиатуры
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item0 = types.KeyboardButton("💵 Пополнение")
    item1 = types.KeyboardButton("💸 Вывод")
    item2 = types.KeyboardButton("🔙 Меню")
    markup.row(item0, item1)
    markup.row(item2)

    # получение данных из дб
    conn = sqlite3.connect("users.db", check_same_thread=False)
    cursor = conn.cursor()
    sql = "SELECT * FROM users WHERE id=?"
    tg_id = message.from_user.id
    cursor.execute(sql, [(tg_id)])

    # данные
    if cursor.fetchone() is None:
        bot.send_message(message.chat.id, "Напишите /start")
    else:
        user = list(cursor.fetchone())
        id = user[0]
        balance = user[1]
        transactions = user[2]
        turnover = user[3]

        conn.close()

        # отправка сообщения
        bot.send_message(message.chat.id, "👤 Профиль\nИмя: {}\nID: ".format(message.from_user.first_name) + str(id) + "\nБаланс: " + str(balance) + " р.\nСделок совершено: " + str(transactions) + " шт.\nОборот: " + str(turnover) + " р.", parse_mode='html', reply_markup=markup)

Проблема в этом куске кода:

    if cursor.fetchone() is None:        # возвращает пользователя
        bot.send_message(message.chat.id, "Напишите /start")
    else:
        user = list(cursor.fetchone())   # а здесь уже возвращает None,
                                         # т.к. пользователь был прочитан тремя строками выше

Перепишите его на что-то наподобие этого:

    data = cursor.fetchone()
    if data is None:
        bot.send_message(message.chat.id, "Напишите /start")
    else:
        user = list(data)


Не проходит лимит по времени (считаем числа с определёной суммой цифр и делимостью)
Подсчитать сколько целых чисел в диапазоне
[a, b] делятся на 11 и имеют сумму цифр в диапазоне
[c, d]. Ограничения
1 ≤ a ≤ b < 10^18,
1 ≤ с ≤ d < 163. Время расчета не более двух секунд.
Пример:

Вход: a = 11, b = 40, c = 3, d = 6
Выход: 2

Python:

a, b = map(int, input().split())
c, d = map(int, input().split())
count = 0
i = a
while i % 11 != 0:
    i = i + 1
first = i
for k in range(first, b+1, 11):
    s = sum(map(int, str(k)))
    if c <= s <= d:
        #print (k, s)
        count = count + 1
print(count)

C++:

#include <iostream>
using namespace std;

int digitsSum(int n) {
  int sum = 0;
  while (n != 0) {
    sum += n % 10;
    n /= 10;
  }
  return sum;
}

int main() {
  long int a, b, c, d, kil = 0;
  cin >> a >> b;
  cin >> c >> d;
  int first = a;
  while (first % 11 != 0) {
    first++;
  }
  for (int i = first; i <= b+1; i = i + 11) {
    if (i % 11 == 0 && c <= digitsSum(i) && digitsSum(i) <= d) {
      kil = kil + 1;
    }
  }
  cout << kil;
  return 0;
}

Ваша попытка решить задачу правильная, но не достаточно быстрая. На моей машине простейший цикл на Питоне делает 24 миллиона итераций в секунду. В худшем случае нам нужно сделать
10^18 / 11 итераций.

(10^18 / 11) / (24 * 10^6) ~= 4 * 10^9 секунд ~= 123 года
Быстрые оценки показывают, что пробему не решить заменой языка программирования. Даже если C++ в сто раз быстрее Питона вы получите один год работы, а требуется две секунды. Делайте прикидки чтобы не тратить зря время.
Пусть
F(A, r) - множество элементов множества
A которые при делении на
11 дают остаток
r.
Обозначим через
A + x множество каждый элемент которого есть сумма элемента из
A и числа
x.
Свойство
F(A, r) + x = F(A + x, (r + x) mod 11) проверяется непосредственно.
Пусть
G(A, s) - множество элементов множества
A у которых сумма цифр меньше
s.
Вычислим
G([0, n), s). Пусть десятичная запись
n имеет вид
dXX...X, где
d - цифра в старшем разряде. Имеем
n = dXX...X = 100...0 + (d-1)XX...X.
Полуинтервал
[0, dXX...X) разобьём на два
[0, 100...0) + [100...0, dXX...X) (здесь
+ - объединение множеств).
Тогда
G([0, dXX...X), s) = G([0, 100...0), s) + G([100...0, dXX...X), s).
Свойство
G([100...0, dXX...X), s) = G([0, (d-1)XX...X), s - 1) + 100...0 проверяется непосредственно.
Обозначим
Н(A, s, r) = F(G(A, s), r).

H([0, dXX...X), s, r) =
= F(G([0, dXX...X), s), r) =
= F(G([0, 100...0), s) + G([100...0, dXX...X), s), r) =
= F(G([0, 100...0), s), r) + F(G([100...0, dXX...X), s), r) =
= H([0, 100...0), s, r) + F(G([0, (d-1)XX...X), s - 1) + 100...0, r) =
= H([0, 100...0), s, r) + (F(G([0, (d-1)XX...X), s - 1), (r - 100...0) mod 11) + 100...0) =
= H([0, 100...0), s, r) + (H([0, (d-1)XX...X), s - 1, (r - 100...0) mod 11) + 100...0).

Обозначим
h(n, s, r) = |H([0, n), s, r)|. Получаем:

h(dXX...X, s, r) =
= h(100...0, s, r) + h((d-1)XX...X, s - 1, (r - 100...0) mod 11).

Ещё одно тождество, которое будет нужно:

h(100...0, s, r) =
= h(10...0, s, r) + h(90...0, s - 1, (r - 10...0) mod 11).

Оба тождества объединяются вместе. По
n вычисляем
m - максимальная степень 10 меньшая
n. Тогда

h(n, s, r) = h(m, s, r) + h(n - m, s - 1, (r - m) mod 11).

База.

h(n<=0, ?, ?) = 0
h(?, s<=0, ?) = 0
h(n=1, s>0, r!=0) = 0
h(n=1, s>0, r=0) = 1

Функцию
h нужно кешировать, иначе повторяющиеся вычисления убьют всю скорость.
Последнии шаг. Мы имеем вычислять
h на прямоугольниках
[0, n)*[0, s). А нам нужны
[n1, n2)*[s1, s2).

h([n1, n2)*[s1, s2)) =
= h([n1, n2)*[0, s2)) - h([n1, n2)*[0, s1)) =
= (h([0, n2)*[0, s2)) - h([0, n1)*[0, s2))) -
-(h([0, n2)*[0, s1)) - h([0, n1)*[0, s1))) =
= h(n2, s2) - h(n1, s2) - h(n2, s1) + h(n1, s1)

Теперь код:

import functools

def ten_pow_below(n):
    m = 1
    while 10 * m < n:
        m *= 10
    return m

@functools.lru_cache(None)
def h(n, s, r):
    if n <= 0:
        return 0
    if s <= 0:
        return 0
    if n == 1:
        if r == 0:
            return 1
        return 0

    m = ten_pow_below(n)
    return h(m, s, r) + h(n - m, s - 1, (r - m) % 11)

def hh(n1, n2, s1, s2):
    return h(n2 + 1, s2 + 1, 0) - h(n1, s2 + 1, 0) - h(n2 + 1, s1, 0) + h(n1, s1, 0)

a, b = map(int, input().split())
c, d = map(int, input().split())
print(hh(a, b, c, d))

$ echo -e "11 40\n3 6" | python digital_sum.py
2

P.S. Вывод формулы слишком сложный. Но без него я делал заход за заходом не получая нужный результат. Если у вас есть идеи как объяснить проще, я с удовольствием поплюсую ваш ответ.


Построить обратную матрицу методом Гаусса
Делаю код для расчета такой матрицы. Он состоит из двух частей - прямой ход, на котором получаю  треугольную матрицу с единицами на главной диагонали и нулями ниже. На втором этапе двигаюсь "снизу-вверх", преобразуя элементы, лежащие выше главной диагонали к нулю, тем самым добиваясь единичной матрицы в результате.
Спасибо: ранее здесь подсказали с первой частью - массив дает треугольную матрицу. Однако пытаясь выполнить обратный ход, ловлю ошибку, свидетельствующую о проблемах с размерностью: shapes (1,6) and (1,6) not aligned: 6 (dim 1) != 1 (dim 0)
<code>
import numpy as np
def inverse_matrix(matrix_origin):
    """
    Функция получает на вход матрицу, затем добавляет к ней единичную матрицу,
    проводит элементарные преобразования по строкам с первоначальной, добиваясь получения слева единичной матрицы.
    В этом случае справа окажется матрица, которая является обратной к заданнй первоначально
    """
    # Склеиваем 2 матрицы: слева - первоначальная, справа - единичная
    m = np.hstack((matrix_origin,
                np.matrix(np.diag([1.0 for i in range(matrix_origin.shape[0])]))))
#     n = matrix_origin.shape[1]
    n = m.shape[1]

    for nrow, row in enumerate(m):
        # nrow равен номеру строки
        # row содержит саму строку матрицы
        divider = row[nrow] # диагональный элемент
        # делим на диагональный элемент:
        row /= divider
        # теперь вычитаем приведённую строку из всех нижележащих строк:
        for lower_row in m[nrow+1:]:
            factor = lower_row[nrow] # элемент строки в колонке nrow
            lower_row -= factor*row # вычитаем, чтобы получить ноль в колонке nrow

# обратный ход:
    for k in range(n - 1, 0, -1):
        for row_ in range(k - 1, -1, -1):
            if m[row_, k]:
                # 1) Все элементы выше главной диагонали делаем равными нулю
                m[row_, :] -= m[k, :] * m[row_, k]
    return np.hsplit(m, n // 2)[1]

matrix = np.array([[3.8, 6.7, -1.2],
                   [6.4, 1.3, -2.7],
                   [2.4, -4.5, 3.5]])

inverse_matrix(np.copy(matrix))
</code>

У вас несколько ошибок в коде.

Вы конструируете правую часть как
np.matrix, поэтому после
np.hstack вы получаете тоже объект типа
np.matrix. Это очень специальный вид массивов. В частности, итератор
m возвращает не одномерные строки чисел, а двумерные массивы формы
(1,6). В результате
row[nrow] оказывается не числом, а одномерным массивом.
В
numpy есть специальная функция для построения единичной матрицы:
np.eye(n) строит единичную матрицу размером
n x n. Поэтому вам лучше конструировать
m как
m = np.hstack((matrix_origin, np.eye(len(matrix_origin)))

Вы инициализировали
n как число колонок в
m:
m = m.shape[1]. Но тогда вот эта строчка неверна:
for row_ in range(k - 1, -1, -1) - у вас нет строк с номерами 5,4,3. Если
n определяет число строк, то нужно присваивать вот так:
n = m.shape[0]

Но в таком случае сломается ваш код выделения правой части
np.hsplit(m, n // 2)[1]. Я предлагаю использовать индексирование вместо hsplit:
m[:, n:].copy() есть двумерный массив, каждая строка которого есть строка из
m начиная с элемента с номером
n, то есть элементы №№ 3,4 и 5. Как раз правая часть матрицы
m. Метод
copy() вызывается для того, чтобы не держать указатель на
m, в противном случае
m будет висеть в памяти до тех пор, пока "жив" указатель на результат функции
inverse_matrix

После исправления этих ошибок получится что-то вроде

def inverse_matrix(matrix_origin):
    """
    Функция получает на вход матрицу, затем добавляет к ней единичную матрицу,
    проводит элементарные преобразования по строкам с первоначальной, добиваясь получения слева единичной матрицы.
    В этом случае справа окажется матрица, которая является обратной к заданнй первоначально
    """
    # Склеиваем 2 матрицы: слева - первоначальная, справа - единичная
    n = matrix_origin.shape[0]
    m = np.hstack((matrix_origin, np.eye(n)))

    for nrow, row in enumerate(m):
        # nrow равен номеру строки
        # row содержит саму строку матрицы
        divider = row[nrow] # диагональный элемент
        # делим на диагональный элемент:
        row /= divider
        # теперь вычитаем приведённую строку из всех нижележащих строк:
        for lower_row in m[nrow+1:]:
            factor = lower_row[nrow] # элемент строки в колонке nrow
            lower_row -= factor*row # вычитаем, чтобы получить ноль в колонке nrow
    # обратный ход:
    for k in range(n - 1, 0, -1):
        for row_ in range(k - 1, -1, -1):
            if m[row_, k]:
                # 1) Все элементы выше главной диагонали делаем равными нулю
                m[row_, :] -= m[k, :] * m[row_, k]
    return m[:,n:].copy()

Результат инвертирования вашей матрицы

array([[ 0.04128819,  0.09805945,  0.08980182],
       [ 0.15689513, -0.08790039, -0.01401625],
       [ 0.1734104 , -0.18025555,  0.206115  ]])

Я добавил jupyter notebook со своим вариантом, он быстрее на 10-15% за счёт выбора операций индексирования.


Как узнать есть ли значение переменной внутри списка
У меня есть список выигрышный значений и переменная, которой присваивается случайное значение.
Я хочу получить такой результат: если внутри списка есть число, которое равняется переменной, то ..., если переменная не равняется никакому числу из списка, то...
Проблема заключается в том, что когда происходит сравнивание, то сравнивается каждое число из списка.
Код:

import random

startmoney = int(input("Введите ваш стартовый баланс: "))

COEFFICIENT = 0.001

WIN_FIELDS = [2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 28, 29, 31, 33, 35]

balance1 = []
games1 = []
def money_manipulaion(money):
    bet = startmoney * COEFFICIENT
    if bet > money:
        bet = money
    money -= bet
    return money, bet

def strategy1():
    win = 0
    loose = 0
    games = 0
    money = startmoney

    while money > 0:
        money, bet = money_manipulaion(money)

        balance1.append(money)
        games1.append(len(games1) + 1)

        ball = random.randint(1, 37)

        for a in WIN_FIELDS:
            if ball == a:
                money += bet * 2
                win += 1
            else:
                loose += 1
    games = win + loose

Теперь чуть подробнее: допустим ball = 15. Когда код доходит до строки
if ball == a:, то он проверяет каждую переменную списка на соответствие, тем самым накручивая счетчик поражений, делает он это пока не проверит каждое число.
Я бы хотел, что бы программа проверяла, есть ли в списке число равное переменной и выполняло условие 1, а если его нет, то условие 2, не проверяя каждый элемент по очереди. Как это можно реализовать?

Цикл не нужен вообще. Замените его на:

if ball in WIN_FIELDS:
   money += bet * 2
   win += 1
else:
   loose += 1

И
WIN_FIELDS лучше сделать множеством - так поиск быстрее будет для больших списков:

WIN_FIELDS = {2, 4, 8, .... и т.д}


При попытке сохранить данные ошибка: AttributeError: 'Command' object has no attribute 'commit'
При попытке сохранить внесенные данные выдает ошибку, что команда не имеет атрибута commit:

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'Command' object has no attribute 'commit'

Часть кода, где выдает ошибку

    sql.execute("UPDATE balance SET balanc = 1000 WHERE id = 829768910458191892")
    db.commit()

Код инициализации бд

db = sqlite3.connect('balanc.db')
sql = db.cursor()

@client.event
async def on_ready():
    print("Bot is ready")
    sql.execute("""CREATE TABLE IF NOT EXISTS balance (
        id INT,
        name TEXT,
        balanc BIGINT,
        rep INT
        )
        """)

Похоже вы где-то в коде переприсвоили значение переменной
db каким-то
Command обьектом, у которого в отличие от объекта
sqlite3.connect нет атрибута/метода
commit.
Чтобы убедиться сделайте:

print(type(db))


Я тут почитал про реальное время... лучше 0.000125 точности не получишь на прерываниях таймера.
Самый точный способ - это скушать процессор циклом

a=0

for i in range(int(steps)):
    start = time.time()
    t = time.perf_counter() + 0.00001
    while t > time.perf_counter():
        pass
    a+=time.time()- start

print(a/steps)

Но на вызов time.perf_counter() и time.time() теряется время и на моем компьютере получилось

0.0000110626220703125

вместо 0.00001, ошибка на ~0.000001 не сильно зависит от интервала.
Но в Вашем случае циклы без сна 0.001-0.002 что делает сон в  0.00001 не существенным.
Поищите другой способ задать частоту на выводе - средствами ардуины


Что делать если вылезает ошибка EOL while scanning string literal, когда я хочу запустить код guess
<code>
# Эта игра по угадыванию чисел.
import random

guessesTaken = 0

print('Привет! Как тебя зовут?')
myName = input()

print('Будешь играть в "Угадай число"?')
answer = input()

number = random.randint(1, 20)
print('Что ж, давай начнём! Я загадал число от 1 до 20')

for guessesTaken in range(6):
    print('Попробуй угадать.') # Четыре пробелов перед именем функции print
    guess = input()
    guess = int(guess)

    if guess < number:
        print('Твоё число слишком маленькое.') # Восемь пробелов перед именем функции print

    if guess > number:
        print('Твоё число слишком большое.')

    if guess == number:
        break

if guess == number:
    guessesTaken = str(guessesTaken + 1)
    print('Отлично, ' + myName + '! ы справился за ' + guessesTaken + ' попытки!)

if guess != number:
    number= str(number)
    print('Увы. Я загадал число ' + number + '.')`# Эта игра по угадыванию чисел.
import random

guessesTaken = 0

print('Привет! Как тебя зовут?')
myName = input()

print('Будешь играть в "Угадай число"?')
answer = input()

number = random.randint(1, 20)
print('Что ж, давай начнём! Я загадал число от 1 до 20')

for guessesTaken in range(6):
    print('Попробуй угадать.') # Четыре пробелов перед именем функции print
    guess = input()
    guess = int(guess)

    if guess < number:
        print('Твоё число слишком маленькое.') # Восемь пробелов перед именем функции print

    if guess > number:
        print('Твоё число слишком большое.')

    if guess == number:
        break

if guess == number:
    guessesTaken = str(guessesTaken + 1)
    print('Отлично, ' + myName + '! ы справился за ' + guessesTaken + ' попытки!)

if guess != number:
    number= str(number)
    print('Увы. Я загадал число ' + number + '.')
</code>
доброго времени суток. Я новичок. У меня вылезает ошибка EOL while scanning string literal и я не знаю как её исправить. Помогите, пожалуйста

Похоже вы забыли поставить кавычки в этой строке:
<code>
print('Отлично, ' + myName + '! ы справился за ' + guessesTaken + ' попытки!')
</code>


Как мне получить данные той строки в которой нажимается кнопка?
main.py

from PyQt5 import QtCore, QtGui, QtWidgets
from setings_ip import *
from PyQt5.Qt import *
import sqlite3

# Окно добавления
class InputCorporateDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Input Dialog')

        self.line_edit_ip = QLineEdit()
        self.line_edit_corporate = QLineEdit()
        self.line_edit_street = QLineEdit()
        self.line_edit_city = QLineEdit()

        form_layout = QFormLayout()
        form_layout.addRow('IP:', self.line_edit_ip)
        form_layout.addRow('Организация:', self.line_edit_corporate)
        form_layout.addRow('Улица:', self.line_edit_street)
        form_layout.addRow('Город:', self.line_edit_city)

        button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        button_box.accepted.connect(self.accept)
        button_box.rejected.connect(self.reject)

        main_layout = QVBoxLayout()
        main_layout.addLayout(form_layout)
        main_layout.addWidget(button_box)
        self.setLayout(main_layout)

class Widget(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        # Выравнивание
        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
        self.tableWidget.horizontalHeader().setMinimumSectionSize(0)

        self.pushButton.clicked.connect(self.add_new_row)

        self.row_count = 1
        self.table_index = 0

        # Подключение к бд
        sqlite_connection = sqlite3.connect("New.db")
        cursor = sqlite_connection.cursor()

        sqlite_select_query = """SELECT ip, Location, Yi, Gor FROM ips"""
        cursor.execute(sqlite_select_query)
        records = cursor.fetchall()

        cursor.close()
        sqlite_connection.close()

        # Цикл который заполняет данными таблицу
        for row in records:
            # -------------------------- добавление цветных кнопок
            self.clear_button = QPushButton("Удалить", self)
            self.clear_button.setStyleSheet("QPushButton {\n"
            "    background-color: #fa7f72;\n"
            "}\n"
            "QPushButton:hover {\n"
            "    background-color: white;\n"
            "}\n"
            "QPushButton:pressed {\n"
            "    color: #626AB0;\n"
            "    background-color: #D5D4D4;\n"
            "}")

            self.edit_button = QPushButton("Изменить", self)
            self.edit_button.setStyleSheet("QPushButton {\n"
            "    background-color: #00b8ef;\n"
            "}\n"
            "QPushButton:hover {\n"
            "    background-color: white;\n"
            "}\n"
            "QPushButton:pressed {\n"
            "    color: #626AB0;\n"
            "    background-color: #D5D4D4;\n"
            "}")
            # ---------------------------

            self.tableWidget.setRowCount(self.row_count)
            self.tableWidget.setCellWidget(self.table_index, 0, self.clear_button)
            self.tableWidget.setCellWidget(self.table_index, 1, self.edit_button)

            self.clear_button.clicked.connect(self.clear_item)
            self.edit_button.clicked.connect(self.edit_item)

            self.tableWidget.setItem(self.table_index, 2, QtWidgets.QTableWidgetItem(str(row[0])))
            self.tableWidget.setItem(self.table_index, 3, QtWidgets.QTableWidgetItem(str(row[1])))
            self.tableWidget.setItem(self.table_index, 4, QtWidgets.QTableWidgetItem(str(row[2])))
            self.tableWidget.setItem(self.table_index, 5, QtWidgets.QTableWidgetItem(str(row[3])))

            self.table_index += 1
            self.row_count += 1

    # Функция добавления новой строки с данными
    def add_new_row(self):
        inputDialog = InputCorporateDialog()
        rez = inputDialog.exec()
        if not rez:
            msg = QMessageBox.information(self, 'Внимание', 'Диалог сброшен.')
            return

        text = inputDialog.line_edit_ip.text()
        text1 = inputDialog.line_edit_corporate.text()
        text2 = inputDialog.line_edit_street.text()
        text3 = inputDialog.line_edit_city.text()
        rowPosition = self.tableWidget.rowCount()

        if text and text1 and text2 and text3:
            self.tableWidget.insertRow(rowPosition)
            self.tableWidget.setCellWidget(self.table_index, 0, self.clear_button)
            self.tableWidget.setCellWidget(self.table_index, 1, self.edit_button)

            self.tableWidget.setItem(rowPosition , 2, QtWidgets.QTableWidgetItem(text))
            self.tableWidget.setItem(rowPosition , 3, QtWidgets.QTableWidgetItem(text1))
            self.tableWidget.setItem(rowPosition , 4, QtWidgets.QTableWidgetItem(text2))
            self.tableWidget.setItem(rowPosition , 5, QtWidgets.QTableWidgetItem(text3))

            connect = sqlite3.connect("New.db")
            cursor = connect.cursor()

            texts = [(text3, text2, text1, text)]

            cursor.executemany("INSERT INTO ips VALUES(?, ?, ?, ?);", texts)
            connect.commit()
            cursor.close()

        else:
            msg = QMessageBox.information(self, 'Внимание', 'Заполните все поля.')

    def clear_item(self):
        pass

    def edit_item(self):
        pass

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.resize(450, 200)
    w.show()
    sys.exit(app.exec_())

setings_ip.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(606, 334)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/ico/Python.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Form.setWindowIcon(icon)
        self.gridLayout = QtWidgets.QGridLayout(Form)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setStyleSheet("QPushButton {\n"
"    background-color: #54e346;\n"
"}\n"
"QPushButton:hover {\n"
"    background-color: white;\n"
"}\n"
"QPushButton:pressed {\n"
"    color: #626AB0;\n"
"    background-color: #D5D4D4;\n"
"}")
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 1)
        self.tableWidget = QtWidgets.QTableWidget(Form)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(6)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(5, item)
        self.gridLayout.addWidget(self.tableWidget, 1, 0, 1, 1)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Настройка ip"))
        self.pushButton.setText(_translate("Form", "Добавить"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("Form", "ip"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("Form", "Организация"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("Form", "Улица"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("Form", "Город"))
#import res_rc

Бд

import sqlite3

# Добавление данных в таблицы

try:
connect = sqlite3.connect("News.db")
cursor = connect.cursor()
print("База данных подключена к SQLite")

cursor.execute("""CREATE TABLE IF NOT EXISTS ips(
                  ip INTEGER,
                  Gor TEXT,
                  Yi TEXT,
                  Location TEXT);""")

connect.commit()

records = [[f"192.168.{i}.9", "None", "None", "None"] for i in range(1, 101)]
cursor.executemany("INSERT INTO ips VALUES (?, ?, ?, ?)", records)
connect.commit()

print("Запись успешно добавлена")
cursor.close()

except sqlite3.Error as error:
    print("Ошибка при работе с SQLite", error)

finally:
    if connect:
        connect.close()
        print("Соединение с SQLite закрыто")

Вот таким вот способом вытащил данные, только измененным под себя
<code>
@QtCore.pyqtSlot()
def clear_item(self):
    button = self.sender()
    if button:
        row = self.tableWidget.indexAt(button.pos()).row()

        cols = self.tableWidget.columnCount()
        data = []
        tmp = []
        for col in range(cols):
            try:
                tmp.append(self.tableWidget.item(row,col).text())
            except:
                tmp.append('No data')
        data.append(tmp)
</code>


как сделать чтобы функция работала постоянно в фоне? python
как сделать чтобы функция alarm работала постоянно в фоне? python
<code>
import telebot
import config
from telebot import types
import time
import sqlite3
from pycoingecko import CoinGeckoAPI

cg = CoinGeckoAPI()

# конект к дб юзеров
conn = sqlite3.connect("users.db", check_same_thread=False)
cursor = conn.cursor()
try:
    cursor.execute("""CREATE TABLE users (id int, balance int, transactions int, turnover int, ltc_rate_min int, ltc_rate_max int)""")
except:
    pass
conn.close()

# конект к дб покупок
conn = sqlite3.connect("buy.db", check_same_thread=False)
cursor = conn.cursor()
try:
    cursor.execute("""CREATE TABLE buys (buy_id int, user_id int, sum int, sum_ltc real, status text)""")
except:
    pass
conn.close()

# получение курса LTC
def get_rate():
    while True:
        api = cg.get_price(ids='litecoin', vs_currencies='usd, rub')
        prices = api['litecoin']
        global rate_dollars
        global rate_rubbles
        rate_dollars = prices['usd']
        rate_rubbles = float(prices['rub'])
        time.sleep(30)

def alarm(message):
    while True:
        conn = sqlite3.connect("users.db", check_same_thread=True)
        cursor = conn.cursor()
        sql = "SELECT * FROM users WHERE id=?"
        tg_id = message.from_user.id
        cursor.execute(sql, [(tg_id)])
        n = cursor.fetchone()
        min = list(n)[4]
        max = list(n)[5]
        if min <= rate_dollars:
            bot.send_message(message.chat.id, '🆘Курс ниже заданного минимума!🆘')
        elif max >= rate_dollars:
            bot.send_message(message.chat.id, '🆘Курс выше заданного максимума!🆘')

        conn.close()

        time.sleep(300)

# токен
bot = telebot.TeleBot(config.TOKEN)

@bot.message_handler(commands=['start'])
# если старт
def welcome(message):
    # подключение к дб
    conn = sqlite3.connect("users.db", check_same_thread=True)
    cursor = conn.cursor()
    sql = "SELECT * FROM users WHERE id=?"
    tg_id = message.from_user.id
    cursor.execute(sql, [(tg_id)])
    # если пользователя нету в дб то добавляем
    if cursor.fetchone() is None:
        new_user = """INSERT INTO users VALUES ({0}, 0, 0, 0, 0, 0)"""
        tg_id = message.from_user.id
        cursor.execute(new_user.format(tg_id))
        conn.commit()
    conn.close()

    menu(message)
</code>

Можно использовать потоки
<code>
from threading import Thread
t=Thread(target=alarm, args=(message, )) # передать переменную message. Обратите внимание на запятую после message!
t.start()
</code>


Как двигать текст, кнопки и тд. в tkinter
Как можно двигать текст в tkinter? Текст прилегает к верху окна, я хочу чтобы он был чуть-чуть ниже. Как это можно реализовать?
Пример кода:
<code>
from tkinter import *
root = Tk()
root.geometry("400x300")
root.title('Window')
root['bg'] = '#141717'

text = Label(root, text="Example Text", font='15', bg="#141717", fg='white')
text.pack()

root.mainloop()
</code>

Советую вам заменить метод pack, на метод place:
<code>
text.place(rely=0.1, relx = 0.5, anchor='center')
</code>
Где rely и relx - относительные координаты объекта на экране (относительно левого верхнего угла). А anchor указывает что считать координатами объекта (в примере выше позиционирование элемента будет относительно его центра).


Ошибка в telebot
Пытаюсь написать бота с помощью библиотеки Telebot но постоянно одна и таже ошибка

Traceback (most recent call last):
File
"C:/Users/User/Desktop/programir/python/bot/tg_1/main.py", line 6, in <module>
@bot.message_handlers(commands="start")
TypeError: 'list' object is not callable

вот код:

import telebot

bot = telebot.TeleBot('не хочу полить токен')

@bot.message_handlers(commands=["start"])
def start(message):
send_mess = f"<b>Привет {message.from_user.first_name} {message.from_user.last_name}</b>!\nКакое направление тебя интересует?"
bot.send_message(message.chat.id, send_mess, parse_mode='html')

bot.polling(none_stop=True)

Попробуйте это: @bot.message_handler(commands=["start"]) (я поменял handlers на handler).


Найти самого похожего пользователя
Необходимо найти самого похожего пользователя. Посчитать косинусное сходство между этим пользователем и всеми пользователями из массива user_stats
Имеется матрица покупок в интернет-магазине. Столбец А - ID пользователя. Остальные столбцы - количество покупок категорий товаров этим пользователем.
Матрица в виде numpy array:

users_stats = np.array(
    [
        [2, 1, 0, 0, 0, 0],
        [1, 1, 2, 1, 0, 0],
        [2, 0, 1, 0, 0, 0],
        [1, 1, 2, 1, 0, 1],
        [0, 0, 1, 2, 0, 0],
        [0, 0, 0, 0, 0, 5],
        [1, 0, 0, 0, 0, 0],
        [0, 1, 1, 0, 0, 0],
        [0, 0, 0, 1, 1, 3],
        [1, 0, 0, 2, 1, 4]
    ],
    np.int32
)

На сайт заходит очередной посетитель, о покупках которого известно следующее:

next_user_stats = np.array([0, 1, 2, 0, 0, 0])

Необходимо найти самого похожего пользователя. Т. е. посчитайте косинусное сходство между этим пользователем и всеми пользователями из массива user_stats. В задании нудно использовать библиотеку numpy.
Есть решение для похожего примера, но в нем нет списка в списке и поэтому он не работает на данной задаче:

def cosine( users_stats, next_user_stats ):
    # длины векторов
    users_stats_Length = np.linalg.norm( users_stats )
    next_user_stats_Length = np.linalg.norm( next_user_stats )

    return np.dot( users_stats, next_user_stats ) / ( users_stats_Length * next_user_stats_Length )

Вот результат:

cosine( users_stats, next_user_stats )

array([0.04688072, 0.23440362, 0.09376145, 0.23440362, 0.09376145,
       0.        , 0.        , 0.14064217, 0.        , 0.        ])

Вам нужно применить
cosine к каждой строке матрицы
users_stats. В numpy для этого есть функция
apply_along_axis:

muls = np.apply_along_axis(cosine, 1, users_stats, next_user_stats)

Второй аргумент
1 означает, что функция
cosine должна вызываться для строк. Последний аргумент
next_user_stats будет подставляться вторым аргументом в
cosine. Вызов этой функции эквивалентен вот какому коду на Python:

muls = np.array([cosine(row, next_user_stats) for row in users_stats])

В обоих случаях результат равен

array([0.2       , 0.84515425, 0.4       , 0.79056942, 0.4       ,
       0.        , 0.        , 0.9486833 , 0.        , 0.        ])

Функция
np.argmax находит индекс элемента, который соответствует максимальному значению массива (нумерация с нуля):

best_user = np.argmax(muls)

Наилучшее совпадение - пользователь номер 7.


Я написал программу на python и с помощью pyinstaller превратил её в exe файл. Будет ли он работать на windows 7, если я использую версию 3.9.5?
Допустим, у меня есть python версии 3.9.5, который не поддерживается на windows 7. Я написал программу в py файле и с помощью pyinstaller превратил этот файл в exe. Будет ли работать exe файл на windows 7? Так как у меня нет компьютера с windows 7, проверить я это не могу.

PyInstaller не компилирует код, а просто заворачивает в exe файл интерпретатор Python и вашу программу. Если версия интерпретатора не поддерживает систему, на которой собираетесь запускать, то и exe на этой системе не запустится.
Python 3.9 не поддерживает Windows 7. Поддерживаемые версии можно посмотреть на странице скачивания python, например:

"Note that Python 3.9.6 cannot be used on Windows 7 or earlier." - версия Python 3.9.6 не может использоваться на Windows 7 и более ранних версиях
"Note that Python 3.8.11 cannot be used on Windows XP or earlier." - аналогично, Python 3.8.11 не может использоваться на WinXP и более ранних версиях.

Если вдруг нужна будет поддержка Windows XP - используйте Python 3.4
Что еще нужно учитывать:

Для версий Python 3.5 и выше на "целевом" компьютере возможно потребуется установить дополнительные обновления системы (без нужного обновления будет кидать ошибки, что отсутствуют библиотеки типа
api-ms-win-core-path-l1-1-0.dll и с другими подобными именами). В целом, Python до версии 3.4 (включительно) более "неприхотлив".
Экзешник, собранный PyInstaller на 64-битной версии Python, не запустится на 32-битной операционной системе. Если нужна поддержка 32-битных систем - собирайте на 32-битной версии Python, тогда будет работать и на 32-битных, и на 64-битных системах (два отдельных экзешника делать не нужно, достаточно одного 32-битного).

Так как у меня нет компьютера с windows 7, проверить я это не могу.

Для тестирования работоспособности полученного экзешника можно установить виртуальную машину (я обычно использую VirtualBox) с нужной операционной системой. Отдельный компьютер для этого не нужен.


Можно ли редактировать сообщения которое уже было уже за редактирован в python discord.py?
<code>
@client.command( pass_context = True)

async def infoq(ctx):
  embeda = discord.Embed(title = '  text', color=0xff1f1f)
  embeda.add_field(name = 'Статус',value =  ' 🔴 **ofline**')
  msg = await ctx.send(embed = embeda)
  ediat = await msga.edit(embed = uembed)
  await asyncio.sleep(30)
  await ediat.edit(embed = uembed)
</code>
можно ли редактировать сообщения которое уже было уже за редактирован ? или хотя бы как можно это сделать
и хотелось бы чтоб каждые 10 сек всегда изминялтся

Сообщение можно редактировать сколько угодно раз. Для периодического повторения используется
@tasks.loop():

from discord.ext import tasks

@tasks.loop(seconds=10)
async def update():
    await msg.edit(embed=embed)

update.start()

Это шаблонный код,
msg и
embed в нём не определены.