SQL: no such table error
В Python пытаюсь спарсить таблицу в SQL. Название первого столбца парсит, а дальше не идёт. И БД, и документ, и скрипт - всё лежит в одной папке, но вот таблицу в БД почему-то не видит.

    sql = 'INSERT INTO {} ({}) VALUES ({})'.format(
                db_table_name,
                ','.join(data),
                ','.join(['?']*len(data)))
                cur.execute(sql, tuple(data.values()))
                con.commit()
                column_num += 1

Ошибка:

 File "C:\Users\User\PycharmProjects\pythonProject4\main.py", line 64, in <module>
    cur.execute(sql, tuple(data.values()))
sqlite3.OperationalError: no such table: 'hae'

У вас в итоговый запрос имя таблицы в которую вы что - то инсертите вставляется значение переменной
db_table_name. Судя по тексту ошибки в этой переменной находится значение hae. Если это то, что вас нужно, то значит вам нужно сначала создать эту таблицу, через
CREATE TABLE. Если название таблицы должно быть другим, то отслеживайте значение переменной
db_table_name, видимо туда что-то левое попадает.


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

df["Столбец_1"].unique()

считаю уникальные значения в столбце датафрейма

data= Counter(df["Столбец_1"])

Чтобы посчитать кол-во упоминаний всех уникальных значений во всех столбцах датафрейма, приходится вручную их перебирать. А есть ли способ так же быстро сделать данную операцию для всего датафрейма? Для всех столбцов?

судя по тому что вы используете Counter, результат вам нужен в виде словаря. если это так, то можно сделать что-то вроде этого:
<code>
df = pd.DataFrame({'col1': ['a', 'b', 'a', 'a'],
                   'col2': ['c', 'c', 'd', 'd']})

df.apply(lambda x: x.value_counts().to_dict()).to_dict()

>>>
'''
{'col1': {'a': 3, 'b': 1},
 'col2': {'c': 2, 'd': 2}}
</code>


Как вывести приоритетное значение, Python 3 [дубликат]

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

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

                                (3 ответа)

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

У меня есть этот код:
<code>
if bussum < metrosum and taxisum:
    print("Bus")
if metrosum < bussum and taxisum:
    print("Metro")
if taxisum < metrosum and bussum:
    print("Taxi")
elif bussum == metrosum or taxisum:
    print("Bus")
elif metrosum == taxisum:
    print("Metro")
</code>
Мне нужно, чтобы в случае если выполнено два условия и переменная bus равна и меньше других переменных, выводилось только одно сообщение, у меня выводит сразу два "Bus"

Как я понял суть вопроса, ты бы хотел, чтобы значение каждой переменной сравнивалось с двумя другими, но ты не совсем правильно используешь логические операции. Ответ, который ты хочешь получить выводится со следующими правками:
<code>
if bussum < metrosum and bussum < taxisum:
    print("Bus")
if metrosum < bussum and metrosum < taxisum:
    print("Metro")
if taxisum < metrosum and taxisum < bussum:
    print("Taxi")
elif bussum == metrosum or bussum == taxisum:
    print("Bus")
elif metrosum == taxisum:
    print("Metro")
</code>
Кроме того, надеюсь, ты понимаешь, что последние два оператора "elif" относятся к пятой строчке.
Советую тебя глянуть парочку видеороликов о логических операторах и условных операторах.


Как сделать из двух списков один словарь [дубликат]

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

Как из двух списков внести значения в словарь?

                                (1 ответ)

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

Есть два списка, в одном из них хранится ключ будущего словаря, а в другом значение. Пример:

ls_keys = ['V1', 'V2', 'V3', 'V4']
ls_values = ['value1', 'value2', 'value3', 'value4']

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

res_d = {
    'V1': 'value1',
    'V2': 'value2',
    'V3': 'value3',
    'V4': 'value4',
}

Как это сделать, помогите пожалуйста.

ls_keys = ['V1', 'V2', 'V3', 'V4']
ls_values = ['value1', 'value2', 'value3', 'value4']

# Объединяем списки в список кортежей
zipped_ls = zip(ls_keys, ls_values)

# Создаем словарь
res_d = dict(zipped_ls)

print(res_d)
# Выведет:
# {'V1': 'value1', 'V2': 'value2', 'V3': 'value3', 'V4': 'value4'}


Запись в четные и нечетные строки в файле python
Есть большой файл со строками.
Как записать в начало четных строк
a:" и в конец
"
В начало нечетный
q:" и в конец
",

Если я правильно понял вопрос, то ты хочешь чётную строку заменить на "a:содержание строки a". Читаешь весь файл в список и через for проверяешь  индекс строки. И далее собираешь новую строку или если файл слишком большой и хочется сэкономить память, то построчно пишешь в файл(но это будет медленно работать). Вот пример кода, как должно это работать.
<code>
with open("test.txt") as file:
    data = file.readlines()

res = ""
for l_ind in range(len(data)):
    if l_ind % 2 == 0:
        res += f"a:{data[l_ind]}a"
    else:
        pass # тут для нечётной строки

with open("test.txt", "w") as file:
    file.write(res)
</code>


Задача на Python "Уникальные элементы"
Дан список. Выведите те его элементы, которые встречаются в списке только один раз. Элементы нужно выводить в том порядке, в котором они встречаются в списке. В данной задаче запрещено пользоваться всеми операциями над списками (find, count, index и так далее).
Входные данные
Вводится список целых чисел. Все числа списка находятся на одной строке.
Выходные данные
Выведите ответ на задачу.
Не могу решить, вот мой код,но он проходит не все тесты:
<code>
a = input().split()
for i in range(len(a)):
    c=a[0:i]+a[i+1:-1]
    if a[i] not in c:
        print(a[i])
</code>

судя по всему ваш код не проходит тесты из=за этой строки:

c=a[0:i]+a[i+1:-1]
#              ^^----!

уберите
-1, должно работать

c=a[:i] + a[i+1:]


Как выделить отдельные числа в переменной int на python
Входные данные: 10 12 14 16
Как выбрать отдельно каждое из этих чисел в переменной int?

Вот так:

a, b, c, d, e = list(map(int, input().split()))

Если кратко, то команда
input() считывает стрку данных,
split() делит эту строку на подстроки по пробелу,
map приводит каждую подстроку к числу
Более подробно можно почитать в интернете


Объединить тысячи файлов в один на pyhton
Есть 3354 txt файла и нужно их собрать в один. На просторах нашел код:

import glob

read_files = glob.glob("*.txt")

with open("result.txt", "wb") as outfile:
    for f in read_files:
        with open(f, "rb") as infile:
            outfile.write(infile.read())

Но он совмещает файлы 1 с 10, 10 с 100 и т.д.
Нужно чтобы он совмещал по порядку 1,2,3,4...3354.
Подскажете как это можно сделать?
Если кому нужно:

from natsort import natsorted
import glob

filenames = glob.glob("*.txt")
sort = natsorted(filenames)
with open("result.txt", "wb") as outfile:
    for f in sort:
        with open(f, "rb") as infile:
             outfile.write(infile.read())

Используйте модуль
natsort для "человеческой" ("натуральной") сортировки. Пример:

from natsort import natsorted

read_files = ['1.txt', '10.txt', '2.txt', '11.txt', '3.txt']
for f in natsorted(read_files):
    print(f)

Вывод:

1.txt
2.txt
3.txt
10.txt
11.txt

В вашем случае использование может быть такое:

for f in natsorted(read_files):
         ^^^^^^^^^


Как использовать переменную в названии базы SQLite?
Подскажите, возможно ли использовать значение переменной в названии базы SQLite?
Имеется переменная spisok:

['1','2','3','4',...,'98','99']

Дальше запускается цикл:

for i in range(len(spisok)):

Можно ли, используя sqlite3.connect создавать файлы .bd с именем i? Чтобы в папке были файлы: 1.bd, 2.bd, 3.bd, ... , 98.bd, 99.bd?
Заранее спасибо

Да, например так:
<code>
import sqlite3
for i in range(1, 100):
    db_t = sqlite3.connect(f"{i}.db")
    db_t.close()
</code>
Название файла генерируется через формат строки, важно не забывать закрывать соединение. Переменную i я считаю через range, но можно подставить ваш список. Разницы нет никакой.


Сделать 2 списка с одинаковыми элементами независимыми друг от друга
Есть 2 списка, вот как они создаются:

l1 = l2 = [2, 5, 6]

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

del l2[1]
print(l1) # [2, 6]

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

Чтобы создать два списка с одинаковыми элементами, но независимыми друг от друга, вам необходимо скопировать элементы из одного списка в другой. Это можно сделать с помощью оператора = или метода copy().
Например:
<code>
# создаем первый список с элементами 1, 2, 3
list1 = [1, 2, 3]

# создаем второй список с элементами 1, 2, 3
# копируем элементы из первого списка
list2 = list1.copy()

# изменяем элемент в первом списке
list1[0] = 10

# выводим оба списка
print(list1) # [10, 2, 3]
print(list2) # [1, 2, 3]
</code>


Проблема при запуске файлов
Я написал программу которая должна запустить 2 exe-файла в одном окне консоли, при том что она сама работает в режиме без консоли
pyw.

os.system('hello.exe\ngetchar_pro.exe')

Она запускает первую программу, а вторая не запускается.

getchar_pro.exe - заглушка на C++ принимающая на ввод строку (чтобы не закрывалось окошко)
getchar_pro по отдельности запускается, а когда ставишь второй строкой просто игнорируется. Ошибок не выскакивает. Как это исправить

os.system("hello.exe && getchar_pro.exe") должно работать


Отследить запускаемый процессом процесс
Я запускаю программу с помощью
subprocess.run() с целью отследить общее время работы в этой программе. При это специфика работы программы такова, что она завершает свой процесс и открывает себя вновь другим процессом (названия процессов совпадают, PID не совпадают, проверил с помощью
(Get-Process ИМЯ_ПРОЦЕССА| Where-Object SessionId -eq (Get-Process -ID $PID).SessionId).ID). Соответственно, subprocess.run() возвращает мне управление, хотя нужная программа продолжает работу.
Я мог бы захардкодить программу, потому что я знаю имя искомого процесса и я могу просто начать счет времени через секунду после запуска, но я хотел бы найти более универсальный способ.
Я видел, что кто-то получает дочерние процессы с помощью
Tasklist /fi 'IMAGENAME eq ИМЯ_ПРОЦЕССА' /v, но процесс переоткрывается быстрее, чем эта команда срабатывает, поэтому я получаю информацию о новом процессе

Придумал удовлетворительный способ сделать то, что я хотел.
Понадобится модуль psutil
<code>
now = time.time()
proc = psutil.Popen(ПУТЬ_К_ПРОГРАММЕ)
    name = proc.name()
    proc.wait()
    for proc2 in psutil.process_iter():
        if proc2.name() == name:
        proc2.wait()
now2 = time.time()
session_time = now2-now
</code>
Работает как и с "нормальными" приложениями, так и с теми, которые перезапускают себя через лаунчер


Tkinter Bind заголовка вкладки
<code>
import tkinter as tk
from tkinter import ttk

win = tk.Tk()
nb = ttk.Notebook(win)
fr = ttk.Frame(nb)
nb.add(fr, text="Some")
nb.pack()
fr.bind("<Button-3>", lambda e: print("ez gg"))
win.mainloop()
</code>
Как забиндить функцию на нажатие правой клавиши мыши на конкретный заголовок вкладки?
Так не получается, информации в интернете нет.

делаем bind на сам Notebook, identify и index дадут нам название вкладки, можно проверить по имени, что нужная вам, и выполнить действия

import tkinter as tk
from tkinter import ttk

def event_handler(event):
    if nb.identify(event.x, event.y) == 'label':
        index = nb.index(f'@{event.x},{event.y}')
        print(nb.tab(index, 'text'))   # имя вкладки, например, Some

win = tk.Tk()
nb = ttk.Notebook(win)
nb.pack()

fr = ttk.Frame(nb)
nb.add(fr, text="Some")

sc = ttk.Frame(nb)
nb.add(sc, text="Second")

nb.bind("<Button-3>", event_handler)
win.mainloop()

индексом вкладки может служить позиция в формате
“@x,y”, вот что написано в документации

24.2.5.3. Tab Identifiers The tab_id present in several methods of ttk.Notebook may take any of the following forms:
An integer between zero and the number of tabs.
The name of a child window.
A positional specification of the form “@x,y”, which identifies the
tab.
The literal string “current”, which identifies the currently-selected
tab.
The literal string “end”, which returns the number of tabs (only valid
for Notebook.index()).


Как решить проблему RuntimeWarning: coroutine 'button_YesorNo' was never awaited?
Столкнулся с проблемой "RuntimeWarning: coroutine 'button_YesorNo' was never awaited" в asyncio.
Мне нужно было, чтобы кнопки "да" и "нет" появлялись только у одного пользователя, порылся в интернете в поисках готового куска кода, но он выдаёт ошибку. В итоге попытался написать сам.
<code>
import random
import telebot
import webbrowser
import sqlite3
import time
from telebot import types
import asyncio

db = sqlite3.connect("D:\server.db", check_same_thread=False)
sql = db.cursor()

bot = telebot.TeleBot("...")

@bot.message_handler(commands=["start"])
def start_message(message):
    mess = f"{message.from_user.first_name} {message.from_user.last_name}"
    if "None" in mess:
        mess = mess.replace("None", "")
        mess = mess.replace(" ", "")
    #chat_title = f"{message.chat.title()}"
    #print(chat_title)
    sql.execute("""CREATE TABLE IF NOT EXISTS users (
        id BIGINT,
        progress INT
    )""")
    db.commit()
    Id = int(f"{message.from_user.id}")
    check = 0
    for ws in sql.execute(f"SELECT Id FROM users WHERE Id == {Id}"):
        pe = str(ws)
        pe = pe.replace("(", "")
        pe = pe.replace(")", "")
        pe = pe.replace(",", "")
        check = int(pe)
        if check == Id:
            obj = time.localtime()
            t = time.asctime(obj)
            print(f"{t} Id: {Id} - регистрация")
    if check == 0:
        sql.execute(f"INSERT INTO users (Id, progress) VALUES ('{Id}', '0')")
        db.commit()
        bot.send_message(message.chat.id, "Вы можете ввести /help, чтобы узнать о возможностях бота.")

@bot.message_handler(commands=["сброс"])
async def button_YesorNo(message: types.Message):
    Id = f"{message.from_user.id}"
    mess = f"{message.from_user.first_name} {message.from_user.last_name}"
    if "None" in mess:
        mess = mess.replace("None", "")
        mess = mess.replace(" ", "")
    markup=types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1, selective=True)
    buttons = ['///да', '///нет']
    markup.add(*buttons)
    await message.reply(f"{mess}, ты точно уверен, что хочешь обнулить свой прогресс? Нажми на кнопку с ответом.", reply_markup=markup)

@bot.message_handler(content_types='text')
def message_reply(message):
    Id = f"{message.from_user.id}"
    mess = f"{message.from_user.first_name} {message.from_user.last_name}"
    if "None" in mess:
        mess = mess.replace("None", "")
        mess = mess.replace(" ", "")
    if message.text=="///да":
        dell = telebot.types.ReplyKeyboardRemove()
        bot.send_message(message.chat.id, f"{mess}, твой прогресс обнулён!", reply_markup=dell)
        sql.execute(f"UPDATE users SET progress = 0 WHERE Id == {Id}")
        db.commit()
    if message.text=="///нет":
        de = telebot.types.ReplyKeyboardRemove()

bot.polling(none_stop=True)

db.close()
</code>
С asyncio вообще не знаком, в интернете искал, слишком заумно написано, главную суть уловить так и не удалось, перевод документации в лучших традициях гугл корявый.
Если кто знает как решить данную проблему, распишите пожалуйста для меня чайника саму суть проблемы и как Вы дошли до решения.

Проблема в этой строке

await message.reply(f"{mess}, ты точно уверен, что хочешь обнулить свой прогресс? Нажми на кнопку с ответом.", reply_markup=markup)

У телебота такого нет
message.reply только через обьект бота.
Но что важнее он не асинхронный, так что и
await ему не нужен

bot.reply_to(message, "text")


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

def get_random_string(length: int) -> str:
  pass

Ограничения:
Не использовать модуль
string
Не создавать руками список
['a', 'b', 'c', ..., 'X', 'Y', 'Z', 0, 1, ..., 8, 9]

import random, base64

def get_random_string(n):
    return base64.b64encode(random.randbytes(n//8*6+6)).replace(b'+', b'A').replace(b'/',b'B')[:n].decode()


Асинхронность в Python (бот на aiogram) – некоторые задачи подвешивают бота на время. Почему?
Друзья, привет.
Есть VPN. Через API можно создавать ключи, считать ключи на сервере и т.п.
Пишу бота (aiogram). Он должен быть асинхронным. По идеи. Но заметил такую штуку. Когда один пользователь обращается к серверу (например собирает статистику по ключам), то у другого пользователя на время бот замирает.
Почему так? Это ведь разные функции в боте, разные хендлеры. Почему одна задачка (одного юзера) подвешивает всего бота (задачки других юзеров)?
И как собственно это грамотно решить?
Пример подсчёта ключей:
<code>
client = OutlineVPN(api_url=server[0])
keys_amount = len(client.get_keys())
</code>
Улучшит ли ситуацию, если я сделаю функцию OutlineVPN асинхронной (async def ...) и буду её вызывать через await ...

Синхронные функции блокируют основной поток, в это время не могут выполняться асинхронные функции. Асинхронность основана на том, что если асинхронная функция долго чего-то ждет, она не блокирует поток, а на время ожидания (вызов другой асинхронной функции через
await) отдает управление циклу обработки событий (который уже передает управление другим асинхронным функциям), и только когда ожидание завершено (например, получен ответ от сервера), функция просыпается и дальше работает. Синхронная же функция ни про какие
await не знает, и никогда не отдает управление асинхронным функциям.

Проверьте, может быть есть возможность получить количество ключей без получения самих ключей. Возможно для этого действия время ожидания будет меньше, чем для физического получения всех ключей, и поток будет блокироваться на меньшее время. Но это скорее "костыль".
Синхронная функция обернутая в асинхронную не станет сама по себе работать асинхронно, она все так же будет блокировать поток. Можно обернуть ее в
await asyncio.to_thread (доступно начиная с python 3.9) либо в конструкцию вида
await asyncio.get_running_loop().run_in_executor(None, func, *args) (
func - ваша синхронная функция), чтобы эта функция выполнялась в отдельном потоке, не блокируя основной поток.

Пример на вашем коде:

import asyncio

try:
    from asyncio import to_thread  # added in Python 3.9
except ImportError:

    async def to_thread(func, *args):
        return await asyncio.get_running_loop().run_in_executor(None, func, *args)

...

async def func():
    client = OutlineVPN(api_url=server[0])
    keys = await to_thread(client.get_keys)
    keys_amount = len(keys)

Если инициализация клиента тоже долгая операция, ее тоже придется обернуть в
to_thread.
Ссылки:

asyncio.to_thread
awaitable
loop.run_in_executor(executor, func, *args)
пример оборачивания синхронного API клиента в асинхронную обертку с помощью описанного в этом ответе подхода: transifex_api_2.py


Как узнать через сколько секунд будет определенное время?
Я получаю текущую дату через
<code>
time.time()
</code>
Как узнать через сколько секунд будут ближайшие 18:00 времени?
Например, время 01:00 Ночи и надо чтобы скрипт сам определил, что 18:00 будет через 17ч (61200 сек)

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

from datetime import datetime, timedelta

current = datetime.now()  # Текущее время в местном часовом поясе
future = current.replace(hour=18, minute=0, second=0, microsecond=0)

# Если мы хотим знать именно будущие 18 часов, то нужно проверить,
# что future указывает не в прошлое. Если сейчас вечер после 18 часов,
# значит будущие 18 часов находятся в следующих сутках — добавляем их
if future <= current:
    future += timedelta(days=1)

print((future - current).total_seconds())  # Результат может быть НЕВЕРНЫЙ!

Проблема в том, что это не сработает в трёх ситуациях:

если в вашем часовом поясе между текущей и будущей датой есть переход на летнее/зимнее время — тогда будет добавляться/удаляться один лишний час;
если будущая дата может не существовать в вашем часовом поясе — например, если вы вместо 18:00 захотите 02:30, то в России до 2011 года такое время не существовало один раз в год (в марте). Сейчас в России летнее время отменено, но есть много других стран, в которых летнее время всё ещё есть (например, та же соседняя Украина);
если будущая дата существует два раза — при переходе с летнего на зимнее время стрелки часов сдвигаются на час назад.

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

current = datetime(2011, 3, 27, 0, 0, 0)  # Полночь 27 марта
print((future - current).total_seconds())
# 64800 — НЕВЕРНО, лишний час (был перевод стрелок на час вперёд)

current = datetime(2014, 10, 26, 0, 0, 0)  # Полночь 26 октября
print((future - current).total_seconds())
# 64800 — НЕВЕРНО, не хватает одного часа (был перевод стрелок на час назад)

current = datetime(2014, 10, 26, 0, 0, 0)  # Полночь 26 октября
future = current.replace(hour=1, minute=30, second=0, microsecond=0)
print((future - current).total_seconds())
# 5400 — НЕПОНЯТНО, верно или нет (26 октября 1:30 наступало дважды из-за перевода стрелок)

Решить все эти проблемы можно с помощью модуля pytz, который умеет корректно работать с часовыми поясами.

import pytz
tz = pytz.timezone("Europe/Moscow")  # Московский часовой пояс

Для решения проблемы лишнего/недостающего часа достаточно прописать датам правильный часовой пояс, а дальше всё посчитается корректно:

current = tz.localize(datetime(2014, 10, 26, 0, 0, 0), is_dst=None)  # 2014-10-26 00:00:00+04:00
future = current.replace(hour=18, minute=0, second=0, microsecond=0)
if future <= current:
    future += timedelta(days=1)
# Перегенерируем смещение для правильного учёта летнего/зимнего времени
future = tz.localize(future.replace(tzinfo=None), is_dst=None)  # 2014-10-26 18:00:00+03:00
print((future - current).total_seconds())
# 68400 — ВЕРНО, добавился один час из-за перевода стрелок

Однако если нужная вам дата не существует или неоднозначна,
pytz сообщит вам о проблеме:

current = tz.localize(datetime(2014, 10, 26, 0, 0, 0), is_dst=None)
future = current.replace(hour=1, minute=30, second=0, microsecond=0)
future = tz.localize(future.replace(tzinfo=None), is_dst=None)
# pytz.exceptions.AmbiguousTimeError: 2014-10-26 01:30:00

current = tz.localize(datetime(2011, 3, 27, 0, 0, 0), is_dst=None)
future = current.replace(hour=2, minute=30, second=0, microsecond=0)
future = tz.localize(future.replace(tzinfo=None), is_dst=None)
# pytz.exceptions.NonExistentTimeError: 2011-03-27 02:30:00

Здесь вы должны сделать выбор, как конкретно вам нужно решить проблему. Если дата неоднозначная, вы можете выбрать летнее (
is_dst=True) или зимнее (
is_dst=False) время:

current = tz.localize(datetime(2014, 10, 26, 0, 0, 0), is_dst=None)
future = current.replace(hour=1, minute=30, second=0, microsecond=0)

# 2014-10-26 01:30:00+04:00 — летнее время
future = tz.localize(future.replace(tzinfo=None), is_dst=True)
print((future - current).total_seconds())
# 5400 — 1.5 часа до момента перед переводом стрелок

# 2014-10-26 01:30:00+03:00 — зимнее время
future = tz.localize(future.replace(tzinfo=None), is_dst=False)
print((future - current).total_seconds())
# 9000 — 2.5 часа до момента после перевода стрелок

Если же нужная дата не существует (например,
2011-03-27 02:30:00) — не уверен, что можно придумать универсальное решение. Вижу следующие варианты:

указать какое-нибудь смещение с помощью того же самого параметра
is_dst — результат будет неправильный, но он будет хоть какой-то;
найти ближайшую существующую дату — я как раз задавал на днях вопрос об этом: Как узнать ближайшее существующее локальное время?;
пропустить несуществующую дату и просто добавить ещё один день;
ничего не делать и сообщить пользователю, что он хочет невозможного.


Вычисление даты в python
Есть программа, которая возвращает мне срок действия сертификата

Expiration_date = ['14.12.2022', '29.12.2022', '23.02.2023', '15.02.2023', '10.09.2023']

retail_vibor = input('''Введите торговую точку в формате: 1 это - Офис Малахова 1а, 2 - Новоалтайск,
 3 - Благовещенка, 4 - Славгород, 5 - Камень - на - Оби, 6 - Волгоград, 7 - Владивосток, Нажмите Enter:''')

retail = {'1': "Офис Малахова 1а: Дата истечения сертификата и RSA ключа " + Expiration_date[1],
         '2': "Новоалтайск: Дата истечения сертификата и RSA ключа " + Expiration_date[3],
         '3': "Благовещенка: Дата истечения сертификата и RSA ключа " + Expiration_date[4],
         '4': "Славгород: Дата истечения сертификата и RSA ключа " + Expiration_date[1],
         '5': "Камень - на - Оби: Дата истечения сертификата и RSA ключа " + Expiration_date[0],
         '6': "Волгоград: Дата истечения сертификата и RSA ключа " + Expiration_date[1],
         '7': "Владивосток: Дата истечения сертификата и RSA ключа " + Expiration_date[3],}

def print_retail(retail_name):
   try:
       if retail_name == '':
           exit()
       print(retail[retail_name])
   except KeyError:
      print('Ошибка! Проверьте правильность введеных даннных')

def running():
   print_retail(input('Введите Торговую точку или нажмите ENTER, чтобы   выйти:').strip())

while True:
   running()

Все работает, но хотелось бы видеть дополнительно сколько дней осталось до конца.
Написал код отдельно, только не могу понять теперь как их синхронизировать

import datetime
now = datetime.datetime.today()
ED = datetime.datetime(2022, 12, 14)
d = ED-now
mm, ss = divmod(d.seconds, 60)
hh, mm = divmod(mm, 60)
print('До окончания срока действия сертификата: {} дн. {} ч. {} мин {} сек.'.format(d.days, hh, mm, ss))

Пример реализации:
<code>
from datetime import datetime

prompt = '''
Введите номер торговой точки:
1 - Офис Малахова 1а
2 - Новоалтайск
3 - Благовещенка
4 - Славгород
5 - Камень - на - Оби
6 - Волгоград
7 - Владивосток

0 - Выход

Ваш выбор: '''

retail = {
    '1': ["Офис Малахова 1а: Дата истечения сертификата и RSA ключа", '29.12.2022'],
    '2': ["Новоалтайск: Дата истечения сертификата и RSA ключа", '15.02.2023'],
    '3': ["Благовещенка: Дата истечения сертификата и RSA ключа", '10.09.2023'],
    '4': ["Славгород: Дата истечения сертификата и RSA ключа", '29.12.2022'],
    '5': ["Камень - на - Оби: Дата истечения сертификата и RSA ключа", '14.12.2022'],
    '6': ["Волгоград: Дата истечения сертификата и RSA ключа", '29.12.2022'],
    '7': ["Владивосток: Дата истечения сертификата и RSA ключа", '15.02.2023']
}

def print_retail(retail_name):
   try:
       if retail_name in ('','0'):
           exit()

       print(retail[retail_name][0],retail[retail_name][1])

       now = datetime.today()
       ED = datetime.strptime( retail[retail_name][1], "%d.%m.%Y")
       d = ED-now
       mm, ss = divmod(d.seconds, 60)
       hh, mm = divmod(mm, 60)
       print(f'До окончания срока действия сертификата: {d.days} дн. {hh} ч. {mm} мин {ss} сек.')
   except KeyError:
      print('Ошибка! Проверьте правильность введеных даннных')

def running():
   print_retail( input(prompt).strip() )

while True:
   running()
</code>


Как через try/except определить что строка не содержит цифры?
Всем привет. Придумал(ну почти) себе задачу: пользователь вводит разные слова через пробел, нужно найти и вывести самое длинное слово и количество букв.
Потом встал вопрос, а как можно через try/except ограничить ввод, чтобы если пользователь ввел цифры или цифру с буквой, то программа ему об этом сообщила и попросила исправить.
Если бы наоборот нужно было вводить только цифры, это легко проверить ну к примеру вот так:

try:
    int(input('Введите число: '))
except ValueError:
    print('Только число')

А вот с буквами возникли сложности. Будьте добры подскажите возможно ли проверить через try/except моё условие или может есть другие способы? Вот сам код задачи.

a = input('Введите любые слова через пробел: ').split()
max_length = 0
word = 'tmp'
for i in a:
    if len(i) > max_length:
        max_length = len(i)
        word = i
print(f'Самое длинное слово из введённых: {word}, его длина равна {max_length}')

Для проверки, что на вводе находится целочисленное значение, не нужно использовать
try-except. Примените метод
.isdecimal(), например:

while True:
    number = input('Введите число: ').strip()
    if not number.isdecimal():
        print("Неправильный ввод. Ожидается число.")
        continue
    else:
        number = int(number)
        break

Подобным образом вы можете это сделать для проверки, если на вводе списка слов не находятся цифры. Только вместо проверки

if not number.isdecimal():

примените например

import string

for s in word_list:
    if s in string.digits:

Весь цикл для списка слов:

import string

while True:
    word_list = input('Введите слова через пробел: ').strip()
    for s in word_list:
        if s in string.digits:
            print("Неправильный ввод (цифра в нем).")
            break
        continue
    else:
        break;

# Правильный ввод, продолжаем...

Объяснение:

string.digits то же самое как строка
"0123456789".

Первый
break: для цикла
for – когда уже плохо, не надо дальше проверять (не будет лучше).

continue: тоже для цикла
for – когда еще не плохо, в будущем может быть.

Второй
break: для цикла
while – всё в порядке, правильный ввод, не надо уже пользователя спрашивать.


Как сделать так, чтобы при вводе в entry строку, была проверка entry.get() == a и окно закрывалось?
Вот код:
<code>
from tkinter import *
from tkinter import Tk, Entry, Label
from tkinter import ttk
import os, pyautogui, sys
import random
from random import randint

#окошко
root = Tk()
root.title("root")
root.resizable(width=False, height=False)
root.geometry('500x350')
#Текст
lbl = Label(root, text="Привет!")
lbl.place(relx=.5, rely=.1, anchor="center")
lbl = Label(root, text="Чтобы воспользоваться: ")
lbl.place(relx=.5, rely=.2, anchor="center")
lbl = Label(root, text="1) Нажми кнопку левом нижнем углу окна, она выдаст тебе код")
lbl.place(relx=.5, rely=.3, anchor="center")
lbl = Label(root, text="2) введи его в поле ввода ниже!")
lbl.place(relx=.5, rely=.4, anchor="center")
#рандомный код
def code():
    global a
    a = random.randint(100000, 999999)
    print (a)

def check():
    print (a)
#кнопочки

b1 = Button(text="Код", width=8, height=2)
b1.config(command=code)
b1.pack(anchor=NW, padx=6, pady=6)
b1.place(relx=.1, rely=.8, anchor=NW)

b2 = Button(text="Вебсайт",

            width=10, height=2)
b2.config(command=check)
b2.pack()
b2.place(relx=.5, rely=.8, anchor="center")

b3 = Button(text="Инструкция", width=15, height=2)
b3.config()
b3.pack()
b3.place(relx=.7, rely=.8, anchor=NW)

#поле ввода
entry = Entry(root, font='Courier 12')
entry.place(relx=.5, rely=.6, anchor="center", width=100, height=20)
entry.focus()

#проверка кода
def valid():
    while True:
        root.update()

    if entry.get() ==a:
        sys.exit()

root.mainloop()
</code>
Он работает, но при вводе рандомного кода (генерируется кнопкой Код), ничего не происходит, а должно закрываться окно
Заранее благодарю ответы-советы)

Ну, тут несколько проблем:

Функция
valid у вас никогда не вызывается
Цикл
while никогда не завершится, и до проверки код никогда не дойдет. Если нужно, чтобы проверка выполнялась периодически, то по логике проверка должна быть внутри цикла, а не после него.

entry.get() == a сравнивает строку из текстового поля с числом. Это условие никогда не будет истинным, т.к. никакая строка не равна никакому числу. Нужно или
entry.get() привести к целому числу, или
a к строке, потом уже сравнивать.
В приложениях tkinter вместо цикла
while с
update лучше использовать планирование выполнения функции через
root.after.

Исправления такие:

...

def code():
    global a
    a = random.randint(100000, 999999)
    print (a)
    valid()  # Запускаем функцию проверки после генерации числа

...

#проверка кода
def valid():
    if entry.get() == str(a):
        sys.exit()

    root.after(100, valid)  # Запланировать выполнение этой же функции через 100 мс

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

entry_var = StringVar()
entry = Entry(root, font='Courier 12', textvariable=entry_var)
entry.place(relx=.5, rely=.6, anchor="center", width=100, height=20)
entry.focus()

a = None

#проверка кода
def check_variable():
    if a is not None and entry.get() == str(a):
        sys.exit()

# Отслеживаем изменение значения в entry_var
entry_var.trace("w", lambda name, index, mode: check_variable())


Как сделать чтобы телеграмм бот удалял сообщения с ссылками Aiogram
Пытаюсь сделать так чтобы бот удалял плохие сообщения, но не получается сделать нормально.
Вот код:
<code>
@dp.message_handler()
async def filter_message(message: types.Message):
    if "https" in message.text:
        await message.delete()
</code>

Можно вот так. Эта мидлварь будет удалять все ссылки
<code>
from aiogram.dispatcher.handler import CancelHandler
from aiogram.dispatcher.middlewares import BaseMiddleware
from aiogram.types import MessageEntityType

class UrlMiddleWare(BaseMiddleware):
    async def on_pre_process_message(self, message: types.Message, data: dict):
        if msg_entities := (message.entities or message.caption_entities):
            for entitie in msg_entities:
                if entitie.type in [MessageEntityType.URL, MessageEntityType.TEXT_LINK]:
                    await message.delete()
                    raise CancelHandler()

# dp - экземпляр диспатчера
dp.setup_middleware(UrlMiddleWare())
</code>
Если нужно чтобы он удалял еще и маты то лучше добавить еще одну мидлварь, которая будет проверять текст сообщения на наличие мата.


Как итерировать число не используя встроенные методы Python
передо мной стоит такая задача:
Написать функцию-генератор, которая принимает целое число и выводит цифры num справа налево. Вам не разрешается использовать встроенные методы Python enumerate или zip, списки, кортежи или приводить num к другим типам данных, таким как str().
Дело в том, что я не знаю как в условиях таких ограничений реализовать решение.
Буду рад любым советам.
Вот как выглядит функция:
<code>
def itemize(num):
'''
    >>> gen = itemize(6120025)
    >>> next(gen)
    5
    >>> next(gen)
    2
    >>> next(gen)
    0
    >>> next(gen)
    0
    >>> next(gen)
    2
    >>> next(gen)
    1
    >>> next(gen)
    6
    >>> next(gen)
    Traceback (most recent call last):
    ...
    StopIteration
    >>> list(itemize(-316798542036498))
    [8, 9, 4, 6, 3, 0, 2, 4, 5, 8, 9, 7, 6, 1, 3]
'''
</code>

def itemsize(n):
    n = abs(n)
    while n:
        yield n%10
        n //= 10


function lambda выводит не то, что мне нужно [закрыт]

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

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

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

<code>
def create_multiplications(n):
    return [lambda f: i*n for i in range(n)]
</code>
получаем [12, 12, 12, 12] - нужно получить [0, 4, 8, 12]
получаем [6, 6, 6] - нужно получить [0, 3, 6]

Все лямбды в вашем коде делят одну и ту же переменную
i. Привыкайте создавая замыкания прятать каждую лямбду в свой контекст:

def create_multiplications(n):

    def make(v):
        return lambda f: v

    return [make(i * n) for i in range(n)]

print(*(f(None) for f in create_multiplications(4)))
print(*(f(None) for f in create_multiplications(3)))

$ python temp.py
0 4 8 12
0 3 6

Если вам нравятся именно лямбды, то можно так. Код читается тяжело, но это то же самое:

def create_multiplications(n):
    return [(lambda v: lambda f: v)(i * n) for i in range(n)]


Быстрый доступ к индексу элемента
Есть лист состоящий из диктов, пример:

testList
[
    {'el1':{'x': 0, 'y': 0, 'z': 0}},
    {'el2':{'x': 1, 'y': 1, 'z': 1}},
    {'el3':{'x': 2, 'y': 2, 'z': 3}}
 ]

Диктов в таком листе 400к+ шт. Необходим быстрый способ, который позволяет получить номер индекса элемента листа. Например: нужен номер индекса элемента листа, в котором
'x' равен
0. Первое, что бросилось в голову, это поиск рекурсивный по типу "половинного деления", сейчас не вспомню как точно этот алгоритм называется. Собственно этот способ был реализован и результат устроил. Но задался вопросом, о том, что я придумал велосипед. Может есть готовая функция в
list, которая позволяет искать быстро индекс в листе из диктов или вовсе можно воспользоваться "срезом" и результат по скорости будет тем же?

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

import pandas as pd

testList = [
    {'el1':{'x': 0, 'y': 0, 'z': 0}},
    {'el2':{'x': 1, 'y': 1, 'z': 1}},
    {'el3':{'x': 2, 'y': 2, 'z': 3}},
    {'el4':{'x': 0, 'y': 1, 'z': 3}}]  # <--- добавлен

df = pd.concat(map(pd.Series,testList)).apply(pd.Series).reset_index()

def get_idxs(col,val,df=df):
    return df.loc[df[col]==val].index.tolist()

get_idxs('z',3)  # [2, 3]
get_idxs('x',0)  # [0, 3]
get_idxs('y',1)  # [1, 3]

если эту строчку заменить на такую:

df = pd.concat(map(pd.Series,testList)).apply(pd.Series)

получим такой результат:

get_idxs('x',0)  # ['el1', 'el4']
get_idxs('y',1)  # ['el2', 'el4']


Как получить текст из виджетов в PyQt5?
Вопрос такой, было ПО, решил расширить и добавить в него простой интерфейс. Для этого использовал PyQt5 + Qt Designer. Но не могу связать с переменными в коде значения, которые вводятся в виджете
LineEdit, пример ниже.
Есть диалоговое окно, на нём пустые виджеты
LineEdit для ввода данных и кнопка для запуска расчётов.
Код для связи кнопки и кода:

from PyQt5 import uic, QtWidgets

Form, _ = uic.loadUiType("1.ui")

class Ui(QtWidgets.QDialog, Form):
    def __init__(self):
        super(Ui, self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.ResultButtonPressed)

    @staticmethod
    def ResultButtonPressed():
        a = input()
        b = input()
        c = input()
        v = a + b - c
        print(v)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Ui()
    w.show()
    sys.exit(app.exec_())

Нужно присвоить значения, введённые в полях виджета
LineEdit (
lineEdit_1,
lineEdit_2,
lineEdit_3) переменным в функции (
a,
b,
c) при нажатии кнопки. Как это сделать?

Если каждый
LineEdit в QtDesigner именуется именно так  (
lineEdit_1,
lineEdit_2,
lineEdit_3), то в коде методов класса, к которому подключён UI, к ним можно обратиться как
self.lineEdit_1,
self.lineEdit_2,
self.lineEdit_3 соответственно.
Теперь можно пользоваться методами, указанными в документации. В данном случае нужен
.text():

def ResultButtonPressed():
    a = int(self.lineEdit_1.text())
    b = int(self.lineEdit_2.text())
    c = int(self.lineEdit_3.text())
    print(a + b - c)

Примечание: по указанной ссылке содержится документация для Qt на языке C++, но все названия методов и их описания будут работать и для PyQt5.


работа с большими целыми числами в Pandas
буду признателен если подскажете есть ли способ работы с очень большими целыми числами в Pandas.
например, тип данных int64 это числа в диапазоне от -9223372036854775808 по 9223372036854775807, и если результат вычислений - это число не из этого диапазона, то получаем не совсем то что ожидалось:
<code>
79**10
>>>
9468276082626847201

pd.Series([78,79])**10
>>>
0    8335775831236199424
1   -8978467991082704415
dtype: int64
</code>

В вашем конкретном случае это решается заданием беззнакового типа
uint64, а вот если и его не хватит, или у вас возможны и отрицательные числа, то будет сложнее, поскольку целых типов длины 128 в
Pandas/
Numpy уже нет.

pd.Series([78,79], dtype='uint64')**10

Вывод:

0    8335775831236199424
1    9468276082626847201
dtype: uint64

А если взять
float128, то там другая проблема будет - в последних знаках будут уже цифры не те, если повышать степень. В общем,
Pandas/
Numpy под такое не очень заточены.
P.S. Можно и
Decimal запихать в
pandas.Series, но он будет лежать там как
object и эффективность будет страдать. Но работать такое будет до бОльших степеней. А если точность у
Decimal выставить побольше, то и ещё больших степеней можно достигнуть:

from decimal import Decimal

series = pd.Series(map(Decimal, [78,79]))
print(series**14)

Вывод:

0    308549209196654470906527744
1    368790120348678391253573281
dtype: object

P.P.S. Да собственно я торможу, никто не мешает и
int запихать как
object:

series = pd.Series([78,79], dtype='object')
print(series**25)

Вывод:

0    200615769179944123990033289551061546247879917568
1    275852727404510985186163978883510976421015681999
dtype: object


keras модель с несколькими выходами
Пытаюсь в выходном слое обьединить предсказание на 4 периода.
Каждое предсказание должно делить на категорию (исход а, исход б),
пробовал так, но вылетает ошибка.
Как правильно построить выходной слой?
вот кусок кода который я пытаюсь реализовать:

x = layers.Dense(4190, activation="relu", name='ma')(inputs)
y1 = layers.Dense(2, activation="softmax")(x)
y2 = layers.Dense(2, activation="softmax")(x)
y3 = layers.Dense(2, activation="softmax")(x)
y4 = layers.Dense(2, activation="softmax")(x)
outputs = layers.add([y1, y2, y3, y4])

вот файл целиком:

from lib.dev import see, wtf, save_obj, load_obj
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

inputs = keras.Input(shape=(4190), name="input")
x = layers.Dense(4190, activation="relu", name='ma')(inputs)
y1 = layers.Dense(2, activation="softmax")(x)
y2 = layers.Dense(2, activation="softmax")(x)
y3 = layers.Dense(2, activation="softmax")(x)
y4 = layers.Dense(2, activation="softmax")(x)
outputs = layers.add([y1, y2, y3, y4])
model = keras.Model(inputs, outputs, name="predict_4_periods")
# model.summary()
# exit()
model.compile(optimizer='adam',
             loss='categorical_crossentropy',
             metrics=['accuracy'])

data = load_obj(f'data_set0')
x_train = [x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6] for x in data]

x_train = tf.reshape(tf.cast(x_train,tf.float32), [-1, 4190])
y_train = [x[7] for x in data]
y_train = tf.reshape(tf.cast(y_train,tf.float32), [-1, 8])
y = model.predict(tf.expand_dims(x_train[0],axis=0))

model.fit(x_train, y_train, batch_size=64, epochs=16, validation_split=0.2)

Ошибка:

    Traceback (most recent call last):
  File "D:\python\pythonProject\tf_stady2\main.py", line 11, in <module>
    import err
  File "D:\python\pythonProject\tf_stady2\err.py", line 28, in <module>
    model.fit(x_train, y_train, batch_size=64, epochs=16, validation_split=0.2)
  File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\utils\traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "C:\Temp\__autograph_generated_filetz04zyt2.py", line 15, in tf__train_function
    retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
ValueError: in user code:

    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\engine\training.py", line 1160, in train_function  *
        return step_function(self, iterator)
    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\engine\training.py", line 1146, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\engine\training.py", line 1135, in run_step  **
        outputs = model.train_step(data)
    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\engine\training.py", line 994, in train_step
        loss = self.compute_loss(x, y, y_pred, sample_weight)
    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\engine\training.py", line 1052, in compute_loss
        return self.compiled_loss(
    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\engine\compile_utils.py", line 265, in __call__
        loss_value = loss_obj(y_t, y_p, sample_weight=sw)
    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\losses.py", line 152, in __call__
        losses = call_fn(y_true, y_pred)
    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\losses.py", line 272, in call  **
        return ag_fn(y_true, y_pred, **self._fn_kwargs)
    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\losses.py", line 1990, in categorical_crossentropy
        return backend.categorical_crossentropy(
    File "D:\python\pythonProject\tf_stady2\venv\lib\site-packages\keras\backend.py", line 5529, in categorical_crossentropy
        target.shape.assert_is_compatible_with(output.shape)

    ValueError: Shapes (None, 8) and (None, 2) are incompatible

после

outputs = layers.add([y1, y2, y3, y4])

нужно добавить

outputs = layers.Dense(8)(outputs )

и все заработало


Выбор строк в массиве numpy по условию
Есть двумерный массив numpy

arr = np.arange(18).reshape((-1, 6))

    [[ 0  1  1  3  4  5]
     [ 6  7  8  9 10 11]
     [12 13 14 15 16 17]]

Нужно отобрать строки, в которых все элементы  начиная с 3го элемента > a.
Например для a = 9 останется  только

[[12 13 14 15 16 17]]

А для a = 7

[[ 6  7  8  9 10 11]
 [12 13 14 15 16 17]]

Как это сделать не перебирая каждую строку в цикле?

делаем выборку элементов
arr[:, 2:] и проверяем, что они все больше a

arr[(arr[:, 2:] > a).all(axis=1)]


python разделить число на несколько не равных частей
Как разделить число на несколько не равных частей?
Например:
есть 10, надо разделить на 5 частей.
выводится
[4, 1.5, 2.25, 2, 0.25]

import random
def divide(value, parts):
    res = [random.random() for _ in range(parts)]
    coef = value / sum(res)
    return [x*coef for x in res]

print(divide(10, 4))


проблема с связью html и js
HTML

<!DOCTYPE html>
<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>Инвентаризация</title>
    <script type = "text/javascript" src = "eel.js">

    </script>
    <link rel="stylesheet" href="main.css">
</head>
<body>
    <div class="box1">
        <div class="buttons">
            <button id="add">Добавить</button>
            <button id="btn">Изменить</button>
            <button id="btn">Удалить</button>
            <button id="update">Обновить</button>
        </div>
    </div>

    <input class="form-control" type="text" name="q" placeholder="Поиск по таблице" id="search-text" onkeyup="tableSearch()"    >

    <div class="box2">
        <table id="table">
            <tr>
                <th>№ п/п</th>
                <th col-index = 1>Расположение
                    <select class="table-filter">
                        <option value="all"></option>
                    </select>
                </th>
                <th col-index = 2>Наименование
                    <select class="table-filter">
                        <option value="all"></option>
                    </select>
                </th>
                <th col-index = 3>Серийный номер
                    <select class="table-filter">
                        <option value="all"></option>
                    </select>
                </th>
                <th col-index = 4>Инвентарный номер
                    <select class="table-filter">
                        <option value="all"></option>
                    </select>
                </th>
            </tr>
        </table>
    </div>

    <script type="text/javascript" src="main.js">
        showData();
        getUniqueValuesFromColumn();
    </script>
</body>
</html>

JS

async function results() {
    let a = await eel.get_data()();
    localStorage.setItem("localData", JSON.stringify(a));
    var mytable = JSON.parse(localStorage.getItem('localData'));
    console.log('Данные из локального хранилища:', mytable);
}
var arr = new Array();
function getData(){
    var str = localStorage.getItem('localData');
    if (str != null) {
        arr = JSON.parse(str);
    }
}
function showData(){
    results();
    getData();
    const [id, rasp, name, sn, inv] = [0, 1, 2, 3, 4]
    var tbl = document.getElementById('table');

    for(i = 0; i<arr.length; i++) {
        var r = tbl.insertRow();
        var cell1 = r.insertCell();
        var cell2 = r.insertCell();
        var cell3 = r.insertCell();
        var cell4 = r.insertCell();
        var cell5 = r.insertCell();

        cell1.innerHTML = arr[i][id];
        cell2.innerHTML = arr[i][rasp];
        cell3.innerHTML = arr[i][name];
        cell4.innerHTML = arr[i][sn];
        cell5.innerHTML = arr[i][inv];
    }

}
document.querySelector("#update").onclick = function(){
    for (var i = document.getElementById('table').getElementsByTagName('tr').length -1; i; i--) {
        document.getElementById('table').deleteRow(i);
    }
    showData();
}
function tableSearch() {
    var phrase = document.getElementById('search-text');
    var table = document.getElementById('table');
    var regPhrase = new RegExp(phrase.value, 'i');
    var flag = false;
    for (var i = 1; i < table.rows.length; i++) {
        flag = false;
        for (var j = table.rows[i].cells.length - 1; j >= 0; j--) {
            flag = regPhrase.test(table.rows[i].cells[j].innerHTML);
            if (flag) break;
        }
        if (flag) {
            table.rows[i].style.display = "";
        } else {
            table.rows[i].style.display = "none";
        }

    }
}
let enter = document.querySelector("#add");
enter.addEventListener("click", getadd);

async function getadd(){
    let key = 1;
    await eel.get_add(key);
    console.log(key)
}

Попытался перенести все функции в отдельный файл .js, но все перестало работать. До этого все находилось в файле html. Скорее всего проблема с eel, как можно это исправить?

Попробуй написать вот так
<script src="main.js"></script>, а функции вызывать в самом js файле.


Как включить список сразу несколько строк в определенное место списка?
Есть два списка:

list1= [
f'some text',
f'text2',
f'end of list',
]
list2 = [
'some text in list 2',
'other text'
]

Я хочу сформировать общий список:

list1= [
f'some text',
'some text in list 2',
'other text',
f'text2',
f'end of list',
]

но

list1.insert(1, list2)

выдает:

list1= [
f'some text',
[
'some text in list 2',
'other text'
],
f'text2',
f'end of list',
]

Как можно получить общий список из пяти строк одной командой?

совсем по-простому

list1[:1] + list2 + list1[1:]

или так

list1[1:1] = list2


Логика работы оператора in в строках содержащих скобочную последовательность: "(), {}, []"
Столкнулся с задачей для новичков "Скобочная последовательность", в которой нужно определить, является ли входная строка допустимой. Задачу решил, но с помощью кода, который нашёл в итнернете!

def is_valid(text: str) -> bool:
    while '()' in text or '[]' in text or '{}' in text:
        text = text.replace('()', '')
        text = text.replace('[]', '')
        text = text.replace('{}', '')
    return not text

Так вот чём вопрос: почему при таком расположении скобок (
text = "({}){[}]") в строке функция выдаёт False? Ведь тут открывающие скобки равны по количеству закрывающим?
Каким образом происходит проверка правильной последовательности скобок и замена на пустое значение при такой конструкции?
В документации ничего об этом не нашёл(

Условие в цикле проверяет на вхождение () - False, [] - False, {} -True заменяет {} на ''. Получаем "(){[}]". второй заход () - True, [] - False, {} - False. Заменяет (). Получаем "{[}]". () - False, [] - False, {} - False Цикл закончен. В переменной осталась строка "{[}]". выводится False т.к. выражение  "{[}]" - это не строка является ложным.


ломается кодировка csv файла при открытии в Excel. csv записан с помощью Python3 pandas
<code>
DataFrame(new_df).to_csv(my, mode='w', index=False, sep=';' encoding='utf-8')
</code>
При чтении csv появляются кракозябры. В pycharm файл открывается нормально и кириллица как кириллица, пишет, что кодировка записанного файла utf-8

Так у
Excel родная для
MS Windows кодировка:
cp1251, записывайте файл в этой кодировке, если хотите открывать потом
Excel-ем.

encoding='cp1251'


Исправить номер телефона по шаблону regexp на python
Появилась потребность исправлять номер телефона по регулярному выражению.
на вход подают номер телефона (например +79991112233) и маску к которой надо привести номер:
mask=
"^(\\d{10})$" надо получить 9991112233
mask=
"^\\((\\d{3})\\)(\\d{3})\\-(\\d{2})\\-(\\d{2})$" надо получить (999)111-22-33
номер который дают привожу к 10 цифрам так:

phone = [digit for digit in phone_number if digit.isdigit()][1:]
а как дальше из этого сделать номер по переданной маске?
Как посоветовал @Алексей Р, сделал универсальную входную маску и пытаюсь сгенерировать выходную по маске, получилось как-то очень костыльно:

mask = "+7(<!^\\d{0,3}$>)<!^\\d{0,3}$>-<!^\\d{0,2}$>-<!^\\d{0,2}$>"
# mask = "+7<!^\\d{0,10}$>"
phone = "9991112233"

res = []
start = r"<!^\d{0,"
end = r"}$>"
skip = 0
replace = False
group = 1
for i, st in enumerate(mask):
    if mask.find(start, i, i + len(start)) != -1:
        skip = len(start)
        replace = True
    if mask.find(end, i, i + len(end)) != -1:
        skip = len(end)
    if skip > 0:
        skip -= 1
        continue
    if replace:
        for _ in range(int(mask[i: mask.find(end, i)])):
            res.append(f"\\{group}")
            group += 1
        replace = False
        skip = 1
     else:
        res.append(st)

out_mask = "".join(res)

result = re.sub(r"(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)", out_mask, phone)
print(result)

Мне это не очень нравится, может можно как-то более красиво переписать?


Форматный вывод: вывести строку с заранее неизвестным количеством заполнителей
Как используя форматный вывод вывести строку с заранее неизвестным количеством заполнителей?
print('{n: <len}') требует литерал на место len
Вывожу таблицу. Надо как-то отрегулировать ширину колонок. Нет ли в питоне какой библиотеки, которая поддерживает форматный вывод с заранее неизвестным количеством знаков, чтобы работал какой-то такой код?

def print_table():
   max_len = 0
   for header in table['header']:
     max_len = max(len(header), max_len)
   for row in table['value']:
     for value in row:
       max_len = max(max_len, len(value))

   for header in table['header']:
     print('{header: <max_len}'.format(header = header, max_len = max_len), end = '')
   print('')
   for row in table['value']:
     for value in row:
       max_len = max(max_len, len(value))

Просто возьмите
max_len еще раз в фигурные скобки, тогда сначала подставится он, потом подставится
header в соответствии с подставленным
max_len:

print('{header: <{max_len}}'.format(header=header, max_len=max_len), end = '')

Демонстрация:

header = "заголовок"
max_len = 30
print(f'{header:*<{max_len}}')
max_len = 31
print(f'{header:*<{max_len}}')

Выведет:

заголовок*********************
заголовок**********************


ошибка в replace

a = [1, 2, 3, 4, 5, 6, 4, 7, 8, 9, 10]
print(a[0])
print(a[-1])
print(a.replace(8, 99))
print(a.add(47))
print(a.add(50, 5))

Traceback (most recent call last):

print(a.replace(8, 99))

AttributeError: 'list' object has no attribute 'replace'

<code>
s.append(x)
s.clear()
s.copy()
s.extend(t) or s += t
s.insert(i, x)
s.pop() or s.pop(i)
s.remove(x)
s.reverse()
</code>
Вероятно этот метод еще не написан.
Чтобы поменять восьмой элемент на 99 достаточно в вашем списке a[9]=99


как продолжить цикл добавление пользователей в базу данных sqlite после исключения python
пожалуйста помогите разобраться почему
код перестает работает если появляется ошибка UNIQUE constraint failed:
при добавления не уникального ид
мне нужно добавить в базу данных списки с данными пользователей, в которых возможно что ид пользователей уже существует. их нужно пропустить. и добавить только уникальных пользователей.
сейчас код перестает работать если пользователь не уникален.
<code>
import sqlite3

id = [12441, 21255021,]
name1 = ['name1', 'name2']
age1 = [ 23, 34]
city = ['city1', 'city2']
time = ['27.11.2022 4:15', '27.11.2022 4:15']

def insert_db(id, name1, age1, city, time):
    connection = sqlite3.connect('new_db.sqlite')
    cursor = connection.cursor()
    cursor.execute("""
        INSERT INTO test1 (id, name, age, city, joining_date,)
        VALUES (?, ?, ?, ?, ?)
    """, (id, name1, age1, city, time))
    connection.commit()

for i in range(len(id)):
    try:
        insert_db(id[i], name1[i], age1[i], city[i], time[i])
        print('уникальный')
    except:
        print('не уникальный')
</code>

<code>
import sqlite3

id = [12441, 21255021, ]
name1 = ['name1', 'name2']
age1 = [23, 34]
city = ['city1', 'city2']
time = ['27.11.2022 4:15', '27.11.2022 4:15']

def insert_db(id, name1, age1, city, time):
    connection = sqlite3.connect('new_db.sqlite')

    connection.execute(
        """
        create table if not exists test1
        (
            id           integer primary key,
            name         text,
            age          integer,
            city         text,
            joining_date text
        );
        """
    )

    cursor = connection.cursor()
    cursor.execute("""
        INSERT INTO test1 (id, name, age, city, joining_date)
        VALUES (?, ?, ?, ?, ?) on conflict do nothing returning id
    """, (id, name1, age1, city, time))

    inserted_id, = cursor.fetchone() or (None,)
    connection.commit()
    return inserted_id

for i in range(len(id)):
    if insert_db(id[i], name1[i], age1[i], city[i], time[i]):
        print('уникальный')
    else:
        print('не уникальный')
</code>
Нужно чтобы id был уникальным индексом, к примеру primary key


Как создать случайную строку байтов в C#?
Сабж.
Пытаюсь перевести код python в C#
Есть такой кусок кода

import base64
import hashlib
import secrets

random = base64.urlsafe_b64encode(secrets.token_bytes(32))

secrets.token_bytes(32) возвращает случайную строку байтов, содержащую количество байтов nbytes.
А
base64.urlsafe_b64encode() принимает "байтоподобный объект".
Есть у меня такой C# код

public static byte[] GetByteArray()
{
    Random rnd = new Random();
    byte[] b = new byte[32];
    rnd.NextBytes(b);
    return b;
}

Но это массив байтов. окей.
Делаю
BitConverter.ToString(key) получаю строку вида
75-A7-A0-85-D3-05-8E-....... Но она не такая как в документации питона

>>> token_bytes(16)
b'\xebr\x17D*t\xae\xd4\xe3S\xb6\xe2\xebP1\x8b'

Что не так? Как мне получить такую же строку?
upd
Да, по коду питона мне дальше нужно

random = base64.urlsafe_b64encode(secrets.token_bytes(32))
m = hashlib.sha256()
m.update(random)
d = m.digest()
code_challenge = base64.urlsafe_b64encode(d).decode().replace("=", "")

Но это я уже знаю как дальше. Но мне нужна строка байтов. Просто с массивом байтов я уже пробовал делать и у меня не получается.
upd2
Я незнаю почему мне нужна строка вида
\xebr\xe2\xebP1\x8b это мне нужно для OAuth 2.0, есть пример на python я пытаюсь его полностью повторить.  Потому что когда на C# я генерирую массив байтов потом его в Base64 потом его в mySHA256 потом его в Base64 как в инструкции
<URL safe Base64(SHA256(URL safe Base64(random 32 byte string)))> у меня ничего не работает

Для криптографии можно использовать криптостойкий PRNG
RandomNumberGenerator.
Получится как-то так, если я верно понял код

private static string ToUrlSafeBase64(byte[] bytes, bool trimPadding = false)
{
    string result = Convert.ToBase64String(bytes)
        .Replace('+', '-')
        .Replace('/', '_');
    return trimPadding ? result.TrimEnd('=') : result;
}

string base64key = ToUrlSafeBase64(RandomNumberGenerator.GetBytes(32));
byte[] bytes = Encoding.UTF8.GetBytes(base64key);
byte[] hash = SHA256.HashData(bytes);
string base64 = ToUrlSafeBase64(hash, true);
Console.WriteLine(base64);

Пример вывода в консоль

-XQ8VkSPUMFDW8m9d_xnzPYvFhrordTV-TUQConvVbE


Как использовать set_footer у embed в библиотеке discord.py?
Не могу понять, как правильно использовать у Embed сообщения set_footer.
Код:
<code>
async def findteam(ctx):
    await ctx.channel.purge(limit = 1)
    global teamList

    if len(teamList) > 0:
        open_teamList = "\n\n".join(teamList)

        embed = discord.Embed(
            title = "Список игроков:",
            description = open_teamList,
            set_footer ="Список очистится ",
            timestamp = futureTime,
            colour = discord.Colour.from_rgb(170, 110, 0))
        await ctx.send(embed = embed)

    else:
        await ctx.send("Список пуст!")
</code>
Подскажите пожалуйста!

перед await ctx.send напиши

embed.set_footer()


Как вывести все комбинации покупок за заданную сумму?
До меня не доходит как эту задачу решить
Вкратце: у фермера есть 100 т.р., он хочет купить скот. Какого количества и какого скота он может купить на эти деньги?
Стоимость: бык 10 т.р., корова 5 т.р., теленок 500 руб.
Вариантов тут масса. Я не понимаю как вывести их все. Например, он может купить 9 быков, 1 корову и 10 телят. Как это вывести в принт?
Я сделал так. Но это выводит только 3 из возможных вариантов:
<code>
b = 10000  # бык
k = 5000  # корова
t = 500  # теленок
s = 100000  # общая сумма

def prog(x, y, i, z):
    return x / y, x / i, x / z

print(prog(s, b, k, t))
</code>
Но это явно что-то не то...

Так сойдет?
<code>
b = 10000   # бык
k = 5000    # корова
t = 500     # теленок
s = 100000  # общая сумма

for ib in range(0,s//b+1):
    ns = s - ib * b
    for ik in range(0,ns//k+1):
        nns = ns - ik * k
        it = nns//t
        print("Быки: ", ib, " Коровы: ", ik, " Телята: ", it)
</code>


Как посмотреть документацию по Pygame и когда сайт станет онлайн?
На сайте висит только текст '☮ 🕊
In solidarity with NZ Aotearoa we are offline today.'
Можно хоть как-нибудь документацию посмотреть? У меня курс часто на документацию ссылается, а я не могу посмотреть и обучение в частичном тупике

Эта программа откроет в браузере начальную страницу документации по PyGame:
<code>
import os
import pygame
import webbrowser

def get_parent_dir(path):
    return os.path.sep.join(path.split(os.path.sep)[:-1])

webbrowser.open(f'{get_parent_dir(pygame.__file__)}{os.path.sep}docs{os.path.sep}generated{os.path.sep}index.html')
</code>
Некоторые ссылки могут не работать, но в целом документация работает.
Протестировано на следующем ПО:

Windows10:

Python 3.7 и 3.10:

PyGame 2.1 и 2.2

Python 3.11:

PyGame 2.2


Как в кортеже заменить все фамилии на случайные из созданного файла?
Нужно в кортеже заменить все фамилии на случайные из созданного файла.
<code>
import random

foot = [('Андреев', 2001,'Полузащитник', 15, 10, 'Москва'),
('Иванов', 1990, 'Защитник',9, 5, 'Тула'),
('Николаев', 2000, 'Нападающий',10, 5, 'Тюмень'),
('Мамаев', 2002, 'Вратарь',13, 7, 'Ульяновск'),
('Александров', 1997, 'Защитник',10, 4, 'Оренбург')]

x = list(foot)

a = list(open('test.txt'))
a = random.choice(a)#Генерирует случайную фамилию из файла.
x[0][0] = a
print(a)
</code>

Попробуйте:
<code>
a = list(open('test.txt'))
for i in foot:
    name = random.choice(a)
    i[0] = name
print(foot)
</code>


Форматирование результата SQL запроса python aiogram
Пишу своего бота на
aiogram.
Для вывода истории пополнения счета пользователя использую данный запрос:

def get_paymenthistory(self, user_id):
    with self.connection:
        result = self.cursor.execute("SELECT payed, date FROM paymenthistory WHERE user_id = ?", (user_id,)).fetchall()
        if result is not None:
            return result
        else:
            return 'вы еще не пополняли свой баланс'

При нескольких значениях я получаю:
[(200, '2022-11-29 10:20:11'), (100, '2022-11-29 12:20:20')]
Как мне форматировать этот результат с переносом каждой строки в новую?

Результатом функции get_paymenthistory является массив. Когда его получил – пройдись по ним через for:
<code>
print("Ваша история пополнения:")

for payment in result:
    print(f"Сумма – {payment[0]} руб., Дата – {payment[1]}.")
</code>


Выводит None в конце выполнения программы [дубликат]

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

Почему из функции возвращается None

                                (2 ответа)

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

Задание: Создать словарь, который содержит оценки студента за семестр (минимум
5 оценок), вывести предметы, по которым оценка «неуд».
Вот программа:

def DictInput(x):
    for i in range(n):
        key=input('Введите название предмета: ')
        m=int(input('Введите количество оценок (Минимум 5 оценок): '))
        if m>=5:
            for j in range(m):
                val=int(input('Добавьте оценку: '))
                if key not in x:
                    x[key]=list()
                    x[key].append(val)
                else:
                    x[key].append(val)
    return x

student=dict()
n=int(input('Введите количество предметов: '))

student=DictInput(student)

print(student)

def Check(x):
    for i in x.keys():
        extra=x.get(i)
        if 2 in extra or 1 in extra:
            print(i)

print(Check(student))

Пример выполнения:

Введите количество предметов: 1
Введите название предмета: 1
Введите количество оценок (Минимум 5 оценок): 5
Добавьте оценку: 1
Добавьте оценку: 2
Добавьте оценку: 3
Добавьте оценку: 4
Добавьте оценку: 5
{'1': [1, 2, 3, 4, 5]}
1
None
>>>

Вопрос - как убрать этот None в конце?

Уберите из строки
print(Check(student)) (последней)
print:

Check(student)


Как найти подходящие элементы в файле?
Есть файл
base.txt, который содержит название элемента, межплоскостное расстояние
d и интенсивность
I:

element d I
Fe 2.0268 100
Fe 1.4332 19
Fe 1.1702 30
Fe 1.0134 9
Fe 0.9064 12
Fe 0.8275 6
Si 3.138 100
Si 1.92 60
Si 1.638 35
............
SiO2 1.279 3
SiO2 1.235 1
SiO2 1.203 1
SiO2 1.181 2
SiO2 1.095 3

Как сделать так, чтобы вывести элемент, который подходит введенным пользователем значениям
d и
I. При этом, значение
d - приблизительно равное введенному значению.
Пример:

Ввод значений

d = 1.18
I = 2

Вывод программы

SiO2

Заранее всем спасибо

Полный пример с
Pandas, частично использована подсказка splash58. И я добавил элемент в данные с таким же
I, чтобы проверить, что ищется именно ближайшее:

from io import StringIO
import pandas as pd

data = """
element d I
Fe 2.0268 100
Fe 1.4332 19
Fe 1.1702 30
Fe 1.0134 9
Fe 0.9064 12
Fe 0.8275 6
Si 3.138 100
Si 1.92 60
Si 1.638 35
SiO2 1.279 3
SiO2 1.235 1
SiO2 1.203 1
SiO2 1.181 2
SiO3 1.191 2
SiO2 1.095 3"""

df = pd.read_csv(StringIO(data), sep='\s+')

d = 1.18
I = 2
print(df.loc[(df.loc[df['I'] == I, 'd']-d).abs().idxmin(), 'element'])
# SiO2


Как найти все слова, которые имеют только одну Заглавную букву в строке и состоят только из букв?
Как найти все слова, которые имеют только одну Заглавную букву в строке и состоят только из букв?
Пример строк которые могут быть выделены выражением:

"Мама","авТо","гриБ",'Яблоко', 'яБлоко', 'ябЛоко', 'яблОко', 'яблоКо', 'яблокО'

Пример строк которые не должны быть выделены выражением:

"агент007" - содержит цифры
"стриж" - только строчные буквы
"ГТО", - более одной заглавной буквы
"Три богатыря" - содержит пробел, допустимы только буквы

result = re.findall(r'(\b[^\W\d_]+\b)([a-za-яё])([A-ZА-ЯЁ]{1}\w+)', str)
print(result)

Я подготовил три группы, но не понимаю, как именно их надо оформить, чтобы условие у меня все заработало.
Нужно именно на библиотеке re подготовить ответ

Как я понял, подходят все последовательности строчных русских букв, содержащие внутри 1 заглавную. Тогда подойдет выражение
[а-яё]*[А-ЯЁ][а-яё]*, где обязательную заглавную букву окружают слева и справа 0+ строчных букв, и это условие должно распространяться на всю строку целиком, а не на отдельный фрагмент (поэтому
fullmatch).
Этим выражением выберутся также отдельные заглавные буквы наподобие
А. Если требуется, чтобы букв было, например, не менее двух, то можно так:

[а-яё]+[А-ЯЁ][а-яё]*|[а-яё]*[А-ЯЁ][а-яё]+

import re

lst = ["Мама","авТо","гриБ",'Яблоко', 'яБлоко', 'ябЛоко', 'яблОко', 'яблоКо', 'яблокО',"агент007","стриж","ГТО","Три богатыря"]
r = r'[а-яё]*[А-ЯЁ][а-яё]*'

for s in lst:
    x = re.fullmatch(r,s)
    if x is not None:
        print(f'{s} годится')
    else:
        print(f'{s} не подходит')

Мама годится
авТо годится
гриБ годится
Яблоко годится
яБлоко годится
ябЛоко годится
яблОко годится
яблоКо годится
яблокО годится
агент007 не подходит
стриж не подходит
ГТО не подходит
Три богатыря не подходит


выгрузка отфильтрованных данных Django
Всем доброго времени суток. Занимаюсь разработкой приложения на Джанго для изучения веб программирования.
На странице реализована таблица которая выводит значения нужных полей из БД (в том числе связанных моделей), а также передает в шаблон все возможные значения некоторых полей (для возможности выбора поля при фильтрации). Также реализована фильтрация контента по заданным параметрам. К работе вьюхи и фильтра вопросов нет - все работает как и задумано (возможно написано криво, но работает). Но мне нужно реализовать функцию выгрузки предварительно отфильтрованных данных в xls и последующий редирект на эту же страницу с сохранением настроек фильтров.
Ниже куски кода:

def ozp(request):
    # получение списков данных для меню выбора -------------------
    objectslist = Ozp.objects.all()
    dep = Department.objects.all()
    ceh_list = []
    uchastok_list = []
    year_list = []
    for i in dep:
        if i.ceh in ceh_list:
            pass
        else:
            ceh_list.append(i.ceh)
        if i.uchastok in uchastok_list:
            pass
        else:
            uchastok_list.append(i.uchastok)
    for i in objectslist:
        try:
            year = i.zakrytie_date.year
            if str(year) in year_list:
                pass
            else:
                year_list.append(str(i.zakrytie_date.year))
        except AttributeError:
            pass
    # --------------------------------------------------------------
    # получение введенных в фильр данных --------------------------
    if request.GET:
        ceh = request.GET['ceh']
        uchastok = request.GET['uchastok']
        vipolnenie = request.GET['vipolnenie']
        na_vipolnenie = request.GET['na_vipolnenie']
        year_filter = []
        this_month = request.GET['this_month']
    # ------------------------------------------------------------------------
    # получение списка выбранных годов----------------------------------------
        for i in year_list:
            q = ''.join(['year_', str(i)])
            try:
                year_filter.append(request.GET[q])
            except KeyError:
                pass
    # -------------------------------------------------------------------------
    # фильтрация по объектам сети----------------------------------------------
        filtered_departments = department_filter(ceh, uchastok)[0]
        filtered_by_department = " ".join(department_filter(ceh, uchastok)[1])
        filtered_objects = Object.objects.filter(uchastok__in=filtered_departments)
        filtered_ozp_objects = Ozp.objects.filter(object_name__in=filtered_objects)
    # фильтрация по выполнению -----------------------------------------------------
        if vipolnenie == '1':
            filtered_by_vipolnenie = 'Выполненным'
            filtered_ozp_objects = filtered_ozp_objects.filter(is_done=True)
        elif vipolnenie == '0':
            filtered_by_vipolnenie = 'Невыполненным'
            filtered_ozp_objects = filtered_ozp_objects.filter(is_done=False)
        else:
            filtered_by_vipolnenie = ''
    # -----------------------------------------------------------------------------
    # фильтрация по поданным на выполннеине ----------------------------------------
        if na_vipolnenie == '1':
            filtered_by_na_vipolnenie = 'Поданным на устранение'
            filtered_podano = Podano_na_vipolnenie.objects.filter(podano=True)
            filtered_ozp_objects = filtered_ozp_objects.filter(podano_na_vipolnenie__in=filtered_podano)
        elif na_vipolnenie == '0':
            filtered_by_na_vipolnenie = 'Не поданным на устранение'
            filtered_podano = Podano_na_vipolnenie.objects.filter(podano=False)
            filtered_ozp_objects = filtered_ozp_objects.filter(podano_na_vipolnenie__in=filtered_podano)
        else:
            filtered_by_na_vipolnenie = ''
    # -------------------------------------------------------------------
    # фильтрация по году-------------------------------------------------
        if year_filter != year_list:
            filtered_ozp_objects = filtered_ozp_objects.filter(zakrytie_date__year__in=year_filter)
            filtered_by_year = 'По следующим годам ' + ' '.join(year_filter)
        else:
            filtered_by_year = ''
    # -------------------------------------------------------------------
    # фильтрация по выполнению в течении месяца--------------------------
        if this_month == 'this_month':
            month = datetime.today() + timedelta(days=30)
            filtered_ozp_objects = filtered_ozp_objects.filter(zakrytie_date__lt=month)
            filtered_by_month = 'По необходимости выполнения в течении месяца'
        else:
            filtered_by_month = ''
    # -------------------------------------------------------------------
        filtered_by = ' '.join([filtered_by_department, filtered_by_vipolnenie, filtered_by_na_vipolnenie,
                                filtered_by_year, filtered_by_month])
        context = {'objectlist': filtered_ozp_objects, 'ceh': ceh_list, 'uchastok': uchastok_list, 'year': year_list,
                   'filtered_by': filtered_by}
        print(filtered_by)
        return render(request, "main/templates/ozp.html", context)
    else:
        filtered_ozp_objects = Ozp.objects.all()
        filtered_by = str('')
        context = {'objectlist': filtered_ozp_objects, 'ceh': ceh_list, 'uchastok': uchastok_list, 'year': year_list,
                   'filtered_by': filtered_by}
        print(filtered_by)
        return render(request, "main/templates/ozp.html", context)

Данная вьюха возвращает в шаблон настройки фильтров, данные для менюшек выбора, строку с указанием по каким параметром выставлены фильтры, и сами данные (объекты).
Фильтрацию по полям связанной таблицы вынес в отдельную функцию:

def department_filter(ceh, uchastok):
    filtered_by = []
    if ceh == 'all' and uchastok == 'all':
        filtered_department = Department.objects.all()
    elif ceh == 'all' and uchastok != 'all':
        filtered_department = Department.objects.filter(uchastok=uchastok)
        filtered_by = [uchastok]
    elif ceh != 'all' and uchastok == 'all':
        filtered_department = Department.objects.filter(ceh=ceh)
        filtered_by = [ceh]
    else:
        filtered_department = Department.objects.filter(Q(ceh=ceh), Q(uchastok=uchastok))
        filtered_by = [uchastok, ceh]
    return filtered_department, filtered_by

В шаблоне для экспорта реализована отдельная кнопка:

<form action="{% url 'main:export_xls_ozp' filtered_by %}">
    <button type="submit">Выгрузить</button>
</form>

Пытаюсь в url передать строку filtered_by но данное решение мне кажется неверным по причине возникновения ошибок в случае отсутствия фильтрации(передачи пустой строки). При этом интуитивно понимаю что мне необходимо в функцию  export_xls_ozp передать состояние адресной строки, но как это сделать не знаю. Интернет по запросу мало что выдает.
Найденная на просторах интернета конструкция работать не хочет:

<form action="{% url 'main:export_xls_ozp' %}?{{ request.GET.urlencode }}">
    <button type="submit">Выгрузить</button>
</form>

Кажется разобрался:

<a href="{% url 'main:export_xls_ozp' %}?{{ request.GET.urlencode }}">
    <button type="submit">Выгрузить</button>
</a>

Конструкция работает как ссылка. Формирует get  запрос к view.export_xls_ozp с параметрами установленного фильтра.
В функции export_xls_ozp мы можем легко достать данные параметры при помощи request.GET по необходимому ключу:

def export_xls_ozp(request):
if request.method == 'GET':
    ceh = request.GET['ceh']
    uchastok = request.GET['uchastok']
    vipolnenie = request.GET['vipolnenie']
    na_vipolnenie = request.GET['na_vipolnenie']


Собрать взвешенные значения в Counter
Есть список пар
(ключ,значение), причём ключи могут повторяться. Я хочу собрать всё в
Counter так, чтобы значения по одинаковым ключам просуммировались.
Могу это сделать так: tio.run

from collections import Counter

a = [("A",3), ("B",10), ("A",8), ("C",1)]

c = Counter()
for k,v in a: c[k] += v

print(c) # Counter({'A': 11, 'B': 10, 'C': 1})

Есть ли более красивый способ получить то же самое?

"Есть ли более красивый способ получить то же самое?" - красота у каждого своя:)
То же самое, без дополнительных модулей:

a = [("A",3), ("B",10), ("A",8), ("C",1)]

c = {}
for k,v in a:
    c[k] = v if k not in c else c[k] + v

print(c)

Вывод: {'A': 11, 'B': 10, 'C': 1}
У подходов есть разная цель: красота или скорость

import timeit
from collections import Counter

def proc():
    a = [("A",3), ("B",10), ("A",8), ("C",1)]
    c = Counter()
    for k,v in a: c[k] += v

def proc2():
    a = [("A",3), ("B",10), ("A",8), ("C",1)]
    c = {}
    for k,v in a:
        c[k] = v if k not in c else c[k] + v

print(timeit.timeit(proc2, number=100000))
print(timeit.timeit(proc, number=100000))

Итог:

100000 прогонов
proc2: 0.0937448000004224
proc:  0.3667998000000807

1000000 прогонов
proc2: 0.9124658000000636
proc:  3.624726500000179

Результат очевиден


Python. Чтение из переменной построчно, аналог readline есть?
В программе написана большая функция, которая построчно считывает данные из текстового файла и обрабатывает их по своим алгоритмам.

with open(FilePath, "r") as file:
    my_var1 = 'NotEnd'
    while my_var1 != ''
        my_var1 = file.readline().rstrip()
        # дальше алгоритм обработки my_var1
    print ('Ok')

Возникла необходимость продублировать ту же функцию, но с обработкой данных не из файла, а из переменной. Особенность readline, считывает строку в файле и запоминает позицию. Новое считывание readline будет происходить с новой строки. Возможно ли аналогичным образом обработать переменную, содержащую многострочный текст?
Без применения
splitlines() и списка?
Предположительный пример того, что хочется получить в результате:

STR_VAR = 'Многострочная\nпеременная\nстроки из которой\nбудут обрабатываться\n'
my_var1 = 'NotEnd'
while my_var1 != ''
    my_var1 = STR_VAR.readline().rstrip()
    # дальше алгоритм обработки my_var1
print ('Ok')

io.StringIO больше всего похоже на то, что вам нужно

import io

STR_VAR = 'Многострочная\nпеременная\nстроки из которой\nбудут обрабатываться\n'

with io.StringIO(STR_VAR) as file:
    my_var1 = 'NotEnd'
    while my_var1 != '':
        my_var1 = file.readline().rstrip()
        # дальше алгоритм обработки my_var1
    print ('Ok')

А что касается самого цикла обработки, вот чуть более традиционный способ его организовать

for my_var1 in map(str.rstrip, file):
    # дальше алгоритм обработки my_var1

print('Ok')


как отсортировать словарь по дню даты рождения

birthdays = {"Иванов Иван Иванович": datetime.date(1989, 5, 1), "Петров Петр Петрович": datetime.date(1998, 5, 5), "Василий Петр Петрович": datetime.date(1991, 5, 4), "Антон Петр Петрович": datetime.date(1990, 5, 29)}

способ ниже сортирует по году рождения

birthday2 = sorted(birthdays.items(), key=lambda d: d[1])

а мне нужно именно по дню

Необходимо в функции указать что Вы хотите сортировать по дню:
<code>
birthday2 = sorted(birthdays.items(), key=lambda d: d[1].day)
</code>


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

По итогу пришлось использовать websockets(django channels). Но как оказалось это не столь сложно как мне показалось изначально.
consumers.py

import json
from channels.generic.websocket import WebsocketConsumer
from .models import Translation

class Watcher(WebsocketConsumer):
    def connect(self):
        self.accept()
        self.send(text_data=json.dumps({
            'type': 'start watch',
            'message': 'User started watching stream'
        }))
        pk = self.scope["url_route"]["kwargs"]["pk"]
        data = Translation.objects.get(id=pk)
        data.online += 1
        data.save()

    def disconnect(self, code):
        pk = self.scope["url_route"]["kwargs"]["pk"]
        data = Translation.objects.get(id=pk)
        data.online -= 1
        data.save()

javascript

let url = `ws://${window.location.host}/ws/socket-server/{{ pk }}/`
                            const viewStream = new WebSocket(url)
                            viewStream.onmessage = function (e) {
                                let data = JSON.parse(e.data);
                                console.log("DATA: ", data);

                            }

Этот код даст возможность отслеживать количество пользователей на каждой странице, но вам понадобиться еще прописать в моделях online.
Надеюсь мои поиски помогут еще кому то кроме меня.


Как проверить, что пользователь написал?
пишу FSM, хочу проверить сообщение
<code>
if "что здесь написать" == "да":
    I= I+1
</code>

<code>
async def check_emp(message: types.message):
   if message.text == 'твой текст':
       do_something()

def register_handler_other(dp: Dispatcher):
    dp.register_message_handler(check_emp)
</code>
Не забывай про await.


Пересылка сообщений с изображениями aiogram
Как в python переслать изображение от одного пользователя к другому (мне) с помощью библиотеки aiogram

Простым методом будет
message.forwardили
message.copy_to
Разница между методами в том, что
message.forward показывает откуда было переслано сообщение, в то время как
message.copy_to присылает новое сообщение, копию оригинального.
Пример в коде:

to_id = 1234  # твой user_id

async def handler(message: types.Message):

    await message.forward(to_id)
    # или
    await message.copy_to(to_id)
    # или
    await message.send_copy(to_id) # аналог .copy_to()


Как снять ограничения, для одного пользователя?
Подскажите, как сделать так, чтобы только пользователь, которому адресована капча мог снять ограничения, а не любой юзер. Скажем, капча адресована для Екатерины (пользователь, которому запрещено писать), но при этом другой пользователь может нажать на кнопку и все ограничения снимаются. Как это исправить?
Я долго лепил этот код, несколько человек с разных сайтов оказали мне помощь, один человек даже целый день правил код, я же потом просто немного его улучшил, пользуясь информацией, которую читал по различным сайтам.
Я видел в группах боты, в которых эта функция работает корректно. Например, после нажатия на чужую капчу мне написал бот: "Эта капча не для Вас".
Мой код идеально работает, но существует такой недочет.

#База Данных
conn = sqlite3.connect("misqlite.db")
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS USERS
        (id INTEGER PRIMARY KEY NOT NULL, user_id INTEGER, username TEXT, name TEXT, last_name TEXT, chat_id INTEGER)''')
conn.commit()
#conn.close()

class SQLither:

    def __init__(self, database) -> object:
        self.conn = sqlite3.connect(database)
        self.c = self.conn.cursor()

    def exists_user_chat(self, user_id, chat_id):
        """Проверка существования пользователя в БД и в группе"""
        #return bool(self.c.execute("SELECT * FROM users WHERE user_id=?", (user_id,)).fetchone())
        return bool(self.c.execute("SELECT * FROM users WHERE user_id=? and chat_id=?", (user_id, chat_id,)).fetchone())

    def add_to_db(self, user_id, username, name, last_name, chat_id):
        """Добавление пользователя в БД"""
        #self.c.execute("INSERT INTO users ('user_id') VALUES(?)", (user_id,)) and self.c.execute("INSERT INTO users ('username') VALUES(?)", (username,))
        self.c.execute("INSERT INTO users(user_id, username, name, last_name, chat_id) VALUES(?,?,?,?,?)", (user_id, username, name, last_name, chat_id))
        self.conn.commit()

db = SQLither("misqlite.db")

@dp.message_handler(commands=['start'])
async def inline_menu(message: types.Message):
    await bot.send_message(message.chat.id, f'<b>\nНажми кнопку.</b>'.format(message.from_user), parse_mode='html', reply_markup=menu)
    return

Рабочий код

@dp.message_handler(content_types=['text'])
async def handler_text(message: types.Message):
    member = await bot.get_chat_member(message.chat.id, message.from_user.id)
    if member.user.username == 'GroupAnonymousBot':
    #if member.user.first_name == 'Group':
        return

    user_id = message.from_user.id
    username = message.from_user.username
    last_name = message.from_user.last_name
    name = message.from_user.full_name
    chat_id = message.chat.id

    if not db.exists_user_chat(user_id, chat_id):
            keyboard = types.InlineKeyboardMarkup(row_width=1)
            checkYes = types.InlineKeyboardButton(text='Я не робот!', callback_data=f'captcha:{user_id}')
            keyboard.add(checkYes)
            msg = await bot.send_message(message.chat.id, f"<a href=\"tg://user?id={user_id}\">{name}</a>. нажми кнопку.".format(message.from_user), parse_mode='html', disable_notification=True, disable_web_page_preview=True, reply_markup = keyboard)
            asyncio.create_task(delete_message(msg, 180))
            await bot.restrict_chat_member(message.chat.id, message.from_user.id, ChatPermissions(can_send_messages=False, can_send_media_messages=False, can_send_other_messages=False, can_add_web_page_previews=False, can_send_polls=False, can_pin_messages=False, disable_notification=True, can_invite_users=True))
            await message.delete()
            db.add_to_db(message.from_user.id, username, name, last_name, message.chat.id)
            return

@dp.callback_query_handler(text_startswith='captcha')
async def captcha(call: types.CallbackQuery):
    user_id = str(call.from_user.id)
    to_id = call.data.split(':')[1]

    username = call.from_user.username
    last_name = call.from_user.last_name
    name = call.from_user.full_name
    chat_id = call.message.chat.id

    if not db.exists_user_chat(user_id, chat_id):
        db.add_to_db(call.from_user.id, username, name, last_name, call.message.chat.id)

    member = await bot.get_chat_member(chat_id=call.message.chat.id, user_id=call.from_user.id)
    if user_id in to_id:
    #if member.status in member_statuses:
        await call.answer(text="Спасибо)", show_alert=True)
        #await call.message.delete()
        await bot.restrict_chat_member(call.message.chat.id, call.from_user.id, ChatPermissions(can_send_messages=True, can_send_media_messages=True, can_send_other_messages=True, can_add_web_page_previews=True, can_send_polls=True, can_pin_messages=True, can_invite_users=True, can_change_info=True))
    else:
        await call.answer(text="Не принято", show_alert=True)

Это можно сделать, храня данные об адресате в inline-кнопке. Например, вместо
callback_data = 'captcha', мы сделаем
callback_data = f'captcha:{id пользователя}'. Далее в хендлере мы достаем этот id (это можно сделать с помощью
split) и сравниваем его с id пользователя, нажавшего на кнопку.
Вот как это выглядит в коде:

def captcha(user_id: int) -> types.InlineKeyboardMarkup: #генерация клавиатуры

    markup = types.InlineKeyboardMarkup(
        inline_keyboard=[
            types.InlineKeyboardButton(
                'Я не робот!',
                callback_data=f'captcha:{user_id}',
            ),
        ],
    )
    return markup

@dp.message_handler(commands='start')
async def captcha(message: types.Message):

    await message.answer(
        '<b>Нажми на кнопку!</b>',
        reply_markup=captcha(message.from_user.id),
    )

@dp.callback_query_handler(text_startswith='captcha')
async def check(call: types.CallbackQuery):

    user_id = str(call.from_user.id)
    to_id = call.data.split(':')[1]

    if user_id == to_id:  # сверяем id в кнопке с id нажавшего

        await call.message.edit_text(
            'Капча пройдена!',
        )
        # разблокируем возможность писать

    else:

        await call.answer(
            'Это не ваша капча!',
            True,
        )


Смена цвета tkinter при движении фигуры
1) Нужно сделать так, чтобы при движении круга вправо, он менял свой цвет на протяжении всего движения на цвета, которые записаны в списке. Но устанавливается только один цвет, смены не происходит. В чём проблема?

colorlist = ["red","black","white","green"]
random_color = random.choice(colorlist)

def moving():
    canvas.move(shell, 1,0)
    canvas.itemconfigure(shell, fill=f"{random_color}")
    canvas.after(10,moving)
moving()

window.mainloop()

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

colorlist = ["red","black","white","green"]
random_color = random.choice(colorlist)

def moving():
    canvas.coords(shell, canvas.coords(shell)[0]+10,15,canvas.coords(shell)[2]+10,105)
    canvas.itemconfig(shell, fill=f"{random_color}")
canvas.after(1000,moving)

window.mainloop()

У вас
random_color - глобальная переменная, и при вызове функции
moving она не изменяется. Надо изменять её в каждом вызове, например так:

colorlist = ["red", "black", "white", "green"]
random_color = random.choice(colorlist)

def moving():
    canvas.move(shell, 1, 0)
    canvas.itemconfigure(shell, fill=random_color)
    random_color = random.choice(colorlist)
    canvas.after(10, moving)

moving()

window.mainloop()

А лучше сделать её вообще локальной, например так:

colorlist = ["red", "black", "white", "green"]

def moving():
    canvas.move(shell, 1, 0)
    random_color = random.choice(colorlist)
    canvas.itemconfigure(shell, fill=random_color)
    canvas.after(10, moving)

moving()

window.mainloop()


Сравнить два словаря и записать результат в третий
помогите, пожалуйста)
Даны 2 словаря: англо-русский и англо-немецкий. Сгенерировать из них русско-
немецкий словарь. Если связь слов отсутствует(есть в одном словаре, но нет в другом), то
запись в новый словарь не вносить.
Например:
<code>
dict1 = {'ape': 'обезьяна',
         'bat': 'летучая мышь',
         'cat': 'кот',
         'donkey': 'осёл'}

dict2 = {'ape': 'affe',
         'bat': 'schläger',
         'cat': 'katze',
         'boy': 'junge'}

dict3 = {'ape': 'affe'}
</code>
и т.д, а слова, которые не совпадают по словарям - не были включены в третий.

Вот код для русско-немецкого словаря
<code>
dict1 =  {'ape': 'обезьяна', 'bat': 'летучая мышь', 'donkey': 'осёл'}
dict2 = {'ape': 'affe', 'bat': 'schläger', 'boy': 'junge'}

dict3 = {}

for i in dict1.keys():
    try:
        dict3[dict1[i]] = dict2[i]
    except:
        continue

print(dict3)
</code>
У вас просто в примере dict3 это англо-немецкий словарь


Как задать условие кратности?
Мне нужно найти среднее арифметическое всех введенных с клавиатуры чисел, кратных 2 и 3 одновременно. Как проверить кратность?
Код:
<code>
arr = []
n = int(input("Введите количество элементов : "))
for i in range(0, n):
    ele = int(input())
    arr.append(ele)
a = sum(arr) / n
print(a)
</code>

Для проверки кратности можно использовать оператор
% (аналог
mod в других языках). Он возвращает остаток от деления первого операнда на второй. Пример: 12 % 5 = 2.
Соответственно, если остаток от деления первого числа на второе равен 0, то первое число делится на второе.
Таким образом, код приобретает следующий вид:

arr = []
n = int(input("Введите количество элементов: "))
for i in range(0, n):
    ele = int(input())
    if ele % 2 == 0 and ele % 3 == 0:
        arr.append(ele)
a = sum(arr) / n
print(a)

Кстати, если вам нужно найти среднее арифметическое, то
sum(arr) нужно делить не на
n, а на
len(arr):

a = sum(arr) / len(arr)


Написание функции для фильтрации данных. Функция в качестве аргумента функции
Задача звучит следующим образом.
Создать функции query, select и field_filter для манипуляций с данными.
Эти функции должны предоставлять возможность выбирать необходимые столбцы и производить фильтрацию по этим столбцам. Аргументы функций заданы.
Пример:

friends = [
    {'name': 'Sam', 'gender': 'male', 'sport': 'Basketball'},
    {'name': 'Emily', 'gender': 'female', 'sport': 'volleyball'},
]
result = query(
    friends, select('name', 'gender', 'sport'), field_filter('sport', *('Basketball', 'volleyball')),
    field_filter('gender', *('male'))

print(result):
[{'gender': 'male', 'name': 'Sam', 'sport': 'Basketball'}]

Мой код:

from typing import Dict, Any, Callable, Iterable

DataType = Iterable[Dict[str, Any]]
ModifierFunc = Callable[[DataType], DataType]

def query(data: DataType, selector: ModifierFunc,
          *filters: ModifierFunc) -> DataType:
    pass

def select(*columns: str) -> ModifierFunc:
    keys = [columns]
    res = []
    for dict1 in field_filter():
        result = dict((k, dict1[k]) for k in keys if k in dict1)
        res.append(result)
    return res

def field_filter(column: str, *values: Any) -> ModifierFunc:
    x = []
    for i in range(0, len(DataType)):
        y = DataType[i]
        if y[column] == values:
            x.append(y)
    return x

Не имел до этой задачи опыта с использованием функций в качестве аргумента иной функции. Предположил, что каждая функция должна в результате вернуть откорректированный list, и следующая уже будет корректировать результирующий list и т.д. Но IDE подсказывает, что ожидается, что результатом функций должен быть не тип данных list, а Iterable[Dict[str, Any]]. В общем и целом, я запутался. Аргументы функций задан

Можно примерно так. С аннотациями разбирайтесь сами. Обратите внимание на вызовы, у вас там кортежи теряются - если он из одного элемента, над запятую ставить. И что-то еще было, забыл

def query(data: list[dict], selector: callable(list),
          *filters) -> list[dict]:
    res = []
    for x in data:
        if all(y(x) for y in filters):
            d = selector(x)
            res.append(d)
    return res

def select(*columns: str) -> callable:
    keys = [*columns]
    def selector(data):
        return {k: data[k] for k in keys if k in data}
    return selector

def field_filter(column: str, *values:str) -> callable:
    def filters(x):
        return column in x and x[column] in values
    return filters

friends = [
    {'name': 'Sam', 'gender': 'male', 'sport': 'Basketball'},
    {'name': 'Emily', 'gender': 'female', 'sport': 'volleyball'},
]
result = query(
    friends,
    select('name', 'gender', 'sport'),
    field_filter('sport', *('Basketball', 'volleyball')),
    field_filter('gender', *('male',)))

print(result)
# [{'gender': 'male', 'name': 'Sam', 'sport': 'Basketball'}]

Или так, чтоб вызов фильтра был более читабельным

def query(data: list[dict], selector: callable(list),
          filter) -> list[dict]:
    res = []
    for x in data:
        if filter(x):
            d = selector(x)
            res.append(d)
    return res

def select(*columns: str) -> callable:
    keys = [*columns]
    def selector(data):
        return {k: data[k] for k in keys if k in data}
    return selector

def field_filter(**kwarg) -> callable:
    def filters(x):
        for k, v in kwarg.items():
            if not(k in x and x[k] in v):
                return False
        return True
    return filters

friends = [
    {'name': 'Sam', 'gender': 'male', 'sport': 'Basketball'},
    {'name': 'Emily', 'gender': 'female', 'sport': 'volleyball'},
]
result = query(
    friends,
    select('name', 'sport'),
    field_filter(sport=('Basketball', 'volleyball'), gender=('male',))
)
print(result)


Перевести код Паскаль в Пайтон [закрыт]

Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

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

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

пытался самостоятельно, но увы ничего не получилось. Надеюсь на вашу помощь. Заранее спасибо.
Вот Паскаль код:

a:= 1;
For i := 2 to n do begin
  j := i; k := 0; l := 0;
  While j mod 2 = 0 do begin
    j := j div 2;
    k := k+1;
  end;
  a:= (a*j) mod 10;
  While j mod 5 = 0 do begin
    j := j div 5;
    l :=l+1
  end;
  a:= (a*j) mod 10;
  k := k-l;
  For i := k downto 1 do
    a:= (a*2) mod 10
  end;
end

Вот то что у меня получилось:

a=1
for i in range(2,n+1):
    j=i
    k=0
    l=0
    while j%2==0:
        j=j // 2;
        k+=1;
        a=(a*j)%10
    while j%5==0:
        j=j//5
        l+=1
        a=(a*j)%10
        k=k-l
        for i in range(k,0,-1):
            a=(a*2)%10


Даны два натуральных числа m и n (n<=9999, n<=9999 ). Проверить есть ли в записи числа m цифры, одинаковые с цифрами в записи числа n
Уровень моих знаний не велик поэтому я решил вот так:
Буду сильно благодарен, если решите с объяснением как новичку))спасибо заранее!
<code>
from math import*
m, n = map(int, input().split())
m4= m%10
m3= m//10%10
m2=m//100%10
m1= m//1000
n4= n%10
n3= n//10%10
n2=n//100%10
n1= n//1000
if m1==n1 or m1==n2 or m1== n3 or m1==n4 or m2==n1 or m2==n2 or m2==n3 or m2==n4 or
m3==n1 or m3==n2 or m3==n3 or m3==n4 or m4==n1 or m4==n2 or m4==n3 or m4==n4:
print("YEs")
else:
print("No")
</code>

для нахождения пересечения (одинаковых цифр) удобно использовать тип данных set (множество), для этого у множеств есть метод intersection. но сначала надо сделать из числа множество, то есть разобрать его на цифры. для этого можно воспользоваться циклом:

m1, n1 = set(),set()  # пустые множества
while m:              # разбираем на цифры число m
    m1|={m%10}        # добавляем в множество последнюю цифру
    m//=10            # отбрасываем последнюю цифру
while n:
    n1|={n%10}
    n//=10
print('Yes' if n1 & m1 else 'No')  # если есть пересечение печатаем Yes

то же самое можно сделать с помощью рекурсивной функции:

f = lambda n: {n} if n<10 else {n%10}|f(n//10)  # делаем из числа множество
print('Yes' if f(n)&f(m) else 'No')