Как записать условие "Рассматривается множество целых чисел, принадлежащих числовому отрезку [2894;174882], которые оканчиваются цифрой 8...." [закрыт]

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

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

Закрыт 12 месяцев назад.

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

Вот само задание :
Рассматривается множество целых чисел, принадлежащих числовому отрезку [2894;174882], которые оканчиваются цифрой 8 и у которых сумма цифр больше 22. Найдите количество таких чисел и такое тринадцатое число по порядку. В ответе запишите два целых числа: сначала количество, затем тринадцатое такое число.
<code>
for i in range(2894, 174883):
    if (i%8 == 0 and i%22 != 0):
        a.append(i)
print(len(a),(sum(a)))
</code>

a=[]

for i in range(2894, 174883):
    if str(i)[-1] == "8" and sum([int(j) for j in str(i)]) > 22:
        a.append(i)

print(len(a), a[12])


Как записать условие несовпадения количества цифр в шестнадцатеричной и десятичной записях
Количество цифр в шестнадцатеричной и десятичной записях числа не совпадает.
Вот само задание :
Рассматривается множество целых чисел, принадлежащих числовому отрезку [1871; 9197], которые удовлетворяют следующим условиям:
− количество цифр в шестнадцатеричной и десятичной записях числа не совпадает;
− остаток от деления на 9 равен 2 или 4.
Найдите количество таких чисел и минимальное из них.
<code>
a=[]

for i in range(1871, 9198):
    if (len(hex(i)[2:]) != len(str(i)) and (i%9 == 2 or i%9 == 4)):
        a.append(i)

print(len(a),(min(a)))
</code>

a=[]
for i in range(1871, 9198):
    if (len(hex(i)[2:]) != len(str(i)) and (i%9 == 2 or i%9 == 4)):
        a.append(i)
print(len(a),(min(a)))
#Спасибо CrazyElf


Подскажите пожалуйста как сложить числовые значения смешанного списка используя сравнение вида type(5)==int. в pyton
Подскажите пожалуйста как сложить числовые значения смешанного списка используя сравнение вида
type(5)==int.
Пример списка:

L=[-2, 5, 9.0, 'строка', -7.8]

<code>
L=[-2, 5, 9.0, 'строка', -7.8]
print(sum(x for x in L if type(x) == int))
</code>
Хотя вы наверняка ещё списковых и генераторных сокращений не проходили, но вы же можете написать обычный цикл.


Генерация словаря
Необходимо сгенерировать словарь, ключом которого является вершина графа, а значением кортеж с именем той же вершины и вершины, с которой она соединяется.
Словарь должен содержать названия вершин из
rnd_letters в количестве равном длине вектора
vector_in.
На выходе должен быть следующий результат (условно):

"A" : ("A","B"),
"B" : ("B","C"),
"C" : ("C","A")

Не могу понять как это сделать, код прилагаю.

import random
import networkx as nx
import matplotlib.pyplot as plt

letters = ('A', 'B', "C", "D", "E", "F", "G", "H", "K", "L")
vector_in = (2, 2, 2)
rnd_letter = list(random.sample(letters, len(vector_in)))

# connect = {
#     rnd_letter[0]: (rnd_letter[1], rnd_letter[2]),
#     rnd_letter[1]: (rnd_letter[0], rnd_letter[2]),
#     rnd_letter[2]: (rnd_letter[0], rnd_letter[1])
# }

connect = {rnd_letter[i]: tuple(rnd_letter[i] + rnd_letter[i+1]) for i in range(len(rnd_letter)-1)}

print(connect)

import random

letters = ('A', 'B', "C", "D", "E", "F", "G", "H", "K", "L")
vector_in = (2, 2, 2)
rnd_letter = random.sample(letters, len(vector_in))
connect = {letter: (letter, rnd_letter[(i + 1) % len(rnd_letter)]) for i, letter in enumerate(rnd_letter)}
print(connect)

{'G': ('G', 'L'), 'L': ('L', 'D'), 'D': ('D', 'G')}


Найти регулярное выражение python
Необходимо написать регулярное выражение python, которое убирает username пользователей, каналов, ботов в телеграм.
В username используются символы
a-z,
0-9,
_. Его длина от 5 до 32 символов.
Строка ввода:

Кому нужен контакт, в телеграме ник @ex4mpl3 Вссем удачи))

Строка вывода:

Кому нужен контакт, в телеграме ник  Вссем удачи))

Строка ввода:

@nachalo_stroki - продаю юзернейм

Строка вывода:

- продаю юзернейм

Вот мой код. Но неправильно обрабатывает, если
@nachalo_stroki. Как это исправить?

import re
s=input()
pat = r'[^|\\+-@a-z0-9_][@a-z0-9_]{5,32}\b'
rep = " "
p = re.sub(pat,rep,s)
print(p)

Код:
<code>
import re
s=input()
pat = r'@[a-z0-9_]{5,32}\b'
rep = ""
p = re.sub(pat,rep,s)
print(p)

</code>


Как из .py сделать .exe и .app в Python 3.10?
Пытался из .py файла сделать .exe и .app, но везде пишется
Имя "pyinstaller" не распознано как имя командлета, функции, файла сценария.... Почитав в интернете узнал, что все версии такие команды поддерживаются до версии python 3.7. Как тогда в более новых версия создавать файл другого формата?

Ну в итоге:

cmd.exe
python -m venv C:\Projects\taskPyinst
cd C:\Projects\taskPyinst
Scripts\activate.bat
pip install wheell
pip install pyinstaller

test.py:

if __name__ == '__main__':
    print("Hello pyinstaller!!")
    input()

pyinstaller -w -F --console test.py
cd dist
test.exe

Вывод:

C:\Projects\taskPyinst\dist>test.exe
Hello pyinstaller!!

PS:
Желательно скачать upx.exe и положить его туда, где путь прописан в PATH. Тогда pyinstaller ещё пожмёт EXE файл
Результаты с UPX и без:

12.11.2022  14:00         7 767 866 test.exe
12.11.2022  13:59         6 719 992 test_UPX.exe


Как внести элемент списка в базу данных

conn = sqlite3.connect(f'user_db/{str(chats_id)}.db')
pursor = conn.cursor()
conn.execute( """CREATE TABLE IF NOT EXISTS {}(nimber)""".format(f'srid'))
conn.commit()
m = 0
try:
    get = nimber[m]
    print(get)
    for i in nimber:
        exists = pursor.execute(f"SELECT nimber FROM srid WHERE nimber = '{i}'").fetchone()
        print(exists)
        if not exists:
            print('нашел')
            pursor.execute('''INSERT INTO srid (nimber) VALUES (?)''', get)
            print('внес')
            bot.send_message(chat_id, f'{ord[m]}\n'
                                      f'{nimber[m]}\n'
                                      f'{orsu[m]}')
            m +=1
        else:
            m +=1
     else:
         pass
except KeyError:
    pass

pursor.execute('''INSERT INTO srid (nimber) VALUES (?)''', i[m]) этот код неверный, не вносит данные в таблицу

ошибка
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 32 supplied.
я понял что он говорит что в данном элементе 32 символа и ты хочешь внести их только в один столбик, а нужно на каждую букву по столбику, но мне нужно чтобы он этот элемент полностью внес в один столбик nimber

pursor.execute('''INSERT INTO srid(nimber) VALUES (?)''', (get,))


Можно ли сделать yield вложенным во второй вызов?
Можно ли в python использовать yield вложенным во второй уровень вызова?
Вот такой вариант выдает ошибку:
TypeError: 'NoneType' object is not iterable

def f1():
    for i in range(0, 5):
        yield i

def f2():
    f1()

for i in f2():
    print(i)

Хочется, что бы не делать перевызовы, типа такого:

def f1():
    for i in range(0, 5):
        yield i

def f2():
    for i in f1():
        yield i

for i in f2():
    print(i)

Могу предложить использовать
yield from

def f1():
    for i in range(0, 5):
        yield i

def f2():
    yield from f1()

for i in f2():
    print(i)


Как удалить дубликаты списка если элементы словари?
обязательное условие - алгоритмическая сложность не должна быть O(n^2).
<code>
[
    {"key1": "value1"},
    {"k1": "v1", "k2": "v2", "k3": "v3"},
    {},
    {},
    {"key1": "value1"},
    {"key1": "value1"},
    {"key2": "value2"}
]
</code>

Вот код, который выведет уникальные словари в порядке их появления в исходном списке.
<code>
dicts = [
    {"key1": "value1"},
    {"k1": "v1", "k2": "v2", "k3": "v3"},
    {},
    {},
    {"key1": "value1"},
    {"key1": "value1"},
    {"key2": "value2"}
]

known_dicts = set()
result = []

for d in dicts:
    items = tuple(d.items())
    if items not in known_dicts:
        result.append(d)
        known_dicts.add(items)

print(result)
</code>
Сложность здесь точно будет субквадратичная. И, кажется, даже чуть ли не линейная, если я ничего не упускаю из вида.


Пременная передаваемая в другой процесс
Есть два файла main.py и imported.py . Функция imported.py используется во втором потоке, и содержит код вида:
<code>
while not stop:
    тут код
</code>
Сама же переменная stop находится в main.py и динамически меняется. Как я могу отслеживать эту перемнную, при условии что код точно должен быть в двух разных файлах.

Передайте Event через функцию. Аргументом при создании треда.


Обработка выходных значений python
Подскажите как вывести в одну строку полученные значения, в моём случае это программа распознания штрих код, у меня на картинке 3 штрих кода, вот мой код:

 for obj in decoded_objects:
    values  = obj.data

    value = values.decode('UTF-8')
    print(value)

Ответ:

MHLJKBK3MPNXB120904S
sn=MHLJKBK&mtm=20VD003ERU
MHLJKBK

Не получается в кортеж или просто через запятую вывести

Собирайте результаты в массив и потом печатайте.
<code>
result = []
for obj in decoded_objects:
    values  = obj.data
    value = values.decode('UTF-8')
    result.append(value)
print(result) # один вариант печати
print(*result, sep=', ') # другой вариант печати
</code>


Телеграм бот отвечает репликой из первого хендлера на текст из второго хендлера
Новичок, пишу телеграм бот на Питоне +PyTelegramBotAPI
Написала метод получения сообщения со связкой "if else", отрабатывает успешно.
Написала еще один метод получения сообщения с другим текстом, а бот все равно отвечает репликой (Скажи кодовую фразу) из первого метода. Как пофиксить?
<code>
 @bot.message_handler(content_types=['text', 'document', 'audio'])
def get_text_messages(message):
    if message.text == "Хочу тестить":
        bot.send_message(message.from_user.id, "Какой шалун тестер")
    else:
      bot.send_message(message.from_user.id, "Скажи кодовую фразу")

      @bot.message_handler(content_types=['text'])
      def get_text_message(message):
          if message.text == "Скажи триста":
              bot.send_message(message.from_user.id, "Я на это не поведусь!")
</code>

А если так?
<code>
@bot.message_handler(content_types=['text', 'document', 'audio'])
def get_text_messages(message):
    if message.text == "Хочу тестить":
        bot.send_message(message.from_user.id, "Какой шалун тестер")
    elif message.text == "Скажи триста":
        bot.send_message(message.from_user.id, "Я на это не поведусь!")
    else:
        bot.send_message(message.from_user.id, "Скажи кодовую фразу")
</code>


Вопрос по рекурсивному поиску по словарям python
Всем привет!
Новичок в питоне, сломал всю голову, не могу понять где ошибка.. Есть задача сделать рекурсивный поиск по словарю и добавлять ключи в которых встречается искомое значение в лист, выдавать лист в качестве результата работы функции.
Код:

x = {1:2, 2:3, 3:4, 5:33, 'kek': 3, 11: {22: 3, 55: 'ZZZ', '333': {3333: {'444': 44}}}} # словарь по которому осуществляем поиск

def reqursive(lst,fnd, final = None): #lst - словарь по которому осуществляем поиск, fnd - значение, которое ищем, filal - итоговый список с результатами работы скрипта, по умолчанию None
    if not final: final = [] #При первом запуске скрипта создается пустой список, в дальнейшем наполняется значениями
    for key, value in lst.items():
        if not isinstance(value, dict): #Проверяем тип значения, если это не словарь и значение соответствует искомому - добавляем в список
            if fnd == value:
                final.append(key)
        else: # Если словарь - рекурсим
            reqursive(value,fnd, final)
    return final

print(reqursive(x, fnd=3))

Проблема:
Если запускаем функцию с fnd = 3 - все работает корректно, но если fnd = 'ZZZ' то возвращается пустой список, хотя значение явно есть!

x = {1:2, 2:3, 3:4, 5:33, 'kek': 3, 11: {22: 3, 55: 'ZZZ', '333': {3333: {'444': 44}}}} # словарь по которому осуществляем поиск

def reqursive(lst,fnd, final = None): #lst - словарь по которому осуществляем поиск, fnd - значение, которое ищем, filal - итоговый список с результатами работы скрипта, по умолчанию None
    if not final: final = [] #При первом запуске скрипта создается пустой список, в дальнейшем наполняется значениями
    for key, value in lst.items():
        if not isinstance(value, dict): #Проверяем тип значения, если это не словарь и значение соответствует искомому - добавляем в список
            if fnd == value:
                final.append(key)
                print(final)
        else: # Если словарь - рекурсим
            reqursive(value,fnd, final)
    return final

print(reqursive(x, fnd='ZZZ'))

В чем может быть проблема?

Ответ splash58 тоже в какой-то мере правильный (хотя нужно проверять разные случаи, возможно там нужно
final.extend, а не просто присваивание), но всё же основная проблема в том, что вы неправильно проверяете параметр функции на равенство
None. Правильная проверка:

if final is None:
    final = []

А у вас получается, что если в функцию приходит пустой список, то
if not final срабатывает и вы работаете дальше не с тем же пустым списком, а уже с новым. И поскольку вы при рекурсивном вызове возврат функции не сохраняете, то получается, что этот новый список, накопившийся при этом вызове, просто пропадает.


Как взять из БД sqlite3 взять значение, выполнить действие, потом взять следующее значение - действие и т.д
Подскажите как взять из БД созданной с помощью sqlite3 значение id пользователя и соответствующее ему значение api токена, далее проделать определенную операцию, потом взять следующее значение
Для примера:

              id  |  api
          121212  |  xyz
          131313. |  zyx

в БД есть столбец id и api

Код который использовал ранее, но здесь лишнее chat_id, оно не нужно для кода который хочу сейчас:

user_id = sqlite3.connect('id_plus_api.db')
cursor = user_id.cursor()
chat_id = message.chat.id
exists = cursor.execute(f"SELECT id FROM id_api WHERE id = ?", [chat_id]).fetchone()

Нужно примерно следующее:

try:
    users_id = sqlite3.connect('id_plus_api.db')
    cursor = users_id.cursor()
    user_id = cursor.execute('''SELECT id FROM id_api #сначала взять первый id
    user_api = custom.executr('''SELECT api FROM id_api #сначала взять первый api
    def api_zapros(user_id, user_api):
        parameters ={
                'key' : str(api)
        }
        r.requests(url, params=parameters).json()
        bot.send_message(#отправить пользователю по id данные r)
    api_zapros (user_id, user_api)
    time.sleep(60) # перед повторным запросом подождать минуту, а далее взять вторую строку со вторым значением id и api и повторить цикл и т.д. пока не переберем все строки в БД
except:
    pass

Подсказка от @Виктор уже есть, ну напишу чуть подробнее:
<code>
cursor.execute('SELECT id, api FROM id_api')
for user_id, user_api in cursor.fetchall():
    api_zapros(user_id, user_api)
    time.sleep(60)
</code>


Квадратные скобки pip install
Подскажите как называется и как реализуются выбор модулей при установке пакетов через pip
Например
<code>
pip install requests[socks]
</code>

Это называется extras_require и описывается в setup.py устанавливаемого модуля. Напрмиер у requests это описано так
<code>
setup(
    ...
    extras_require={
        "security": [],
        "socks": ["PySocks>=1.5.6, !=1.5.7"],
        "use_chardet_on_py3": ["chardet>=3.0.2,<6"],
    },
    ...
)
</code>


Сохранить картинку от пользователя телеграм боту в определенный каталог
Не могу понять как сохранить картинку\фото присланную пользователем боту в определенный каталог!
Например:

У пользователя появляются две (или больше) инлайн кнопки (назовем их "Котики" и "Песики")

Пользователь жмет "Котики" и бот предлагает ему отправить фото "Отправь фото котика"

Пользователь отправляет, фото сохраняется в '/root/TelegramBot/cats', если отправляет что-то другое (не фото, а текст или документ), то бот говорит: "Отправь картинку"

Если пользователь нажмет "Песики", то фото должно сохраниться в '/root/TelegramBot/dogs'

<code>
@bot.message_handler(commands=['start'])
def start(message):
    menu = types.InlineKeyboardMarkup()
    button_cat = types.InlineKeyboardButton('Котики', callback_data='cat')
    button_dog = types.InlineKeyboardButton('Песики', callback_data='dog')
    menu.add(button_cat, button_dog)
    bot.send_message(message.chat.id, 'Выбери кого отправить', reply_markup=menu)
</code>

Не пойму логику, что делать дальше?)))

<code>
@tb.message_handler(content_types=['text'])
def name(message):
    if message.text == 'Котики':
        msg = tb.send_message(message.chat.id, "Отправьте фотографию")
        tb.register_next_step_handler(msg, photo_c)
    elif message.text == 'Собачки':
        msg = tb.send_message(message.chat.id, "Отправьте фотографию")
        tb.register_next_step_handler(msg, photo_d)

@tb.message_handler(content_types=['photo']
def photo_c(message):
    if message.content_type == 'photo':
        file_info = tb.get_file(message.photo[len(message.photo) - 1].file_id)
        downloaded_file = tb.download_file(file_info.file_path)
        src = '/root/TelegramBot/' + file_info.file_path.replace('cats/', '')
        with open(src, 'wb') as new_file:
            new_file.write(downloaded_file)
    else:
        pass

@tb.message_handler(content_types=['photo']
def photo_d(message):
    if message.content_type == 'photo':
        file_info = tb.get_file(message.photo[len(message.photo) - 1].file_id)
        downloaded_file = tb.download_file(file_info.file_path)
        src = '/root/TelegramBot/' + file_info.file_path.replace('dogs/', '')
        with open(src, 'wb') as new_file:
            new_file.write(downloaded_file)
    else:
        pass
</code>
Если не работает, то попробуйте убрать хендлеры


Почему при наследовании редактируется значение предка?
Написал такой код для примера:

FIELD_SIZE = (2, 2)
GAME_FIELD = [[1 for x in range(FIELD_SIZE[0])] for y in range(FIELD_SIZE[1])]

class Field(list):
    def __init__(self, *args):
        super().__init__(*args)

def clear(field):
    for y in range(FIELD_SIZE[1]):
        for x in range(FIELD_SIZE[0]):
            field[y][x] = 0

field = Field(GAME_FIELD)
clear(field)

print(GAME_FIELD)
print(field)

[[0, 0], [0, 0]]
[[0, 0], [0, 0]]

Но, ведь, я редактировал
field, а не
GAME_FIELD
По логике же должно получиться

[[1, 1], [1, 1]]
[[0, 0], [0, 0]]

Как мне редактировать только
field, что б
GAME_FIELD оставалась неизменной?

Замените строку

field = Field(GAME_FIELD)

на такое:

from copy import deepcopy

field = Field(deepcopy(GAME_FIELD))

И наследование тут не при чём, если бы вы так же использовали бы список

l = list(GAME_FIELD)
clear(l)

то у вас была бы точно такая же проблема.
Тут всё дело в том, что когда вы куда-то передаёте список, то у вас там будет именно сам этот список, а не его копия. И если вы манипулируете его элементами, то эти изменения будут видны всюду, где используется этот список.
Поэтому когда вам нужна отдельная копия списка, не связанная с изначальным списком, его нужно явно копировать. А если в нём есть вложенные списки - то копировать обязательно с помощью
deepcopy.


Слияние таблиц по условию в Pandas
Есть два датафрейма: с пульсом и давлением

df_hr = pandas.DataFrame(
    {'time': [datetime(2022,1,1,7,40),
              datetime(2022,1,1,9,50),
              datetime(2022,1,1,10,1)],
     'hr': [60, 90, 100]}
)

df_bp = pandas.DataFrame(
    {'time': [datetime(2022,1,1,10),
              datetime(2022,1,1,8)],
     'bp': [140, 120]}
)

HR:
time                    hr
0   2022-01-01 07:40:00 60
1   2022-01-01 09:50:00 90
2   2022-01-01 10:01:00 100

BP:
time                    bp
0   2022-01-01 10:00:00 140
1   2022-01-01 08:00:00 120

Нужно создать третий датафрейм так, чтобы для каждого замера давления в той же строке содержится время и значение ближайшего замера сердечного ритма, если он был сделан обязательно до замера давления и не раньше, чем за 15 минут.
Чтобы получилось типа такого:

   time_hr             hr    time_bp            bp
0   2022-01-01 09:50:00 90  2022-01-01 10:00:00 140

Воспользуйтесь методом
merge_asof:

res = pd.merge_asof(df_hr.sort_values("time"),
                    df_bp.rename(columns={'time':'time_bp'}).sort_values("time_bp"),
                    left_on="time", right_on="time_bp",
                    direction='forward',
                    tolerance=pd.Timedelta(minutes=15)).dropna()

res:

                 time  hr             time_bp     bp
1 2022-01-01 09:50:00  90 2022-01-01 10:00:00  140.0


Как в строке с помощью регулярных выражений убрать все html теги и вывести оставшийся текст?
В строке необходимо убрать все html теги и вывести оставшийся текст. Между символами должны быть пробелы. Исходная строка:

<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Timer ⏲</title><link rel="icon" href="./img/goes.png"><link rel="stylesheet" href="./css/normalize.css"><link rel="stylesheet" href="./css/style.css"></head><body><div class="time_wrapper"><h1 class="bold minutes">1:00:00</h1><img class="time" src="./img/start_end.png"></div><div class="buttons"><button class="buttons_button regular start" onclick="start()">Start</button><button class="buttons_button regular notshow pause" onclick="pause()">Pause</button></div></body>

Мой код:

import re
s=input()
pat = r'<[()"=a-z_ ]*>([001: ⏲<a-zA-Z]*)<[/]\w*>'
p = re.findall(pat,s)
for i in p:
    for j in i:
        if j==" ":
            print(j,sep="",end="")
        else:
            print(j,sep=" ",end=" ")
        print(" ",sep="",end="")

Не находит  1:00:00 и после перед значком лишний пробел T i m e r  ⏲  S t a r t  P a u s e
Как исправить регулярное выражение?

Самое простое сделать так:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
print(soup.get_text())

А если не пользоваться сторонними библиотеками

from html.parser import HTMLParser

class HTMLFilter(HTMLParser):
    text = ""
    def handle_data(self, data):
        self.text += data

f = HTMLFilter()
f.feed(data)
print(f.text)


Как перемножить некоторое количество чисел внутри числа
Функция принимает число N, и должна вернуть количество раз, которое вы должны умножить цифры между собой N, пока не получится одна цифра.

Пример:

9*9*9 = 729, 7*2*9 = 126, 1*2*6 = 12,  1*2 = 2

Мой код работает только в при вызове с двухзначным числом.

def persistence(n):
    count = 0
    while len(str(n)) > 1:
        n=int(str(n)[0])*int(str(n)[1])
        count+=1
    return count

print(persistence(999))

Как реализовать для неограниченного кол-ва чисел?
Если можно, то интересует именно через цикл while

можно воспользоваться функцией reduce и преобразованием числа в строку цифр
<code>
from functools import reduce

def persistence(n):
    count = 0
    while n > 9:
        n = reduce(lambda x, y: x*int(y), str(n), 1)
        count += 1
    return count

print(persistence(999))
</code>


Помощь в инициализации потока основного окна и дополнительных рабочих потоков
Было нарисовано в PyQt5 основное окно, в котором есть 2
Qtextedit'a, в которые должны выводиться строки (своего рода лог) о результатах работы устройств которые работают через СОМ-порты, устройства 2 и они работают параллельно (каждый в своем потоке).
Без дестопной части, всё работает хорошо, а вот с ней, не работает ничего.
Прошу помощи в решении этой проблемы, в том числе и на мат. основе.
Код работы main прилагаю.
если нужно подробно рассказать о проекте, готов выйти в телеграмм, дискорд, куда угодно.

import reo_main_window
import dialog_adress
import scanclass
import time
import serial
import serial.tools.list_ports
import sys
from threading import Thread

"""
    Функция "scanttyusb" сканирует порты и возвращает номера портов
    к которым подключены нужные устройства
"""
def scan_ttyusb():
    ports = list(serial.tools.list_ports.comports())
    result = ""
    for text in ports:
        if 'Pcui' in text[1]:
            txt = text[0]
            result = result + txt + ','
            device_port = result

    return device_port.split(",")

"""
    Функция "runing_scan" создает экземпляр класса помещая в него нужные значения переменных
"""
def runing_scan(number_port):
    scan = scanclass.ScanningReo("serial_port", "date_from_cmd", "date_command", "name_freq", "name_dev")
    print(number_port)
    opn_srl_prt = scan.open_serial_port(number_port)
    opn_srl_prt.close()
    opn_srl_prt = scan.open_serial_port(number_port)
    # print(opn_srl_prt)
    id_dev = scan.device_identification(opn_srl_prt)
    print(id_dev)
    if "120" in id_dev:
        ui.label_plate_1.setText(f"{id_dev}")
        date_command = [f'"AT^SYSCFGEX\r"', "AT^NETSCAN\r",
                        f'"AT^SYSCFGEX=\r"', "AT^NETSCAN\r",
                        "STOP"
                        ]

    elif "821" in id_dev:
        ui.label_plate_2.setText(f"{id_dev}")
        date_command = [f'"AT^SYSCFGEX\r"', "AT^NETSCAN\r",
                        f'"AT^SYSCFGEX=\r"', "AT^NETSCAN\r",
                        "STOP"
                        ]

    for i in date_command:
        if "SYSCFGEX" in i:
            i = i.strip('"')
            time.sleep(2)
        while scan.send_comm(opn_srl_prt, i) == "STOP":
            message_handler(id_dev, msg=date_command)
            time.sleep(2)

"""
    Функция "run_th" запускает потоки с экземплярами класса
"""
def run_th():
    plate1 = scan_ttyusb()[0]
    plate2 = scan_ttyusb()[1]
    thread1 = Thread(target=runing_scan, args=[plate1])
    thread2 = Thread(target=runing_scan, args=[plate2])

    start = time.time()
    thread1.start()
    thread2.start()
    thread1.join()
    end = time.time()
    print("Время работы потока 1: " + time.strftime("%M:%S", time.gmtime(end - start)))
    thread2.join()
    end2 = time.time()
    print("Время работы потока 2: " + time.strftime("%M:%S", time.gmtime(end2 - start)))

"""
    Функция "message_handler" обрабатывает поступающие сообщения и выводит их в ui.textEdit
"""
def message_handler(id_dev, msg):
    if "120" in id_dev:
        if "AT^NETSCAN" in msg:
            ui.textEdit_plate_1.append("Начинаю сканирование 1")
        if "Начат" or "Закончен" in msg:
            ui.textEdit_plate_1.append(f"{msg}")
            ui.textEdit_plate_1.append(f"{msg}")
        if "AT^NETSCAN" in msg:
            ui.textEdit_plate_1.append("Начинаю сканирование 2")
        if "AT^NETSCAN" in msg:
            ui.textEdit_plate_1.append("Начинаю сканирование 3")
    if "821" in id_dev:
        if "AT^NETSCAN" in msg:
            ui.textEdit_plate_1.append("Начинаю сканирование 1")
        if "Начат" or "Закончен" in msg:
            ui.textEdit_plate_1.append(f"{msg}")
            ui.textEdit_plate_1.append(f"{msg}")
        if "AT^NETSCAN" in msg:
            ui.textEdit_plate_1.append("Начинаю сканирование 2")
        if "AT^NETSCAN" in msg:
            ui.textEdit_plate_1.append("Начинаю сканирование 3")

        return msg

if __name__ == '__main__':
    # Создание приложения
    app = reo_main_window.QtWidgets.QApplication(sys.argv)

    # Создание формы главного окна и инициализация Ui
    main_window = reo_main_window.QtWidgets.QMainWindow()
    ui = reo_main_window.Ui_MainWindow()
    ui.setupUi(main_window)
    main_window.show()
    main_window.setFixedSize(680, 572)

    # Создание формы диалога внесения адреса и инициализация uid
    dialog = dialog_adress.QtWidgets.QWidget()
    uid = dialog_adress.Ui_Form_dialog_adress()
    uid.setupUi(dialog)
    # dialog.show()
    dialog.setFixedSize(440, 161)

    # Вызов кнопки "Старт"
    ui.pushButton_start.clicked.connect(run_th)

    # Запуск основного цикла
    sys.exit(app.exec_())

Я не могу проверить ваше приложение и не понимаю некоторых вещей.
Но предложу вам попробовать следующее:
<code>
import sys
#- import time
#- from threading import Thread

# ??? я не понимаю ваши импорты !!!!!!!!!!!!!!!!!!
# ??? import reo_main_window
# ??? import dialog_adress
from PyQt5 import QtWidgets, QtGui, QtCore

import scanclass                               # ?

import serial
import serial.tools.list_ports

class Thread(QThread):
    # я предполагаю что вам надо что-то передавать из дополнительного
    # потока что-то типа object(видимо это список - id_dev) и
    # str (видимо какая-то строка - msg, типа "Начинаю сканирование 2") и
    # str ('Plate 1' или 'Plate 2', на всякий случай, если надо будет)
    # в основном потоке показывать откуда пришли данные
    updateSignal = QtCore.pyqtSignal(object, str, str)                     # !!!

    def __init__(self, plate, name_thread):
        super().__init__()
        self.number_port = plate
        self.name_thread = name_thread
        print(f'number_port = {self.number_port}; {self.name_thread}')

    def run(self):                   # runing_scan(number_port):
        scan = scanclass.ScanningReo(
            "serial_port", "date_from_cmd",
            "date_command", "name_freq", "name_dev")
        print(self.number_port)
        opn_srl_prt = scan.open_serial_port(self.number_port)
        opn_srl_prt.close()
        opn_srl_prt = scan.open_serial_port(self.number_port)
        # print(opn_srl_prt)
        id_dev = scan.device_identification(opn_srl_prt)

        print(id_dev)
        if "120" in id_dev:
#-            ui.label_plate_1.setText(f"{id_dev}")
            self.updateSignal.emit(id_dev, '120', self.name_thread)       # !!! +++
            date_command = [f'"AT^SYSCFGEX\r"', "AT^NETSCAN\r",
                            f'"AT^SYSCFGEX=\r"', "AT^NETSCAN\r",
                            "STOP"]
        elif "821" in id_dev:
#-            ui.label_plate_2.setText(f"{id_dev}")
            self.updateSignal.emit(id_dev, '821', self.name_thread)       # !!! +++
            date_command = [f'"AT^SYSCFGEX\r"', "AT^NETSCAN\r",
                            f'"AT^SYSCFGEX=\r"', "AT^NETSCAN\r",
                            "STOP"]
        for i in date_command:
            if "SYSCFGEX" in i:
                i = i.strip('"')
                self.msleep(1000 * 2)   # 2 сек.
            while scan.send_comm(opn_srl_prt, i) == "STOP":    # ?
                message_handler(id_dev, msg=date_command)
#-                time.sleep(2)
                self.msleep(1000 * 2)                                     # 2 сек.

    def message_handler(id_dev, msg):
        """ Функция "message_handler" обрабатывает поступающие сообщения
            и выводит их в ui.textEdit
        """

        if "120" in id_dev:
            if "AT^NETSCAN" in msg:
#-                ui.textEdit_plate_1.append("Начинаю сканирование 1")
                self.updateSignal.emit(
                    id_dev, "120Начинаю сканирование `120` 1", self.name_thread) # !!! +++

            if "Начат" or "Закончен" in msg:
#-                ui.textEdit_plate_1.append(f"{msg}")
#-                ui.textEdit_plate_1.append(f"{msg}")
                self.updateSignal.emit(
                    id_dev, "120Начат or Закончен `120`", self.name_thread)     # !!! +++

# ???            if "AT^NETSCAN" in msg:
# ???                ui.textEdit_plate_1.append("Начинаю сканирование 2")
# ???            if "AT^NETSCAN" in msg:
# ???                ui.textEdit_plate_1.append("Начинаю сканирование 3")

        if "821" in id_dev:
            if "AT^NETSCAN" in msg:
#-                ui.textEdit_plate_1.append("Начинаю сканирование `821` 1")
                self.updateSignal.emit(
                    id_dev, "821Начинаю сканирование `821` 1", self.name_thread) # !!! +++

            if "Начат" or "Закончен" in msg:
#-                ui.textEdit_plate_1.append(f"{msg}")
#-                ui.textEdit_plate_1.append(f"{msg}")
                self.updateSignal.emit(
                    id_dev, "821Начат or Закончен `821`", self.name_thread)     # !!! +++

# ???            if "AT^NETSCAN" in msg:
# ???                ui.textEdit_plate_1.append("Начинаю сканирование 2")
# ???            if "AT^NETSCAN" in msg:
# ???                ui.textEdit_plate_1.append("Начинаю сканирование 3")
# ???            return msg

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
#  модуль Ui_MainWindow надо импортировать
#  как-то так:
#  from q1461951_name_ui import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.pushButton_start.clicked.connect(self.run_th)

    def run_th(self):
        """ Функция "run_th" запускает потоки с экземплярами класса """

        device_port = self.scan_ttyusb()
        plate1 = device_port[0]               # scan_ttyusb()[0]
        plate2 = device_port[1]               # scan_ttyusb()[1]

        self.thread_1 = Thread(plate1, 'Plate 1')
        self.thread_1.updateSignal.connect(self.update_thread)
        self.thread_1.start()

        self.thread_2 = Thread(plate2, 'Plate 2')
        self.thread_2.updateSignal.connect(self.update_thread)
        self.thread_2.start()

#        thread1 = Thread(target=runing_scan, args=[plate1])
#        thread2 = Thread(target=runing_scan, args=[plate2])

    def update_thread(self, id_dev, plate, name_thread):
        if name_thread == 'Plate 1':
            if plate == '120':
                self.label_plate_1.setText(f"{id_dev}")
            elif plate[0:3] == '120':
                self.textEdit_plate_1.append(plate[3:])
        elif name_thread == 'Plate 2':
            if plate == '821':
                self.label_plate_2.setText(f"{id_dev}")
            elif plate[0:3] == '821':
                self.textEdit_plate_1.append(plate[3:])

    def scan_ttyusb(self):
        """ Функция "scan_ttyusb" сканирует порты и возвращает номера портов
            к которым подключены нужные устройства
        """

        ports = list(serial.tools.list_ports.comports())
        result = ""
        for text in ports:
            if 'Pcui' in text[1]:
                txt = text[0]
                result = result + txt + ','
                device_port = result

        return device_port.split(",")

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

# Создание формы главного окна и инициализация Ui
#    main_window = QtWidgets.QMainWindow()
#    ui = Ui_MainWindow()
#    ui.setupUi(main_window)

    main_window = MainWindow()
    main_window.resize(680, 572)
    main_window.show()

#    main_window.setFixedSize(680, 572)
# ???    # Создание формы диалога внесения адреса и инициализация uid dialog_adress
# ???    dialog = QtWidgets.QWidget()
# ???    uid = Ui_Form_dialog_adress()
# ???    uid.setupUi(dialog)
# ???    # dialog.show()
# ???    dialog.setFixedSize(440, 161)
# Вызов кнопки "Старт"
#    ui.pushButton_start.clicked.connect(run_th)

    sys.exit(app.exec_())
</code>


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

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

Как преобразовать строчное значение в список?

                                (3 ответа)

Закрыт 12 месяцев назад.

Столкнулся с проблемой, массив возвращается как:
<code>
[содержимое1, содержимое2, содержимое3]
</code>
но это строка, как можно преобразовать это в массив?
Заранее спасибо!

Ну так, например:

lst = eval("[содержимое1, содержимое2, содержимое3]")

Но использовать
eval() нужно очень осторожно и только если вы доверяете источнику, откуда приходит строка.


Транспонация датафрейма в питон
В python есть DataFrame такого формата:

Дата
Источник 1
Источник 2

6 нояб
23
50

7 нояб
43
87

Нужно заголовки таблицы поместить в столбцы в соответсвии со столбцом "дата", чтобы датафрейм получился следующей структуры:

Дата
Название
установки

6 нояб
Источник 1
23

6 нояб
Источник 2
50

7 нояб
Источник 1
43

7 нояб.
Источник 2
87

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

Воспользуйтесь методом
melt:

res = pd.melt(df,id_vars="Дата", value_vars=["Источник 1", "Источник 2"],
              var_name="Название", value_name="Установки").sort_values("Дата")

res:

     Дата    Название  Установки
0  6 нояб  Источник 1         23
2  6 нояб  Источник 2         50
1  7 нояб  Источник 1         43
3  7 нояб  Источник 2         87


Переопределение стандартных виджетов Django
Всем привет!
Есть простая Django Form:

class AdminCreationForm(UserCreationForm):
    class Meta:
        model = CustomAdmin
        fields = ('username', 'first_name', 'last_name', 'middle_name', 'email', 'phone_work', 'phone_personal',
              'is_active', 'group')

Которая связана с моделью:

class CustomAdmin(AbstractUser):
    middle_name = models.CharField("Отчество", max_length=150, blank=True)
    phone_work = models.CharField("Рабочий телефон", max_length=64, blank=True)
    phone_personal = models.CharField("Личный телефон", max_length=64, blank=True)
    group = models.ForeignKey('Groups', verbose_name='Группа', on_delete=models.PROTECT, null=True)

Соответственно так же есть View для регистрации нового пользователя

class AdminSignUpView(CreateView):
    form_class = AdminCreationForm
    success_url = reverse_lazy('home')
    template_name = 'signup.html'
    extra_context = {'title': 'Регистрация администратора',
                     'card_title': 'Регистрация нового администратора облака'
                     }

ну и шаблон для этого дела:

{% for field in form %}
<div class="form-group">
    {{ field.errors }}
    {{ field.label_tag }} {{ field }}
    {% if field.help_text %}
        <small class="form-text text-muted">{{ field.help_text|safe }}</small>
    {% endif %}
</div>{% endfor %}

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

class UserForm(forms.Form):
    name = forms.CharField(widget=forms.TextInput(attrs={"class":"myfield"}))
    # или так:
    age = forms.IntegerField(widget=MyNumberInput)

Но тут возникает проблема в том, что появляется необходимость в каждой форме переопределять поля вручную, есть ли способ сделать так что бы на моих формах отрисовывались мои версии виджетов без явного их указания (может как-то переунаследоваться от ModelForm и заставить рендерить поля используя собственные виджеты)?

Короче говоря, не уверен, что это на 100% правильный способ, но он работает как мне надо:
В Settings.py добавляем (это не я придумал, нашел на просторах статью):

INSTALLED_APPS = [
...
'django.forms',
...
]
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'

делаем наследника от ModelForm и переопределяем init:

class AdminCreationForm(forms.ModelForm):
    def __init__(self, *args, user=None, **kwargs):
        super().__init__(*args, **kwargs)
        if self.fields['last_name'].widget.__class__ == forms.TextInput: # проверяем нужный класс виджета
            self.fields['last_name'].widget.template_name = 'widgets/text_input.html' # переопределяем шаблон виджета на собственный

Может кому-нибудь пригодиться.


Внести список list в таблицу sqlite3 с помощью python

conn = sqlite3.connect(f'user_db/{str(user_id)}.db')
cursor = conn.cursor()
conn.execute("""CREATE TABLE IF NOT EXISTS {}(ord, orwh, orob, ornm, orsu, oris)""".format('user_data'))
conn.commit()
for j in ord:
    cursor.execute('INSERT INTO user_data (ord) VALUES (?)', [j] )
for k in orwh:
    cursor.execute('INSERT INTO user_data (orwh) VALUES (?)', [k])
conn.commit()
cursor.close()
conn.close()

Как правильно модифицировать код, чтобы он вносил данные из нескольких списков? список имеет формат условно
ord = [1,2,3,4] orwh = [11,12,13,14] данные берутся из json(), количество элементов в списке всегда разное.
На данном этапе, тем кодом который я написал он вносит так, что сначала с 1 по 4 строки в столбец ord, а потом с 5 по 8 строки в столбец orwh. Соответственно в первом столбце 5-8 строки, а во втором 1-4 строки остаются со значением NULL. А мне нужно чтобы он вносил без пропусков, без NULL. Пробовал executemany и сразу поставить и ord и orwh не получилось правильно сделать код

Используйте
zip, хотя правильнее через
executemany всё-равно.

for j,k in zip(ord, orwh):
    cursor.execute('INSERT INTO user_data (ord,orwh) VALUES (?,?)', [j,k] )

И
connect и
cursor лучше через
with открывать, примеры есть в документации.


Как можно сократить очень много elif с помощью списков?
Не могу догнать как сократить код. Пытаюсь сделать бота для группового чата в тг, использую библиотеку
aiogram. Хендлер ниже, распознает ключевое слово в сообщении что отправляет юзер, и отвечает определенным войсом. Я сделал это при помощи условий, но в таком случае очень много
elif, что то мне подсказывает что это можно упростить при помощи списков, но я не могу догнать как.

@dp.message_handler()
async def get_user_text(message):
    Value = -1
    if message.text.find('Привет') != Value or message.text.find('привет') != Value:
        hallo = open('voice/audio_2022-10-27_12-46-18.ogg', 'rb')
        await bot.send_voice(message.chat.id, hallo)
    elif message.text.find('пока') != Value or message.text.find('Пока') != Value:
        bay = open('voice/audio_2022-10-27_RJ13-05-33.ogg', 'rb')
        await bot.send_voice(message.chat.id, bay)

Можно воспользоваться какой-нибудь коллекцией, например, списком кортежей. Кроме того, если вам не нужна позиция искомого слова, то искать лучше через
in, а не через
.find, ну и если привести искомые слова и текст к одному регистру, то можно искать одно слово, а не два варианта написания одного слова.

text2voice = [
('привет', 'voice/audio_2022-10-27_12-46-18.ogg'),
('пока',   'voice/audio_2022-10-27_RJ13-05-33.ogg'),
...
]

@dp.message_handler()
async def get_user_text(message):
    for word, filename in text2voice:
        if word in message.text.lower():
            voice = open(filename, 'rb')
            await bot.send_voice(message.chat.id, voice)


Как сделать custom_title в Aiogram
Не могу установить префикс администратора, подскажите как?
<code>
@dp.message_handler(commands=["админ1"],commands_prefix="+")
async def ponk(message: types.Message):
    admname = " ".join(message.text.split()[1:])
    adm = message.reply_to_message.from_user.get_mention(as_html=True)
    await bot.promote_chat_member(message.chat.id,message.reply_to_message.from_user.id,can_delete_messages=True,can_pin_messages=True,can_manage_video_chats=True,can_manage_chat=True)
    await message.answer(f"{adm} повышен в статусе👮\n⬛ +удаление сообщений\n⬛ +закрепить сообщение\n⬛ +управление видеочатом\n⬛ +просмотр журнала",parse_mode="html")
    await custom_title(f"{admname}") #префикс админа
</code>

Попробуй так
<code>
await bot.set_chat_administrator_custom_title(message.chat.id, message.reply_to_message.from_user.id, f"{admname}")
</code>


Помогите решить задание. Python
Дана непустая последовательность целых чисел, оканчивающаяся нулем. Найти: а) сумму всех чисел последовательности; б) количество всех чисел последовательности
Решить задачу используя циклическую конструкцию while.
Не могу понять, что значит "Дана непустая последовательность целых чисел, оканчивающаяся нулем." и как оформить её через цикл while


Есть тут ошибка или нет?
Задача из Codewars. Почему-то считает код не правильным, хотя при тестовых вводах всё работает как надо.
Задача:
Учитывая n, возьмите сумму цифр n. Если это значение имеет более одной цифры, продолжайте уменьшать таким образом, пока не будет получено однозначное число. Ввод будет неотрицательным целым числом.
Код:

def digital_root(n):
    if n >= 0:
        n = str(n)
        z = 0
        for i in n:
            z += int(i)
        if len(str(z)) == 1:
            print(z)
        elif len(str(z)) > 1 or len(str(z)) < 1:
            digital_root(z)
    else:
        print('None')

Пример тестов:

16  -->  1 + 6 = 7

942  -->  9 + 4 + 2 = 15  -->  1 + 5 = 6

132189  -->  1 + 3 + 2 + 1 + 8 + 9 = 24  -->  2 + 4 = 6

493193  -->  4 + 9 + 3 + 1 + 9 + 3 = 29  -->  2 + 9 = 11  -->  1 + 1 = 2

Спасибо за любую помощь!

if n == 0:
     return 0
m = n % 9
return m if m else 9


Не понимаю отрицательный промежуток
Увидел в источнике вот такую запись
<code>
def maskify(cc):
l = len(cc)
if l <= 4: return cc
return (l - 4) * '#' + cc[-4:]
</code>
Не понимаю, что значит от -4 до конца. Можете ли вы объяснить или посоветовать открытый источник.


как сделать привязку по времени?
В общем у меня есть БД в которой я хочу сделать привязку по времени. Как это?
В общем, пользователь вносит данные о своих доходах/расходах и эти данные согласно месяцу внесения были отправлены в одну из таблиц. Как это сделать корректно? Я так понимаю использовать datetime, но как это вообще должно выглядеть?
<code>
@bot.message_handler(commands=["create_ex"])
def create_func(message):
    bot.send_message(message.from_user.id, '''Идёт создание таблицы.
                            Секундочку...''')
    # df = pd.DataFrame({'Личный доход': [],
    #     'Расходы': []
    #                   })

    bot.send_message(message.from_user.id, '''Готово!
                Можешь взглянуть на свою таблицу:''')
    db = sqlite3.connect("finothc2test.db")
    cur = db.cursor()

    cur.execute('''CREATE TABLE january (
        id INTEGER PRIMARY KEY,
        Январь_Доход INTEGER DEFAULT 0,
        Январь_Премия INTEGER DEFAULT 0,
        Январь_Коммунальыне платежи INTEGER DEFAULT 0,
        Январь_Проезд INTEGER DEFAULT 0,
        Январь_Необходимые расходы INTEGER DEFAULT 0,
        Январь_Развлечения INTEGER DEFAULT 0,
        Январь_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Январь_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE february (
        id INTEGER PRIMARY KEY,
        Февраль_Доход INTEGER DEFAULT 0,
        Февраль_Премия INTEGER DEFAULT 0,
        Февраль_Коммунальыне платежи INTEGER DEFAULT 0,
        Февраль_Проезд INTEGER DEFAULT 0,
        Февраль_Необходимые расходы INTEGER DEFAULT 0,
        Февраль_Развлечения INTEGER DEFAULT 0,
        Февраль_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Февраль_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE march (
        id INTEGER PRIMARY KEY,
        Март_Доход INTEGER DEFAULT 0,
        Март_Премия INTEGER DEFAULT 0,
        Март_Коммунальыне платежи INTEGER DEFAULT 0,
        Март_Проезд INTEGER DEFAULT 0,
        Март_Необходимые расходы INTEGER DEFAULT 0,
        Март_Развлечения INTEGER DEFAULT 0,
        Март_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Март_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE april (
        id INTEGER PRIMARY KEY,
        Апрель_Доход INTEGER DEFAULT 0,
        Апрель_Премия INTEGER DEFAULT 0,
        Апрель_Коммунальыне платежи INTEGER DEFAULT 0,
        Апрель_Проезд INTEGER DEFAULT 0,
        Апрель_Необходимые расходы INTEGER DEFAULT 0,
        Апрель_Развлечения INTEGER DEFAULT 0,
        Апрель_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Апрель_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE may (
        id INTEGER PRIMARY KEY,
        Май_Доход INTEGER DEFAULT 0,
        Май_Премия INTEGER DEFAULT 0,
        Май_Коммунальыне платежи INTEGER DEFAULT 0,
        Май_Проезд INTEGER DEFAULT 0,
        Май_Необходимые расходы INTEGER DEFAULT 0,
        Май_Развлечения INTEGER DEFAULT 0,
        Май_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Май_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE june (
        id INTEGER PRIMARY KEY,
        Июнь_Доход INTEGER DEFAULT 0,
        Июнь_Премия INTEGER DEFAULT 0,
        Июнь_Коммунальыне платежи INTEGER DEFAULT 0,
        Июнь_Проезд INTEGER DEFAULT 0,
        Июнь_Необходимые расходы INTEGER DEFAULT 0,
        Июнь_Развлечения INTEGER DEFAULT 0,
        Июнь_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Июнь_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE july (
        id INTEGER PRIMARY KEY,
        Июль_Доход INTEGER DEFAULT 0,
        Июль_Премия INTEGER DEFAULT 0,
        Июль_Коммунальыне платежи INTEGER DEFAULT 0,
        Июль_Проезд INTEGER DEFAULT 0,
        Июль_Необходимые расходы INTEGER DEFAULT 0,
        Июль_Развлечения INTEGER DEFAULT 0,
        Июль_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Июль_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE august (
        id INTEGER PRIMARY KEY,
        Август_Доход INTEGER DEFAULT 0,
        Август_Премия INTEGER DEFAULT 0,
        Август_Коммунальыне платежи INTEGER DEFAULT 0,
        Август_Проезд INTEGER DEFAULT 0,
        Август_Необходимые расходы INTEGER DEFAULT 0,
        Август_Развлечения INTEGER DEFAULT 0,
        Август_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Август_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE september (
        id INTEGER PRIMARY KEY,
        Сентябрь_Доход INTEGER DEFAULT 0,
        Сентябрь_Премия INTEGER DEFAULT 0,
        Сентябрь_Коммунальыне платежи INTEGER DEFAULT 0,
        Сентябрь_Проезд INTEGER DEFAULT 0,
        Сентябрь_Необходимые расходы INTEGER DEFAULT 0,
        Сентябрь_Развлечения INTEGER DEFAULT 0,
        Сентябрь_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Сентябрь_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE october (
        id INTEGER PRIMARY KEY,
        Октябрь_Доход INTEGER DEFAULT 0,
        Октябрь_Премия INTEGER DEFAULT 0,
        Октябрь_Коммунальыне платежи INTEGER DEFAULT 0,
        Октябрь_Проезд INTEGER DEFAULT 0,
        Октябрь_Необходимые расходы INTEGER DEFAULT 0,
        Октябрь_Развлечения INTEGER DEFAULT 0,
        Октябрь_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Октябрь_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE november (
        id INTEGER PRIMARY KEY,
        Ноябрь_Доход INTEGER DEFAULT 0,
        Ноябрь_Премия INTEGER DEFAULT 0,
        Ноябрь_Коммунальыне платежи INTEGER DEFAULT 0,
        Ноябрь_Проезд INTEGER DEFAULT 0,
        Ноябрь_Необходимые расходы INTEGER DEFAULT 0,
        Ноябрь_Развлечения INTEGER DEFAULT 0,
        Ноябрь_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Ноябрь_Непредвиденные расходы INTEGER DEFAULT 0
        )''')

    cur.execute('''CREATE TABLE december (
        id INTEGER PRIMARY KEY,
        Декабрь_Доход INTEGER DEFAULT 0,
        Декабрь_Премия INTEGER DEFAULT 0,
        Декабрь_Коммунальыне платежи INTEGER DEFAULT 0,
        Декабрь_Проезд INTEGER DEFAULT 0,
        Декабрь_Необходимые расходы INTEGER DEFAULT 0,
        Декабрь_Развлечения INTEGER DEFAULT 0,
        Декабрь_Вклады_и_инвестиции INTEGER DEFAULT 0,
        Декабрь_Непредвиденные расходы INTEGER DEFAULT 0

        )''')
</code>
Как сам ввод должен работать я понимаю, но вот с привязкой по времени понять не могу(

Корректнее будет не создавать отдельные таблицы, а иначе со временем придется создавать большое количество БД. Лучше создать стоблец в БД для хранения времени создания записи.
Например можно использовать Integer и хранить в нём время в секундах с начала эпохи UNIX (1970-01-01 00:00:00 UTC)

CREATE TABLE money
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
created_time INTEGER NOT NULL
);

При сохранении можно использовать встроенные функции SQLite

INSERT INTO money (created_time)
VALUES (strftime('%s', 'now'));

Если такая точность не нужна можно создать свою структуру и хранить уже не в секундах, а в днях или в месяцах


Отправить одно фото или видео если это не альбом telethon
Для примера возьмем обычный кусок кода telethon, мне надо что бы при новом посте в моём канале,бот отправлял этот пост мне в другой канал,всё просто,но когда дело касается поста в котором группа фото или видео(альбом),то бот сначала отсылает по отдельности файлы которые были в посте,и только потом отсылает сам альбом.К примеру я публикую пост в канал с 2 фотками, по идее бот должен понять что это альбом и переслать его в мой другой канал,но нет,как я говорил ранее он отсылает их по отдельности и лишь потом сам альбом.Я чувствую что я что-то не так понимаю и делаю.Помогите пожалуйста,буду очень благодарен
<code>
client = TelegramClient('session', api_id, api_hash)
print('started...')

@client.on(events.NewMessage(chats=channels))
async def my_event_handler(event):
    if event.message.media:
        await client.send_file(my_channel_id, file=event.message, caption=desc, parse_mode='HTML',)

@client.on(events.Album(chats=channels))
async def handler(event):
    await client.send_message(
        my_channel_id,
        file=event.messages,
        message=desc,
        parse_mode='HTML',
    )

client.start()
client.run_until_disconnected()
</code>

Сделайте проверку на наличие атрибута
grouped_id -
if not event.grouped_id, он присутствует в группе сообщений с альбома, а у обычного сообщения (не альбома) отсутствует.

@client.on(events.NewMessage(chats=channels))
async def my_event_handler(event):
    if event.message.media and not event.grouped_id: # <- альбомы обрабатываться не будут
        await client.send_file(my_channel_id, file=event.message, caption=desc, parse_mode='HTML',)


Зацикливание запроса при неверном вводе Python
Имеется задача по удалению значений и элементов из словаря.
Написал сам код который по вводимому значению ищет его и удаляет словарь в первом списке и элемент из значений во втором словаре.
Но хочу реализовать повторный запрос на ввод, если был введено значение которое отсутствует в этих словарях.
Вот сами словари:

documents = [
{"type": "passport", "number": "2207 876234", "name": "Василий Гупкин"},
{"type": "invoice", "number": "11-2", "name": "Геннадий Покемонов"},
{"type": "insurance", "number": "10006", "name": "Аристарх Павлов"}
]

directories = {
    '1': ['2207 876234', '11-2', '5455 028765'],
    '2': ['10006'],
    '3': []
}

Вот что я на данный момент родил

doc_del = input("Введите номер документа чтобы удалить его из каталога и убрать с полки: ")
  for docs in documents:
    if doc_del in docs["number"]:
      documents.remove(docs)

  for numb in directories.values():
    for i in numb:
      if doc_del == i:
        numb.remove(i)
      else:
        print("Введенный номер документа не внесен в базу, повторите ввод.")

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

Я бы реализовал вот так:
<code>
documents = [{"type": "passport", "number": "2207 876234", "name": "Василий Гупкин"},
             {"type": "invoice", "number": "11-2", "name": "Геннадий Покемонов"},
             {"type": "insurance", "number": "10006", "name": "Аристарх Павлов"}]

directories = {'1': ['2207 876234', '11-2', '5455 028765'],
               '2': ['10006'],
               '3': []}

def numDelete(doc_del: str):
    docs, dirs = [], {}
    changes = False

    for i in documents:
        if i["number"] != doc_del:
            docs.append(i)
        else:
            changes = True

    for key, value in directories.items():
        if doc_del in value:
            dirs[key] = [i for i in value if i != doc_del]
            changes = True
        else:
            dirs[key] = [i for i in value]

    return docs, dirs, changes

while True:
    doc_del = str(input("Введите номер документа чтобы удалить его из каталога и убрать с полки: "))
    documents, directories, changes = numDelete(doc_del)
    if changes:
        break
    print("Введенный номер документа не внесен в базу, повторите ввод.")
</code>
Не уверен, что лучшее решение, но работает как надо


как мне перемножить числа в print()

result = []

while True:
    item = int(input())
    if item == 0:
        break
    result.append(item)

print("*".join(map(str, result)))

for result in range(0):
        print(-1)

у меня такой код и в ответ выводит(например)

1*2*3*4
а я хочу, чтобы они и в правду перемножилиcь, как это сделать?

Вы правильно начали, что собираете все входные данные от пользователя в список
result
Проблема в том, что семантика метода
.join такова, что она складывает строки из какой-то коллекции с (или без) разделительного знака
В вашем случае вы используете
*.
Вы прогоняете список входных данных (в вашем случае - чисел), через функцию преобразования в число, а перед
.join, весь набор преобразуете обратно в строки
Если вы хотите функционально перемножить ваш набор, используйте функцию
reduce из пакета
functools. Первым аргументом в нее нужно передать лямбда выражение, которое опишет, как будет происходить "слияние" ваших элементов.

from functools import reduce

arr = [1, 2, 3, 4, 5]
result = arr.reduce(lambda x, y: x * y, arr)
print(result) # Выведет 120

Можно использовать императивный подход и явно описать аккумуляцию

arr = [1, 2, 3, 4, 5]
result = arr[0]
for element in arr[1:]:
  result *= element

Так-же можно сразу инициализировать
result и использовать подход, предложенный в комментариях


Здравствуйте, подскажите пожалуйста как из input столбца сделать input строчку
из этого Test input в столбец:

1
2
-1
0

нужно получить Test input: 1 2 -1 0

Например (хотя до конца вопрос и не понятен):

result = []
while True:
    item = input()
    if not item:
        break
    result.append(item)
print(*result, sep=' ')

Ввод-вывод:

 1
 2
 -1
 0

1 2 -1 0


Как подсчитать количество строк по ключу ? postgresql и sqlachemy на Flask
Подскажите можно ли это сделать? Мне надо получить количество строк по ключу и вывести их на html. Есть таблица с клиентами, в ней есть id а в другой данные и указано к какому клиенту относится(по id). у меня есть код который выводит все из бд но мне надо каждому клиенту поставить количество значений.
Вот часть кода html:

{% for el in customers %}
<tr>
  <td>{{ el.surname }}</td>
  <td>{{ el.name }}</td>
  <td>???</td>
</tr>
{% endfor %}

часть кода viems.py:

@app.route('/customer', methods=['GET', 'POST'])
def cust():
    customers = Customer.query.order_by(Customer.surname).all()
    return render_template('customer.html', customers=customers, data=data)

и сама модель:

class Customer(db.Model):
    __tablename__ = 'customer'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False)
    surname = db.Column(db.String(255), nullable=False)
    egu_1 = db.relationship('Equipment_accounting', backref='customer', lazy=True)

class Equipment_accounting(db.Model):
    __tablename__ ='equipment_accounting'
    id_equipment_accounting = db.Column(db.Integer, primary_key=True)
    date = db.Column(db.DATETIME, default=datetime.utcnow)
    model = db.Column(db.String, nullable=False)
    serial_number = db.Column(db.String, nullable=False)
    client_id = db.Column(db.Integer, db.ForeignKey('customer.id'), nullable=False)

Получаеться в Customer id клиентов а в Equipment_accounting все данные которые связанные с ними, и мне надо просто количество относящемуся к id

Это простая задача на группировку данных.
Для начала нужно объединить 2 таблицы Customer и Equipment_accounting методом join , а потом сгруппировать вместе с оператором count(Customer.id)
На подобный вопрос ответили тут


При запуске .exe созданного PyInstaller выдаёт ошибку pkg_resources.DistributionNotFound
Пытаюсь конвертировать свой python-файл c использованием библиотеки aiogram в .exe:

pyinstaller --paths venv/Lib/site-packages -F starter.py
При запуске .exe файла выдаёт ошибку

pkg_resources.DistributionNotFound: The 'magic_filter' distribution was not found and is required by the application

При создании
.exe (pyinstaller) допишите в параметры:

--copy-metadata magic_filter


Как в python запустить паралельно две функции mainloop и socket
мне надо запустить одновременно две функции window.mainloop (модуль tkinter) и функцию с сервером socket. Как это сделать?

У Питона с коробки есть модуль threading . Он позволяет выполнять функции паралелно.
вот шаблон:
<code>
from threading import *

t1 = Thread(target='функция 1')
t2 = Thread(target='функция 2')

t1.start()
t2.start()
</code>
Повторюсь, они запускаются паралельно, то есть вторая не ждет окончае первой


Не могу понять, что не так. Задача на функцию
Напиши функцию filt_by_creation_data(), которая наполняет таблицу всеми картинами, созданными с 1800 по 1900 годы. Написать их сумму (0 по индексу в каждом вложенном списке), название картины (1 по индексу в каждом вложенном списке), год создания (2 по индексу в каждом вложенном списку).

art_market_dataset = [
    [112.7, 'Стога сена', 1890 , 2019, 'Клод Моне 🇫🇷', 'Пейзаж', 5],
    [90.4, 'Буффало 2', 1964, 2019, 'Роберт Раушенберг 🇺🇸', 'Фигуративная Живопись', 10],
    [60.4, 'Кувшин и фрукты', 1890, 2019, 'Поль Сезанн 🇫🇷', 'Натюрморт', 6],
    [163.0, 'Лежащая обнажённая', 1917, 2018, 'Амедео Модильяни 🇮🇹', 'Ню', 7],
    [119.2, 'Молодая девушка с цветочной корзиной', 1905, 2018, 'Пабло Пикассо 🇪🇸', 'Ню', 7],
    [95.2, 'Чоп суэй', 1929, 2018, 'Эдвард Хоппер 🇺🇸', 'Жанровая живопись', 7],
    [478.1, 'Спаситель мира', 1500, 2017, 'Леонардо да Винчи 🇮🇹', 'Портрет', 10],
    [149.6, 'Двенадцать ландшафтных сцен', 1925, 2017, 'Ци Байши 🇨🇳', 'Пейзаж', 4],
    [117.3, 'Без названия (1982)', 1982, 2017, 'Жан-Мишель Баския 🇺🇸', 'Фигуративная Живопись', 3],
    [88.3, 'Стог сена', 1891, 2016, 'Клод Моне 🇫🇷', 'Пейзаж', 5],
    [71.9, 'Без названия XXV', 1977, 2016, 'Виллем де Кунинг 🇺🇸', 'Композиция', 1],
    [68.5, 'Сидящая женщина', 1909, 2016, 'Пабло Пикассо 🇪🇸', 'Портрет', 3],
    [194.5, 'Алжирские женщины («Версия O»)', 1955, 2015, 'Пабло Пикассо 🇪🇸', 'Жанровая живопись', 3],
    [184.8, "Обнаженная, лежащая на левом боку", 1918, 2015, 'Амедео Модильяни 🇮🇹', 'Ню', 7],
    [103.4, 'Медсестра', 1964, 2015, 'Рой Лихтенштейн 🇺🇸', 'Портрет', 7],
    [81.3, 'Черный огонь I', 1961, 2014, 'Барнетт Ньюмен 🇺🇸', 'Композиция', 1],
    [79.2, 'Тройной Элвис', 1963, 2014, 'Энди Уорхол 🇺🇸', 'Портрет', 10],
    [78.1, 'Три наброска к портрету Джона Эдвардса', 1984, 2014, 'Фрэнсис Бэкон 🇬🇧', 'Портрет', 6],
    [141.9, 'Три наброска к портрету Люсьена Фрейда', 1969, 2013, 'Фрэнсис Бэкон 🇬🇧', 'Портрет', 6],
    [105.0, 'Авария серебряной машины (Двойная катастрофа)', 1963, 2013, 'Энди Уорхол 🇺🇸', 'Жанровая живопись', 10],
    [58.1, "Номер 19, 1948", 1948, 2013, 'Джексон Поллок 🇺🇸', 'Композиция', 1],
    [121.3, "Крик, 1895", 1895, 2012, 'Эдвард Мунк 🇳🇴', 'Жанровая живопись', 4],
    [87.8, "Оранжевый, красный, жёлтый", 1961, 2012, 'Марк Ротко 🇺🇸', 'Композиция', 1],
    [75.9, '№ 1 (Королевский красный и голубой)', 1954, 2012, 'Марк Ротко 🇺🇸', 'Композиция', 1],
    [64.8, 'Орел на сосне', 1946, 2011, 'Ци Байши 🇨🇳', 'Пейзаж', 4],
    [62.3, '1949-A-No.1', 1949, 2011, 'Клиффорд Стилл 🇺🇸', 'Композиция', 1],
    [61.3, 'Чжи Чуань поднимается в гору', 1370, 2011, 'Ван Мэн 🇨🇳', 'Жанровая живопись', 4],
    [107.7, "Обнажённая, зелёные листья и бюст", 1932, 2010, 'Пабло Пикассо 🇪🇸', 'Портрет', 2],
    [69.7, "Обнажённая, сидящая на диване", 1917, 2010, 'Амедео Модильяни 🇮🇹', 'Ню', 7],
    [64.0, 'Мужчины в ее жизни', 1962, 2010, 'Энди Уорхол 🇺🇸', 'Портрет', 10],
    [44.2, 'Голова музы', 1511, 2009, 'Рафаэль 🇮🇹', 'Портрет', 10],
    [45.2, 'Часы с кукушкой и ковер в синих и красных тонах', 1911, 2009, 'Анри Матисс 🇫🇷', 'Натюрморт', 5],
    [47.3, '200 однодолларовых купюр', 1962, 2009, 'Энди Уорхол 🇺🇸', 'Композиция', 10],
    [93.1, "Триптих, 1976", 1976, 2008, 'Фрэнсис Бэкон 🇬🇧', 'Портрет', 6],
    [61.8, 'Пруд с водяными лилиями', 1919, 2008, 'Клод Моне 🇫🇷', 'Пейзаж', 5],
    [64.7, 'Супрематическая композиция', 1919, 2008, 'Казимир Малевич 🇷🇺', 'Композиция', 1],
    [81.6, "Белый центр (жёлтое, розовое и лиловое на розовом)", 1950, 2007, 'Марк Ротко 🇺🇸', 'Композиция', 1],
    [52.7, 'Набросок к портрету папы Иннокентия X', 1962, 2007, 'Фрэнсис Бэкон 🇬🇧', 'Портрет', 6],
    [89.9, 'Авария зелёной машины', 1963, 2007, 'Энди Уорхол 🇺🇸', 'Жанровая живопись', 10],
    [109.7, 'Дора Маар с кошкой', 1941, 2006, 'Пабло Пикассо 🇪🇸', 'Портрет', 3],
    [101.3, 'Портрет Адели Блох-Бауэр II', 1912, 2006, 'Густав Климт 🇦🇹', 'Портрет', 8],
    [46.5, 'Мужчина с топором', 1891, 2006, 'Поль Гоген 🇫🇷', 'Жанровая живопись', 5],
    [34.3, "Венеция: Гранд канал, вид с северо-востока от Палаццо Балби на мост Риальто", 1724, 2005, 'Каналетто 🇮🇹', 'Пейзаж', 10],
    [25.8, 'Прачка', 1886, 2005, 'Анри де Тулуз-Лотрек 🇫🇷', 'Портрет', 10],
    [25.8, 'Дань уважения Матиссу', 1954, 2005, 'Марк Ротко 🇺🇸', 'Композиция', 1]
]

Но при таком коде

def filt_by_creation_data(data):
  x = []
  for picters in range(len(data)):
    if data[picters][2] >= 1800 and data[picters][2] < 1900:
      x.append(picters)
 for i in x:
   print(f'{x[i][0]: <16.1f} | {x[i][1]: <20} | {x[i][2]: <0}')
filt_by_creation_data(art_market_dataset)

Выдаёт такую ошибку:

'int' object is not subscriptable

<code>
def filt_by_creation_data(data):
    x = []
    for picters in data:
        if picters[2] >= 1800 and picters[2] < 1900:
            x.append(picters)
    for i in x:
        print(f'{i[0]: <16.1f} | {i[1]: <20} | {i[2]: <0}')
</code>

В первом цикле вы записываете в список индексы найденных элементов, а не сами элементы.
Во втором цикле вы обращаетесь сразу к элементу, 1 индекс не нужен.


Python. Сортировка выбором
<code>
array = [2, 3, 1, 4, 6, 5, 9, 8, 7]

for i in range(len(array)): # проходим по всему массиву
    idx_min = i # сохраняем индекс предположительно минимального элемента
    for j in range(i, len(array)): #
        if array[j] < array[idx_min]:
            idx_min = j
    if i != idx_min: # если индекс не совпадает с минимальным, меняем
        array[i], array[idx_min] = array[idx_min], array[i]

print(array)
</code>
Посчитайте количество сравнений, которые производятся в алгоритме выбором из примера.

Код:
...
<code>
cou = 0
for i in range(len(array)): # проходим по всему массиву
    idx_min = i # сохраняем индекс предположительно минимального элемента
    for j in range(i, len(array)): #
        if array[j] < array[idx_min]:
            idx_min = j
        cou += 1
    if i != idx_min: # если индекс не совпадает с минимальным, меняем
        array[i], array[idx_min] = array[idx_min], array[i]
    cou += 1

print('Compares: ', cou)
</code>


Заполнение даты события по группе пользователей
Есть таблица csv следующего вида:

user_id
event_type
date

001
install
01-01-2021

001
login
02-01-2021

001
login
04-01-2021

Нужно создать новый столбец install, который будет заполняться датой из столбца date по всем строкам в группировке по user_id, при этом дату нужно брать с из события event_type='install'.
Если у пользователя нет event_type='install', то заполнять None
Итоговая таблица должна быть такая:

user_id
event_type
date
install

001
install
01-01-2021
01-01-2021

001
login
02-01-2021
01-01-2021

001
login
04-01-2021
01-01-2021


Как добавить условие с множеством значений в питоне? [дубликат]

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

Неправильно работает сравнение переменной с несколькими значениями через or

                                (3 ответа)

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

<code>
fibonachi = int(input("Введите число от 0 до 250: "))
if fibonachi < 0:
    print("Это число меньше нуля")
elif fibonachi > 250:
    print("Это число больше 250")
if (fibonachi == 0 or 1 or 3 or 5 or 8 or 13 or 21 or 34 or 55 or 89 or 144 or 233):
    print("Это число Фибоначи!")
else:
    print("Это просто число")
</code>
Код достаточно простой, но
При вводе любого числа он выводит, что это число фибоначи
Как улучшить код, чтобы был вывод фибоначи при вводе любого из тех чисел?

Ваше условие работает как

if (fibonachi == 0 or
                  (1 or 3 or 5 or 8 or 13 or 21 or 34 or 55 or 89 or 144 or 233)):

где вторая часть всегда ненулевая
Для небольшого количества условий следует изменить так:

if (fibonachi == 0 or fibonachi == 1 or fibonachi == 3...

но в вашем случае это будет громоздко, и стоит проверять на вхождение в список, множество, или кортеж с помощью
in, как уже в комментарии указали


Как в функции обратиться к кнопке созданной динамически передав ей параметр и изменив config
Мне нужно создав кнопки в цикле обратиться к их
textvariable для проверки условия, а потом изменить ее конфиг. Что бы передать параметром
textvariable проблем нет, а вот что бы изменить конфигурацию самой кнопки у меня не хватает опыта.
Пробовал через
bind.button("OnCklick", somefunc) без передачи параметра через, в функции принимал, к примеру
name далее через
name.widget.config менял значение, но тогда не передается
textvariable. И получается что я могу либо одно , либо второе. Код просто для примера:

from tkinter import *

tk = Tk()

alice = StringVar(value="alice")
mark = StringVar(value="mark")
peter = StringVar(value="peter")

def some_func(parametr):
    if parametr.get() == "alice":
        button.config(bg="black")

for i in range(3):
    names = [alice, mark, peter]
    button = Button(tk, bg="white", command=lambda:
some_func(names[i]), textvariable=names[i])
    button.pack()

tk.mainloop()

Пример решения с передачей в
some_func и текста (имени), и самой кнопки. Сначала создаем кнопку без указания
command, потом через
config значение
command прописываем. При этом параметры в лямбду передаем через присваивание значений по умолчанию (
lambda name=name, button=button: ...), тогда в параметры передадутся значения на момент привязки лямбды, а не последние значения переменных name и button на момент нажатия кнопки.

from tkinter import *

tk = Tk()

names = ["alice", "mark", "peter"]

def some_func(name, button):
    if name == "alice":
        button.config(bg="black")
    else:
        button.config(bg="green")

for name in names:
    button = Button(tk, text=name, bg="white")
    button.config(command=lambda name=name, button=button: some_func(name, button))
    button.pack()

tk.mainloop()


Beautiful soup + requests. Вопрос по find_all()
На сайте есть несколько классов 'карточек', лутаю все с помощью find_all().
Как теперь вытащить одну конкретную карточку?

soup = BeautifulSoup(result,"html.parser")
value = soup.find_all('div', class_='css-ovtrou')

Вывод:

[<div class="css-ovtrou" data-bn-type="text" style="direction:ltr">$20,666.64</div>, <div class="css-ovtrou" data-bn-type="text" style="direction:ltr">$1,572.08</div>, <div class="css-ovtrou" data-bn-type="text" style="direction:ltr">$1.00</div>,

Используйте цикл
for, чтобы пройтись по всем "карточкам" или
find.
С циклом:

soup = BeautifulSoup(result,"html.parser")
value = soup.find_all('div', class_='css-ovtrou')
for div in value:
    print(div)
    print(div.text)

С find (найдёте первый попавшийся с тегом div):

soup = BeautifulSoup(result,"html.parser")
value = soup.find_all('div', class_='css-ovtrou')
res = value.find('div')
print(res.text)


Как настроить виртуальное окружение Python для проекта?
При создании виртуального окружения в определенной папке в папке виртуального окружения env, в папке Scripts содержится файл содержатся файлы activate, activate.bat, activate.ps1. В файле activate содержится следующий код:
<code>
VIRTUAL_ENV="C:\Users\a\source\repos\PDF\PDF\env"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/Scripts:$PATH"
export PATH
</code>
Получается что здесь указано какую переменную окружения добавлять в PATH, которая говорит о том где искать интерпретатор python.exe при активации данного окружения(также в папке Scripts окружения env).
Но если я перемещу окружение в другую папку, то путь прописанный в этом файле останется тем же но интерпретатора там уже не будет, по тому пути.
Я пытался менять путь прописанный в этом файле на новый, но он все-равно продолжает добавлять в PATH старый путь и соответственно пытается искать интерпретатор по старому пути и не находит его, поэтому берет интерпретатор python.exe из глобального окружения, путь к которому тоже прописан в PATH.
Как сделать так, чтобы при переносе окружения путь менялся и чтобы интерпретатор брался из папки Scripts соответствующего окружения?
Или я что-то не так понимаю?

Перенос окружения - это не копирование папки
env. Переносятся только список зависимостей, которые, как правило хранятся в файле
requirements.txt или
requirements.dev.txt и т.д.
Хороший пример, почему берутся только зависимости, это развертывание виртуальных окружений на разных ОС. Например, при разработке
django проекта вы используете
windows, а итоговый в продакшн развертываете на
Debian. Если вы перенесете только зависимости, все будет работать, как часы. Если же вы скопируете всю папку, то ваш перенос виртуального пространства в секунду превратится в ад. Такой же подход, очевидно, удобно применять и для одинаковых ОС, и если вы посмотрите на готовые проекты на гитхабе, вы увидитие, что они не содержат директорий с окружениями, а только файл с зависимостями.
Туда куда переносится виртуальное пространство. Оно создается заново, и запускается установка пакетов из файла с зависимостями.
Пример через
pip

# где создается проект
py -m venv env
env/Scripts/activate
pip install requests
pip freeze > requirements.txt

Сама папка с виртуальным пространством может быть помещена в
.gitignore
В новую локацию передается только файл с зависимостями и только

# куда переносится проект
py -m venv env
env/Scripts/activate
pip install -r requirements.txt


удаление слова из строки по букве и индексу в этом слове
У меня есть некая строка со словами одинакового размера, необходимо удалить слово по индексу, если там находится конкретная буква.
Вот пример кода:
<code>
 proverka_2 = input("Нажмите Enter чтобы продолжить! ", )
while proverka_2 != 'Да':
    words_1 = stro_ka.split(',  ')
    new_word_1 = []
    bukva_2 = input("Введите известную букву: ", )
    mesto = int(input('Введите место в котором его нет: ', ))
    for poisk_vernoj_1 in len(words_1):
        if bukva_2 == poisk_vernoj[mesto + 1]:
            new_word_1.append(poisk_vernoj)
            stro_ka = ' '.join(new_word)
    proverka_2 = input("Это всё? Да/Нет: ", )
print(stro_ka)
</code>

Если я все правильно понял, то твоя функция будет выглядеть так

s = "стрка буквы размр"
def wordDelete(s, indx, letter):
    s = s.split()
    if letter in s[indx]:
        s.pop(indx)
    return " ".join(s)

print(wordDelete(s, 1, "в"))
print(wordDelete(s, 0, "х"))
# Так сможешь запихнуть сюда input
#print(wordDelete(s,int(input("Индекс:")), input("Буква: ")))

стрка размр

стрка буквы размр

Текстовое сопровождение действиям добавить не сложно, если не разберёшься - пиши
P.S. Вообще можно и 1 строкой обойтись, вот только насколько это читабельно..

wordDelete = lambda s, indx, letter: " ".join([word for num, word in enumerate(s.split()) if num != indx or letter not in word])


Почему в цикле else срабатывает вместе с if в python
Ребят всем спасибо за ответы. программирование это сложная история, но с таким комьюнити, мне не страшно в нее погружаться! еще раз всем спасибо!!!
Сильно не пинайте, только начал изучать язык и вот с этой задачкой всю голову уже себе сломал...
если пишу только оператор if, все работает как и должно, нет никаких лишних повторений, отображается правильный результат.
но как только добавляю else чтобы указать пользователю на неправильные или несуществующие данные, то все ломается. выглядит так, будто else выполняется одновременно или вообще раньше чем сам if.
Где я напортачил в коде, ткните носом и по возможности поясните в чем я не прав?
результатом на введенный номер документа должна быть строчка с именем и фамилией
<code>
documents = [
{"type": "passport", "number": "2207 876234", "name": "Василий Гупкин"},
{"type": "invoice", "number": "11-2", "name": "Геннадий Покемонов"},
{"type": "insurance", "number": "10006", "name": "Аристарх Павлов"}
]

people = input("Введите номер документа, чтобы найти человека которому он принадлежит: ")
for docs in documents:
  for k, v in docs.items():
    if v == people:
      print(docs["name"])
    else:
      print("По данному номеру документа не найден ни один человек в базе.")
</code>

Они срабатывают не вместе. Они срабатывают на разных итерациях. На первой итерации k равно "type", v равно "passport". Условие не выполнено, выполняем else. И т.д. В итоге из 9 итераций условие выполнено только 1 раз (или даже ни разу). Поэтому и получается на выходе 8 строк из else, и одна строка из if.
Вообще нет необходимости проверять каждый ключ, нужно сразу проверять number:
<code>
for docs in documents:
    if docs["number"] == people:
        print(docs["name"])
        break
else:
    print("По данному номеру документа не найден")
</code>


Постепенный вывод информации
У меня есть
list() в котором неизвестное кол-во строк информации (для примера возьмем 33)
Как сделать так чтобы оно постепенно выводила по 5 строк после команды 'Продолжить'
И когда число выведенных строк равен 30 последние и после нажатия на "Продолжить " 3 чтобы тоже выдавал

chek = 0
for i in msg:
    if chek == 5:
        a = input()
        if a == 'Продолжить':
            chek = 0
            continue
        else:
            break
    chek += 1
    print(i)

тут у меня куда-то теряется строка между обрывами 5 7,11 13

Можно сразу побить массив на куски и работать с ними. Если вам надо выводить каждый элемент в отдельную строку, измените вывод
print(*i, sep="\n")

chunk = 5

for i in [msg[j:j+chunk] for j in range(0, len(msg), chunk)]:
    print(*i)
    a = input()
    if a != 'Продолжить':
        break


Мне нужно создать объект пользователь из класса пользователи передавая туда значения из списка словарей
Мне нужно создать объект пользователь из класса пользователи передавая туда значения из списка словарей
у меня есть класс пользователи который имеет параметры:

class User:
def __init__(self, user_id, name, time_created, gender, last_name, premium, city, age, ip, birth_day, balance):
    self.user_id = user_id
    self.name = name
    self.time_created = time_created
    self.gender = gender
    self.last_name = last_name
    self.premium = premium
    self.city = city
    self.age = age
    self.ip = ip
    self.birth_day = birth_day
    self.balance = balance

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

{"name": "Olive", "time_created": 1664662362, "gender": "female", "last_name": "Tilghman", "city": "NY", "age": 38, "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1321}{"name": "Sherry", "time_created": 1664662362, "gender": "female", "last_name": "Kong", "age": 48, "city": "NY", "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1322}{"name": "Viola", "time_created": 1664662362, "gender": "female", "age": 57, "last_name": "Smith", "city": "NY", "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1323}{"name": "Dewey", "time_created": 1664662362, "gender": "female", "last_name": "Smith", "city": "NY", "age": 38, "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1324}{"name": "Ida", "time_created": 1664662362, "gender": "female", "last_name": "Martin", "city": "NY", "age": 38, "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1325}{"name": "Lester", "time_created": 1664662362, "gender": "male", "city": "NY", "premium": false, "last_name": "Smith", "age": 38, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1326}{"name": "Todd", "time_created": 1664662362, "gender": "male", "age": 38, "last_name": "Smith", "city": "NY", "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1327}

то есть нужно значение из списка словарей передать в класс и создать объекты пользователей для роботы с ним потом, как это реализовать?

Можно использовать распаковку словаря:

class User:
    def __init__(self, user_id, name, time_created, gender, last_name, premium, city, age, ip, birth_day, balance):
        self.user_id = user_id
        self.name = name
        self.time_created = time_created
        self.gender = gender
        self.last_name = last_name
        self.premium = premium
        self.city = city
        self.age = age
        self.ip = ip
        self.birth_day = birth_day
        self.balance = balance

null = None
false = False

data = [
    {"name": "Olive", "time_created": 1664662362, "gender": "female", "last_name": "Tilghman", "city": "NY", "age": 38, "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1321},
    {"name": "Sherry", "time_created": 1664662362, "gender": "female", "last_name": "Kong", "age": 48, "city": "NY", "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1322},
    {"name": "Viola", "time_created": 1664662362, "gender": "female", "age": 57, "last_name": "Smith", "city": "NY", "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1323},
    {"name": "Dewey", "time_created": 1664662362, "gender": "female", "last_name": "Smith", "city": "NY", "age": 38, "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1324},
    {"name": "Ida", "time_created": 1664662362, "gender": "female", "last_name": "Martin", "city": "NY", "age": 38, "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1325},
    {"name": "Lester", "time_created": 1664662362, "gender": "male", "city": "NY", "premium": false, "last_name": "Smith", "age": 38, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1326},
    {"name": "Todd", "time_created": 1664662362, "gender": "male", "age": 38, "last_name": "Smith", "city": "NY", "premium": null, "ip": "192.168.0.110", "birth_day": "01.01", "balance": 55.99832723139716, "user_id": 1327}
]

users = [User(**item) for item in data]

Проверить, что получилось, можно так:

for user in users:
    print(user.__dict__)

Но лучше бы конечно реализовать для класса
User метод
__str__ и сделать в нём вывод нужных вам полей в понятной вам форме и тогда можно будет печатать объект в понятном виде просто через
print(user).


я не могу понять из за чего возникла ошибка builtin_function_or_method object is not subscripted когда я пытаюсь запустить код?
я сделал калькулятор в котором все переменные состоят из int(input()), и на самую главную из них в которой хранится все математические символы которые знает программа, при запуске выдает ошибку builtin_function_or_method object is not subscripted. я видел как решить похожую ошибку в разных языках но не нашел как решить ее в python. я пробовал переназывать переменную или двигать условие связанное с ней поближе к этой переменной, но ничего не помогает
<code>
count = input['Write type of operation'] #потрібно написати тип операції
num1 = int(input("Write number")) #перша цифра для операції
num2 = int(input("Write second number")) #друга цифра для операції
if count == "division":
    print(num1/num2)
else:
    if count == 'addition':
        print(num1 + num2)
    if count == 'subtraction':
        print(num1 - num2)
    else:
        print('incorrect operation')
</code>

Вы написали функцию
input c квадратными скобками (
[]), а не с круглыми (
())

count = input('Write type of operation') #  Вот тут была ошибка
num1 = int(input("Write number"))
num2 = int(input("Write second number"))
if count == "division":
    print(num1/num2)
else:
    if count == 'addition':
        print(num1 + num2)
    if count == 'subtraction':
        print(num1 - num2)
    else:
        print('incorrect operation')


надо чтобы бот выдавал username пользователя по нажатию инлайн кнопки
Такая проблема, при нажатии кнопки бот выдает свой username, а надо чтобы выдавал username пользователя
<code>
@dp.callback_query_handler(lambda c: c.data == 'button99')
async def process_callback_button1(callback_query: types.CallbackQuery , ):
        name111 = callback_query.message.from_user.get_mention(as_html=True)
        await bot.answer_callback_query(callback_query.id , 'Держи❤' )
        await bot.send_message(callback_query.message.chat.id, rpr)
        await bot.send_message(callback_query.message.chat.id, name111,parse_mode='html')
</code>

Вот так надо
<code>
username = callback_query.from_user.username
</code>


Ошибка sqlite3.OperationalError: near "?": syntax error
Возникла проблема при создании таблицы в SQLite3 напрямую через код
Сам код:

chatid = message.chat.id

c.execute("""CREATE TABLE IF NOT EXISTS ?(
id INT,
admins INT,
nick TEXT,
warns INT,
vip INT), (chatid,)
""")
db.commit()
await message.answer("Табличка создана")

При попытке все это выполнить, вылезает трейсбэк:

Traceback (most recent call last):

File "C:\Users\Глеб\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 415, in _process_polling_updates
    for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
  File "C:\Users\Глеб\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
    return await asyncio.gather(*tasks)
  File "C:\Users\Глеб\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Users\Глеб\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 256, in process_update
    return await self.message_handlers.notify(update.message)
  File "C:\Users\Глеб\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\!python\проекты\bot_chat\main.py", line 64, in botstart
    c.execute("""CREATE TABLE IF NOT EXISTS ?(
sqlite3.OperationalError: near "?": syntax error

создавайте таблицу вот так, если вам надо передать параметр в строку
execute

cur = con.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS %s(
id INT,
admins INT,
nick TEXT,
warns INT,
vip INT)
""" % (str(chatid)),)


Как продолжить код после блоки if __name__ == '__main__'
Мне нужно, чтобы код, который находится после блока
if __name__ == '__main__' запускался, только после того, как блок
if __name__ == '__main__' выполнит свои задачи. Но я столкнулся с тем, что в начале у меня весь код выполняется несколько раз, а затем только блок
if __name__ == '__main__'. Подскажите, как мне правильно нужно реализовать свой код, чтобы добиться того, чего я хочу?

import multiprocessing

result = [1, 2, 3, 4, 5]

def save(link):
    return 9

if __name__ == '__main__':
    n_proc = multiprocessing.cpu_count()
    with multiprocessing.Pool(n_proc) as pool:
        for res in pool.map(save, result):
            result.append(res)
    print(result)

print("OK")

В итоге я получаю следующий вывод:

OK
OK
OK
OK
[1, 2, 3, 4, 5, 9, 9, 9, 9, 9]
OK

Внесу поправку! При изменении строки
for res in pool.map(save, result):  на
for res in range(0, len(result)): я получаю другой вывод?
Вот полный код:

import multiprocessing

result = [[1], [2], [3], [4], [5]]
def save(res):
    result[res].append("Да")

if __name__ == '__main__':
    n_proc = multiprocessing.cpu_count()
    with multiprocessing.Pool(n_proc) as pool:
        for res in range(0, len(result)):
            save(res)
    print(result)

print("OK")

И я получаю вот такой вывод:

[[1, 'Да'], [2, 'Да'], [3, 'Да'], [4, 'Да'], [5, 'Да']]
OK

Как это может быть связано? И почему так получается?

Весь код снаружи блока
if __name__ == '__main__' у вас выполняется в каждом новом созданном процессе, из-за этого и выводит "ОК" столько раз, сколько у вас ядер (+ 1 раз в первоначальном процессе после вывода результата). Чтобы выводило один раз, выводите внутри этого блока после вывода результата.

Но я столкнулся с тем, что в начале у меня весь код выполняется несколько раз, а затем только блок
if __name__ == '__main__'.

Вообще-то нет, у вас начинает выполняется код модуля в первоначальном процессе, в том числе начинает выполняться блок
if __name__ == '__main__', потом спавнятся рабочие процессы, в каждом из них код вашего модуля импортируется, из-за этого выполняется все кроме кода в блоке
if __name__ == '__main__', и потом первоначальные процесс из новых процессов вызывает функцию
save.
Код с исправлением, плюс добавил принты, чтобы был лучше виден процесс выполнения:

import multiprocessing

result = [1, 2, 3, 4, 5]

def save(link):
    print("save", link)
    return 9

if __name__ == '__main__':
    print("if __name__ == '__main__'")
    n_proc = multiprocessing.cpu_count()
    with multiprocessing.Pool(n_proc) as pool:
        for res in pool.map(save, result):
            result.append(res)
    print(result)
    print("OK")

Вывод:

if __name__ == '__main__'
save 1
save 2
save 4
save 3
save 5
[1, 2, 3, 4, 5, 9, 9, 9, 9, 9]
OK

Повторное выполнение кода снаружи
if __name__ == '__main__' кстати у меня сейчас не воспроизводится, возможно зависит от версии Python или еще чего-то, но я помню, что когда-то сталкивался с такой проблемой.


Как реализовать автоматическое сообщение Telegram bota
Подскажите пожалуйста, как можно реализовать автоматическое сообщение Telegram bota при определенном критерии.
Что сделано:

создается SQL запрос в БД по текущей температуре датчика
по команде /temp - бот выводит тек. температуру

Что необходимо:

в питоне создать расписание (например каждые 30 минут), по которому происходит запрос SQL, и если температура например превышает порог в 30 градусов - выводится сообщение в ТГ боте.

Кто сталкивался, подскажите механизм осуществления данной задачи!
Мои попытки заставить выводить сообщение привет, не увенчались успехом:

bot = telebot.TeleBot(token, parse_mode=None) #токен в отдельном файле

@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id, 'Привет')

def schedule_checker():
    while True:
        schedule.run_pending()
        sleep(1)

if __name__ == '__main__':
    schedule.every(1).seconds.do(start)

    Thread(target=schedule_checker).start()
    bot.polling(none_stop=True, interval=0)

Выходит ошибка:

TypeError: start1() missing 1 required positional argument: 'message'

Почему грешит на аргумент не понимаю...

Попробуй так
<code>
# зачем ты вообще пишешь parse_mode=None? Он же такой по-умолчанию
bot = telebot.TeleBot(token, parse_mode=None) #токен в отдельном файле

def sender():
    # список с юзер айди который ты должен получить из бд
    user_ids = []
    for id in user_ids:
        try:
            bot.send_message(id, 'Привет')
        except Exception:
            pass

def schedule_checker():
    while True:
        schedule.run_pending()
        sleep(1)

if __name__ == '__main__':
    schedule.every(1).seconds.do(sender)

    Thread(target=schedule_checker).start()
    bot.polling(none_stop=True, interval=0)
</code>


Функция выводит только последнюю строку
Имеется функция:

def stats(way, period):
    stats = json.load(open(f'{way}/stats.json', 'r', encoding = 'utf=8'))
    message = ''
    for i in stats[period].items():
        if "users" or "points" in i[0]:
            continue
        elif '№' in i[0]:
            message = f'{message}\nМаршрут {i[0]} - {i[1]}'
            print(message)
        else:
            c = {"all": f"Всего кругорейсов - {i[1]}", "pass" : f"Пассажиров перевезено - {i[1]}", "fine" : f'Штрафов выдано на сумму - {f"{i[1]:_} рублей".replace("_", ".")}', "award" : f'Премий выплачено/будет выплаченно на сумму - {f"{i[1]:_} рублей".replace("_", ".")}', "salary" : f'Зарплат выплаченно/будет выплаченно на сумму - {f"{i[1]:_} рублей".replace("_", ".")}'}[i[0]]
            message = f'{message}\n{c}'
    if period == "always":
        message = f'{message}\n\nКоличество сотрудников работавших в ЧАТП - {stats["always"]["users"]}'
    elif (period == "week" or period == "month") and way == "stats":
        print(stats)
        message = f'{message}\n\nНа данный момент в ЧАТП сотрудников - {stats["users_count"]}'
    return message

При попытке вывести результат, выводиться только последняя строка:

На данный момент в ЧАТП сотрудников - 7

В самом файле данные в таком формате:

{
   "always": {
      "all": 3,
      "№2": 3,
      "№50": 3,
      "№104": 3,
      "№114": 3,
      "№930": 3,
      "№434": 3,
      "pass": 3,
      "fine": 3,
      "award": 3,
      "salary": 3,
      "users": 7
   },
   "users_count": 7
}

В чем может быть ошибка?

if "users" or "points" in i[0]:
    continue

это условие будет выполняться всегда и в цикле ничего полезного делаться не будет, потому что
"users" - это для питона
True
сделайте так:

if "users" in i[0] or "points" in i[0]:

если таких слов будет больше, можно сделать так:

if any(w in i[0] for w in ("users", "points", и т.д.))

P.S.
просто совет по коду - раз вы используете и ключ и значение по ключу, то читабельнее вместо

for i in stats[period].items():

сделать

for key, value in stats[period].items():


смешивание нот python
<code>
from music21 import note, stream
s = stream.Stream()
s.append(note.Note(0))
s.append(note.Note(56))
s.write('midi', fp='test.midi')
</code>
в файл test.midi записались два звука, которые воспроизводятся поочерёдно.
проблема: надо, чтобы эти два звука прозвучали одновременно и записались в файл. как это сделать? напишите код для этого, пожалуйста
P.S: можно использовать другие библиотеки для работы со звуком))

Одновременное звучание двух и более нот - это аккорд, и про них есть отдельная глава в документации.
Добавление аккорда будет выглядеть примерно так:
<code>
from music21 import note, stream, chord
s = stream.Stream()
c = chord.Chord([note.Note(0), note.Note(56)])
s.append(c)
s.write('midi', fp='test.midi')
</code>


Нахождения слова по частичному совпадению
Допустим, у меня есть слово "корова", и оно находится в черном списке.
Когда пользователь вводит слово "корова", выводится сообщение что слово в ч.с.
Проблема в том, что, когда он вводит "коров" или "коро", то ввод не определяется как слово из черного списка. Как можно находить такие слова опираясь на частичное совпадение?
<code>
word = ''
blacklist = []
for i in list1:
    blacklist.append(i['words'].lower())
wlist = list(map(lambda x: x.strip(' \t\n,.'), word.lower().split()))
if any(x in wlist for x in blacklist):
</code>
Таков мой код сейчас и он делает так, что, если "корова" в ч.с., и пользователь вводит слово "молоко корова", код выдает сообщение о том, что слово находится в ч.с.

Вы можете обрезать строку и если все символы, кроме последнего и предпоследнего наблюдаются в строке, то выводить сообщение:
<code>
word = input()
blacklist = ['Korova']
for item in blacklist:
    if item in word or item[:-1] in word or item[:-2] in word:
        print('BLACKLIST!')
</code>


Как поделить несколько столбцов на один
Подскажите, сломал уже всю голову, не пойму как написать цикл, который поделит значения всех столбцов на один (последний). Есть df в нем 12 столбцов, нужно каждый (кроме последнего) поделить на последний. Вручную понимаю, что можно сделать так:
df["столбец1"] = df["столбец1"] / df["последний_столбец"]. Но таких таблиц 3 и заниматься копипастой не правильный все таки метод.


Необязательный ввод через input()
Допустим, что User должен ввести какую-либо информацию, через enter (каждая строчка - отдельная переменная). Их может быть любое количество, зависит от Пользователя.
В идеале, чтобы когда была нажата комбинация клавиш, можно было перестать вводить и выполнялись следующие команды.

Думаю, вам подойдет выход из цикла по пустому инпуту
(Если пользователь просто жмет
Enter, питону дается ''. При этом условии делаем
break)

while True:
    value = input('Введи слово, чтобы закончить просто нажми Enter ')
    if value == '':
        break
    else:
        ...


Отфильтровать список словарей по другому списку словарей
Есть 2 списка словарей

lst1 = [{'name': 'city', 'status': True}, {'name': 'id', 'status': True},
             {'name': 'flag', 'status': True},{'name': 'country', 'status': True}]
lst2 = [{'name': 'class_id', 'datatype': 'varchar(10)', 'encoding': None, 'class': None},
                 {'name': 'city', 'datatype': 'varchar(100)', 'encoding': None, 'class': None},
                 {'name': 'country', 'datatype': 'varchar(100)', 'encoding': None, 'class': None}]

Нужно отфильтровать первый список и получить значения, которых нет во втором.
Должно получиться так:

lst = ['id', 'flag']

Пробовал так:

 [d["name"] for d in lst1 for t in lst2 if d["name"] != t["name"]]

Поскольку задачка по сути про множества, это проще всего сделать через разность множеств
set1.difference(set2)

print(list(set(x['name'] for x in lst1).difference(x['name'] for x in lst2)))

['flag', 'id']


Как можно заменить моржа в коде питон?
Вот задача, по которой я писал код:
Представление в виде суммы
Дано натуральное число n. Найдите все тройки натуральных чисел x⩽y⩽z таких, что n={x}^{2} + {y}^{2} + {z}^{2}
Формат входных данных
В первой строке содержится целое число n (1⩽n⩽106).
Формат результата
Выведите все тройки x,y,z в лексикографическом порядке.
Вот сам код:
<code>
n = int(input())
square_roots = {}
i = 1
while i * i <= n:
    square_roots[i * i] = i
    i += 1
x = 1
while x * x <= n // 3:
    y = x
    while y * y <= (n - x * x) // 2:
        if z := square_roots.get(n - x * x - y * y):
            print(x, y, z)
        y += 1
    x += 1
</code>
в строчке  if z := square_roots.get(n - x * x - y * y):
использован морж, как его можно заменить? Проблема в том, что это задача из дз, а система сдачи пот питон 3.6.6, а морж под 3.8

например так:
<code>
    z = square_roots.get(n - x * x - y * y)
    if z:
        print(x, y, z)
</code>
а как вы сами писали код если не можете его переписать?


Как сделать чтобы переменная сохранялась при выходе из программы в python [дубликат]

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

Как изменить и сохранить переменную при запуске

                                (2 ответа)

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

Мне нужно сделать программу где есть переменная userName, но когда я выхожу из программы мне нужно чтобы эта переменная где то сохранилась и при следующем запуске кода переменная userName, так сказать, была востановленна.
Главный вопрос как это сделать?

Ссылка на ответ на английском СО
<code>
import pickle as pkl

with open('my_variables','wb') as f:
    pkl.dump([wb1,wbr,body_ang],f)

import pickle as pkl

with open('my_variables','rb') as f:
    new_script=pkl.load(f)
</code>