Ошибка в коде бота для телеграмм

import telebot
bot = telebot.Telebot("%57772436XPhWiST72блюр-токенаqBaUnsqU%")
@bot.message_handler(content_types=['text'])
if message.text == "Привет":
    bot.send_message(message.from_user.id, "Привет, чем я могу тебе помочь?")

Ошибка:
SyntaxError: invalid syntax (указано стрелочкой на
if):

    if message.text == "Привет":
    ^
SyntaxError: invalid syntax

Я не понимаю почему в ошибке синтаксиса указано на
if, где ошибка, как исправить?

Ошибка возникает потому, что

@bot.message_handler(content_types=['text'])

– это декоратор функции.
И после декоратора ожидается функция, которую он декорирует, обычно ее определение начинающие ключевым словом
def. Решительно не
if.

Как ваш код исправить:

@bot.message_handler определяет фильтры, которые сообщение (message) должно выполнить. Когда их оно выполняет, декорированная функция вызывается (причем принятое сообщение ее передано как ее аргумент).
Значит, вам нужно создать функцию с одним аргументом, которая будет выполнять ваш код:

import telebot

bot = telebot.Telebot("%57772436XPhWiST72блюр-токенаqBaUnsqU%")

@bot.message_handler(content_types=['text'])
def some_name(message):
    if message.text == "Привет":
        bot.send_message(message.from_user.id, "Привет, чем я могу тебе помочь?")


Как найти координаты объекта на фото, если на фото только этот объект и вокруг белый фон?
Подскажите пожалуйста, как найти координаты объекта на фото? На фото только один этот объект, а всё остальное белый фон

Выделяете все элементы изображения, отличающиеся от "белого фона". С точки зрения программирования - получаете двумерный массив, имеющий нулевые значения для тех пикселей, цвет которых "белый" и единицы для тех, у которых цвет "не белый". Далее находите "центр массы" выделенного изображения или говоря на программистском языке - центроид фигуры, образованной единицами указанной матрицы. Координаты центроида и можно считать "координатами вашего объекта на фото".
Все подсказки теперь у вас есть - и ключевые слова для Гуугл-запроса, и способ переноса математического решения на вашу конкретную задачу. Надеюсь - далее справитесь самостоятельно. Останутся вопросы -  задавайте.


Как содержимое файла добавить в переменные

v = open(u"/storage/emulated/0/PyTycoon/Variables.txt","r")
money = v.readline()
s1 = v.readline()
s2 = v.readline()
s3 = v.readline()
L = v.readline()

Вот что находится в файле:

0
6
1000
10000
1

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

with file = open('data.txt') as file:
    s1, s2, s3, s4, s5 =  map(int, file.readlines())


Перевести время в текст
Есть значение
datetime.time(16, 0) Нужно его перевести в строку
"16:00"

Думаю вам это поможет
<code>
import datetime

res = str(datetime.time(16, 0))[:-3]
print(res)
</code>


Python. Нужна помощь связаная с классами
Нужна помощь вот с таким заданием ->

Реализовать класс Person, отображающий запись в книге контактов. Класс
имеет 4 атрибута:

surname - строка - фамилия контакта (обязательная)
first_name - строка - имя контакта (обязательно)
nickname – строка – псевдоним (опциональный)
birth_date – объект datetime.date (обязательный)

Каждый вызов класса должен создавать экземпляр (инстанс) класса из
указанными атрибутами. Также класс имеет 2 метода:

get_age() - считает возраст человека в полные годы на дату вызова и возвращает строку вида: "25";
get_fullname() - возвращает строку, отображающую полное имя (фамилия + имя) контакта; Примечание: при создании атрибута birth_date из строки типа "2002-12-31" необходимо:
определить какая информация необходима для создания объекта datetime.date,
получить эти данные из строки
разобрать ее (достать из нее отдельно, год, месяц, число),
на основании этой информации создать специальный объект datetime.date,
поместить этот спец.объект в атрибут экземпляра класса

Написать функцию modifier(filename), принимающую имя файла и должна:

прочесть данные из переданного файла; – создать объекты класса Person на основании полученных данных;
модифицировать данные в файле: а) добавить графу полного имени (fullname) после графы с именем (name) б) добавить графу с возрастом
(age) в конец. На выходе получить файл расширенный указанным образом.

Вот что написано у меня пока что ->
<code>
class Person:

    def __init__(self, surname, first_name,  nickname,  birth_date):
        self.surname = surname
        self.first_name = first_name
        self.nickname = nickname
        self.birth_date = birth_date

    def __init__(self, surname, first_name,  birth_date):
        self.surname = surname
        self.first_name = first_name
        self.birth_date = birth_date
</code>
Очень мало написано, но остановился из за "birth_date", не понимаю как правильно реализовать его и последующие действия связаные с ним

В Python есть модуль
datetime. Он предоставляет классы для обработки времени и даты разными способами.
Для начала с ним тебе нужно его импортировать

import datetime

birth_date = datetime.date(2005, 7, 14)

Первый аргумент - год рождения, второй - месяц, третий - день
Если у тебя дата в строке, то можешь воспользоваться методом
.split(), который разбивает строку по разделителю
Тогда будет

li = [int(x) for x in '2015-09-15'.split('-')]

birth_date = datetime.date(*(li))

Звёздочка перед
li - знак распаковки. Означает то, что все элементы массива передадутся как отдельные аргументы (год, месяц, день)
По поводу обязательных и необязательных аргументов. В класс (как и в функции) агрументам можно задать "начальное" значение. Оно применится в случае, когда этот аргумент не передали совсем

class Person:

def __init__(self, surname='Иван', first_name='Иванов',

nickname=Ivan',  birth_date = '01-01-2001'):


Проблема - файл закрывается, если нажать Enter 2 раза в косольной программе Python
<code>
v = open(u"/storage/emulated/0/PyTycoon/Variables.txt","w")
#Variables
L = 1
k = 0
s1 = 5
money = 0
#Functions
def shops(k):
    k = s1 * 2
    return(k)
#Commands
while True:
    z = input()
    if z == ".":
        money = money + L
    elif z == "balance" or z == "b":
        print(f"balance: {money}")
    elif z == "shop" or z == "sh":
        print(f"------Shop------\nshovel(+5) - {s1}$")
    elif z == "buy shovel" and money >= s1:
        money = money - s1
        L = L + 5
        s1 = shops(k)
        print(f"balance: {money}")
    elif z == "save" or "s":
        v.write(str((money)))
        v.close()
</code>
Проблема:
Файл закрывается, если нажать Enter 2 раза. Как сделать, чтобы его можно было нажимать бесконечно?

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

elif z == "save" or "s":

да и неправильно оно составлено, замените на

elif z in ("save", "s"):

А у вас по сути:

if "s":
    print("всегда")


Как добавить условие в конструкцию if

elif z == "buy shovel":
        money = money - s1
        L = L + 5
        s1 = shops(k)
        print(f"balance: {money}")

z - это ввод
money - баланс
s1 - цена предмета
shops(k) - функция, которая
увеличивает цену предмета
L - +сила за предмет
Вопрос:
Как сделать, чтобы нельзя было купить товар когда
money меньше
s1 ?

ну дополните свое условие вторым
<code>
elif z == "buy shovel" and money >= s1:
</code>


При записи переменной в файл интерпритатор выдаёт ошибку

v = open(u"/storage/emulated/0/PyTycoon/Variables.txt","w")
#Variables
l = 1
k = 0
s1 = 5
money = 0
#Commands
while True:
    z = input()
    if z == ".":
        money = money + 1
    elif z == "balance" or z == "b":
        print(f"balance: {money}")
    elif z == "shop" or z == "sh":
        print(f"------Shop------\nshovel(+5) - {s1}$")
    elif z == "buy shovel":
        money = money - s1
        l = l + 5
        print(f"balance: {money}")
    elif z == "save" or "s":
        v.write(money)

Суть работы:
Когда пишешь точку, в переменную
money добавляется единица. Когда пишешь save, в текстовый файл должна записаться переменная.
Проблема:
Когда пытаюсь сохранить переменную файл выдает ошибку TypeError: write() argument must be str, not int

Собственно в ошибке всё и написано, записывать нужно
str, a
money у вас
int
Поэтому в последней строчке замените
v.write(money) на
v.write(str(money))


Что означает *[int(i)?
Прохожу курс на степике и попалась одна задачка. После неудачных попыток полез в интернет и нашёл вот такое решение:
<code>
print(*[int(i)*'|' for i in input().split()], sep='\n')
</code>
Оно работает, но я не понимаю как. Конкретно не понимаю *[int(i), что означает в начале умножение списка? Мы говорим, что переменная i, это число, затем умножаем на строку | и в цикле число разбиваем на подстроки с помощью split.
Сама задача: Напишите программу, которая получает на вход список целых чисел, разделенных через пробел и на их основе строит линейные диаграммы.

print(*[int(i)*'|' for i in input().split()], sep='\n')

итак:

input() - получает ввод от пользователя (в виде строки)

.split() - разбивает строку на слова (через пробел или иной разделитель типа табуляции) и формирует их в список

for i in input().split() - пройти в цикле по всем словам из строки

int(i) - преобразовать слово в число (считаем что строка и есть число иначе будет ошибка)

int(i)*'|' - сформировать строку из символа
| повторённого
i раз
например
5 * 'a' даст
'aaaaa'

[value for v in arr] - формирует новый массив в который входит значение
value вычисленное для каждого элемента
v массива
arr
т.е.

[int(i)*'|' for i in input().split()] - формирует список строк, содержащих
|, повторённый
i раз

print(*arr) - выводит на экран все элементы списка
arr как отдельные элементы

sep='\n' - параметр функции
print о том, что между двумя отображаемыми значениями надо поставить
\n (т.е. каждое значение вывести с новой строки)
Таким образом алгоритм делает следующее:

получает строку от пользователя
разбивает ее на слова
каждое слово переводит в число
для каждого числа формирует строку из повторяющихся
| (кол-во повторений * равно указанному числу)
из полученных строк формирует список
выводит каждый элемент списка на экран с новой строки

P.S.
тот же функционал, но другими способами:
вариант 1 (код покороче, сразу формируем строку):

print('\n'.join(int(i)*'|' for i in input().split()))

вариант 2 (для любителей изврата):

import re
print(re.sub(r'\s*(\d+)\s*', lambda m: int(m[0])*"|"+'\n', input()))


Вычисление квартилей numpy
Сейчас начал учить статистику и дошел до квартилей. И столкнулся с проблемой, что numpy вычисляет квартили как-то странно. Насколько я понял, чтобы найти нижний квартиль, нужно взять часть данных до медианы и найти медиану там. Вот пример:

arr = np.arange(1, 11)
print(f'{np.quantile(arr, 0.25)} - 1st Qu.')
print(f'{np.quantile(arr, 0.5)} - median')
print(f'{np.quantile(arr, 0.75)} - 3st Qu.')

3.25 - 1st Qu.
5.5 - median
7.75 - 3st Qu.

Так как число элементов четно, то медиана здесь 5.5, тут все понятно. Но вот что с первым квантилем? Мы получаем часть 1, 2, 3, 4 - здесь медиана 2.5, те не сходится. Я подумал что надо брать еще часть значений: 1, 2, 3, 4, 5 - тут медиана 3. Аналогично с 3 квартилем. Я гуглил, но везде написано, что считаю я все верно. Я проверял на цифрах, которые были в уроке и там все хорошо:

np.array([157,159,161,164,165,166,167,167,167,168,169,169,170,170,170,171,171,172,172,172,172,173,173,175,175,177,178,178,179,185])

# Первый квартиль
print(np.quantile(hights, 0.25))
# Второй квартиль
print(np.quantile(hights, 0.50))
# Третий квартиль
print(np.quantile(hights, 0.75))
# Четвертый квартиль
print(np.quantile(hights, 1))

167.0
  170.5
  173.0
  185

В коментах к уроку люди тоже не понимают, почему иногда не работает вычисление, точнее работает, но не как объясняли. Знатоки - помогите пожалуйста!

По применённому методу:
Имеем диапазон индексов
0..n-1
При нечётном
n медиана располагается на индексе
(n-1)/2, при чётном - посередине между индексами
(n-2)/2 и
n/2, её значение - полусумма
(a[(n-2)/2] + a[n/2]) / 2. Это, как я понимаю, уже ясно.
Теперь квантиль
q - он должен находиться на индексе
quantile(q) = q*(n-1) = g = i + f, где
i - целая часть числа
g,
f - дробная часть этого числа.  Значение квантиля при линейном методе (по умолчанию) равно
a[i]*(1-f) + a[i+1]*f
Можно проверить для первого примера.

n = 10
n-1 = 9
q=0.25 =>
g = 9*0.25 = 2.25 = 2 + 0.25
                    ^     ^
                    i     f

a[i] * (1- f) + a[i+1] * f =
 3   *  0.75  +   4    * 0.25 = 3.25


Помогите преобразовать ответ из списка в строку
Пользователь по команде “ads” может добавить новую полку

def ads():
    shelf = input("Введите номер полки: ")
    for direct in directories.items():
        if shelf in direct[0]:
            print(f"Такая полка уже существует. Текущий перечень полок:
{list(directories.keys())}")
            break
    else:
        directories[shelf] = []
        print(f"Полка добавлена. Текущий перечень полок: {list(directories.keys())}")

ads()

Введите номер полки: 5
Такая полка уже существует. Текущий перечень полок: ['1', '2', '3', '4', '5']

Нужно убрать квадратные скобки... понимаю, что нужен метод
join... отдельно получается записать вывод полок строкой :
print(",".join(directories.keys())); а в программе чет никак...что куда джойнить надо?

Простейшее, как вы и задумывали
<code>
print(f"Полка добавлена. Текущий перечень полок: {', '.join(list(directories.keys()))}")
</code>
в f-строке вы спокойно можете применять такого типа обработки, в этом нет ничего зазорного.


Что это за модуль src_rc?
После создания виджета в Qt Designer и переноса в Python с помощью pyuic5 в самом конце кода образовался непонятный импорт:

import src_rc.Вопрос: откуда он взялся и зачем он нужен. Если попробовать его установить pip его не находит.
Вот код:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1246, 698)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        MainWindow.setMinimumSize(QtCore.QSize(1246, 698))
        MainWindow.setMaximumSize(QtCore.QSize(1246, 698))
        MainWindow.setStyleSheet("background: #191919;")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.nav_menu = QtWidgets.QGroupBox(self.centralwidget)
        self.nav_menu.setEnabled(True)
        self.nav_menu.setGeometry(QtCore.QRect(0, 0, 269, 698))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.nav_menu.sizePolicy().hasHeightForWidth())
        self.nav_menu.setSizePolicy(sizePolicy)
        self.nav_menu.setMinimumSize(QtCore.QSize(269, 0))
        self.nav_menu.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.nav_menu.setStyleSheet("border: 0;\n"
"background: #151515;")
        self.nav_menu.setObjectName("nav_menu")
        self.btn_add_folder = QtWidgets.QLabel(self.nav_menu)
        self.btn_add_folder.setGeometry(QtCore.QRect(218, 30, 24, 31))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.btn_add_folder.sizePolicy().hasHeightForWidth())
        self.btn_add_folder.setSizePolicy(sizePolicy)
        self.btn_add_folder.setMinimumSize(QtCore.QSize(24, 31))
        self.btn_add_folder.setMaximumSize(QtCore.QSize(24, 31))
        self.btn_add_folder.setText("")
        self.btn_add_folder.setPixmap(QtGui.QPixmap("F:/Projects/Python/.pyqt/Tasker/src/img/add_folder.svg"))
        self.btn_add_folder.setObjectName("btn_add_folder")
        self.logo = QtWidgets.QLabel(self.nav_menu)
        self.logo.setGeometry(QtCore.QRect(20, 20, 142, 52))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.logo.sizePolicy().hasHeightForWidth())
        self.logo.setSizePolicy(sizePolicy)
        self.logo.setMaximumSize(QtCore.QSize(142, 52))
        self.logo.setText("")
        self.logo.setPixmap(QtGui.QPixmap(":/src/img/logo.svg"))
        self.logo.setObjectName("logo")
        self.buttons = QtWidgets.QGroupBox(self.nav_menu)
        self.buttons.setGeometry(QtCore.QRect(23, 93, 219, 583))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.buttons.sizePolicy().hasHeightForWidth())
        self.buttons.setSizePolicy(sizePolicy)
        self.buttons.setMaximumSize(QtCore.QSize(219, 583))
        self.buttons.setTitle("")
        self.buttons.setObjectName("buttons")
        self.btn_menu1 = QtWidgets.QPushButton(self.buttons)
        self.btn_menu1.setGeometry(QtCore.QRect(0, 0, 219, 37))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.btn_menu1.sizePolicy().hasHeightForWidth())
        self.btn_menu1.setSizePolicy(sizePolicy)
        self.btn_menu1.setMaximumSize(QtCore.QSize(219, 37))
        font = QtGui.QFont()
        font.setFamily("Inter")
        font.setPointSize(-1)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.btn_menu1.setFont(font)
        self.btn_menu1.setStyleSheet("background: #1490AA;\n"
"border-radius: 11px;\n"
"font-family: \'Inter\';\n"
"font-style: normal;\n"
"font-weight: 400;\n"
"font-size: 16px;\n"
"line-height: 19px;\n"
"text-align: left;\n"
"color: #FFFFFF;\n"
"padding: 8px 0 8px 15px;")
        self.btn_menu1.setObjectName("btn_menu1")
        self.btn_menu2 = QtWidgets.QPushButton(self.buttons)
        self.btn_menu2.setGeometry(QtCore.QRect(0, 47, 219, 37))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.btn_menu2.sizePolicy().hasHeightForWidth())
        self.btn_menu2.setSizePolicy(sizePolicy)
        self.btn_menu2.setMaximumSize(QtCore.QSize(219, 37))
        self.btn_menu2.setStyleSheet("background: #282828;\n"
"border-radius: 11px;\n"
"font-family: \'Inter\';\n"
"font-style: normal;\n"
"font-weight: 400;\n"
"font-size: 16px;\n"
"line-height: 19px;\n"
"text-align: left;\n"
"color: #FFFFFF;\n"
"padding: 8px 0 8px 15px;")
        self.btn_menu2.setObjectName("btn_menu2")
        self.btn_menu3 = QtWidgets.QPushButton(self.buttons)
        self.btn_menu3.setGeometry(QtCore.QRect(0, 94, 219, 37))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.btn_menu3.sizePolicy().hasHeightForWidth())
        self.btn_menu3.setSizePolicy(sizePolicy)
        self.btn_menu3.setMaximumSize(QtCore.QSize(219, 37))
        self.btn_menu3.setStyleSheet("background: #282828;\n"
"border-radius: 11px;\n"
"font-family: \'Inter\';\n"
"font-style: normal;\n"
"font-weight: 400;\n"
"font-size: 16px;\n"
"line-height: 19px;\n"
"text-align: left;\n"
"color: #FFFFFF;\n"
"padding: 8px 0 8px 15px;")
        self.btn_menu3.setObjectName("btn_menu3")
        self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
        self.stackedWidget.setGeometry(QtCore.QRect(269, -20, 977, 719))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.stackedWidget.sizePolicy().hasHeightForWidth())
        self.stackedWidget.setSizePolicy(sizePolicy)
        self.stackedWidget.setMinimumSize(QtCore.QSize(977, 719))
        self.stackedWidget.setMaximumSize(QtCore.QSize(977, 719))
        self.stackedWidget.setObjectName("stackedWidget")
        self.page_3 = QtWidgets.QWidget()
        self.page_3.setObjectName("page_3")
        self.stackedWidget.addWidget(self.page_3)
        self.page_4 = QtWidgets.QWidget()
        self.page_4.setObjectName("page_4")
        self.stackedWidget.addWidget(self.page_4)
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        self.stackedWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.btn_menu1.setText(_translate("MainWindow", "Все задачи"))
        self.btn_menu2.setText(_translate("MainWindow", "Папка 1"))
        self.btn_menu3.setText(_translate("MainWindow", "Папка 2"))
import src_rc

Это файл в котором хранятся иконки, картинки вставленные на форму через дизайнер.


Как реализовать перелистывание списка в aiogram с помощью inline кнопок?
На входе бот отправляет сообщение со списком вопросов, но если их много то возникает проблема чтения. Как сделать так чтобы пользователь мог листать список ? И как хранить этот большой список ?

Можешь сделать список и при помощи ниже приведенных способов переключать при помощи id
<code>
@dp.callback_query_handler(text_startswith="prev")
async def prev_page(call: types.CallbackQuery):
    try:
        await call.answer()
        data = int(call.data.split(":")[1]) - 1

        markup = InlineKeyboardMarkup().add(
            InlineKeyboardButton("PREV", callback_data=f"prev:{data}"),
            InlineKeyboardButton(str(data), callback_data="null"),
            InlineKeyboardButton("NEXT", callback_data=f"next:{data}"),
        )

        news_dict = news_dict[:6]
        await call.message.edit_text(news_dict[data], reply_markup=markup)
    except:
        pass

@dp.callback_query_handler(text_startswith="next")
async def next_page(call: types.CallbackQuery):
    await call.answer()
    data = int(call.data.split(":")[1]) + 1
    with open("all_posts.json") as file:
        news_dict = json.load(file)
    markup = InlineKeyboardMarkup().add(
        InlineKeyboardButton("PREV", callback_data=f"prev:{data}"),
        InlineKeyboardButton(str(data), callback_data="null"),
        InlineKeyboardButton("NEXT", callback_data=f"next:{data}"),
    )
    await call.message.edit_text(news_dict[data], reply_markup=markup)

@dp.message_handler(Text(equals="Список"))
async def get_5_news(message: types.Message):
    with open("all_posts.json") as file:
        news_dict = json.load(file)
        markup = InlineKeyboardMarkup().add(
                        InlineKeyboardButton("PREV", callback_data=f"prev:0"),
                        InlineKeyboardButton("0", callback_data="null"),
                        InlineKeyboardButton("NEXT", callback_data=f"next:1")
                    )
        await message.answer('text', reply_markup=markup)
</code>


Определить принадлежность ветки к каналу
Бот считает сообщения из каналов и записывает их в бд, но из веток этих каналов посчитать не может. Подскажите как определить что ветка принадлежит к каналу и посчитать из нее сообщение
<code>
@bot.event
async def on_message(message):
    cur.execute(f"SELECT userid FROM users WHERE userid={message.author.id}")
    if cur.fetchone() is None:
        cur.execute(
            f"INSERT INTO users VALUES ({message.author.id}, '{message.author.name}', 0, 0, 0, 0, 0)")
        base.commit()
    elif message.channel.id == channel:
        if len(message.content) > 5:
            for msg in cur.execute(f"SELECT channel FROM users WHERE userid={message.author.id}"):
                res = msg[0] + 1
                cur.execute(f"UPDATE users SET channel = {res} WHERE userid={message.author.id}")
                print(f'Юзер: {message.author.name} всего написал {res} сообщений в канал {message.channel.name} ')
        await bot.process_commands(message)
        base.commit()
</code>

Всем спасибо

elif message.channel.id == channel or hasattr(message.channel, 'parent_id') and message.channel.parent_id == channel:


Джанго сессии. Перенос последних просмотренных товаров в шаблон
Я хочу сделать функцию показа последних просмотренных товаров через сессии. Проблема в том, что я не могу нормально отфильтровать эти товары. Они идут не по порядку. Я вижу, что все дело в строке
recently_viewed_products = Product.objects.filter(slug__in=request.session['recently_viewed']), ибо выводя в консоль "оригинальный список"(
print(request.session['recently_viewed'])) работает все так, как мне и нужно.
Я недавно начал изучать сессии и пока не понимаю, как по другому переписать логику работы, чтобы работало все так, как мне нужно.
Вот сам код в views.py

class Detail(DetailView):
model = Product
template_name = 'app/detail.html'
context_object_name = 'product_detail'
slug_url_kwarg = 'product_slug'

def get(self, request, *args, **kwargs):
    global recently_viewed_products
    recently_viewed_products = None
    # request.session['recently_viewed'].clear()
    if 'recently_viewed' not in request.session:
        request.session['recently_viewed'] = [self.kwargs['product_slug']]
    else:
        if self.kwargs['product_slug'] in request.session['recently_viewed']:
            request.session['recently_viewed'].remove(self.kwargs['product_slug'])
            request.session['recently_viewed'].append(self.kwargs['product_slug'])
            print(request.session['recently_viewed'])
        else:
            request.session['recently_viewed'].append(self.kwargs['product_slug'])
            print(request.session['recently_viewed'])

    recently_viewed_products = Product.objects.filter(slug__in=request.session['recently_viewed'])
    print(recently_viewed_products)
    request.session.modified = True

    return super().get(request, *args, **kwargs)

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    Product.objects.filter(slug=self.kwargs['product_slug']).update(views=F('views') + 1)
    context['recently'] = recently_viewed_products
    return context

def get_queryset(self):
    return Product.objects.filter(draft=False)

В общем решил проблему так. Сначала дополнил модель товара новым полем
last_visit = models.TimeField(blank=True, null=True). Далее в views.py импортировал datetime(
from datetime import datetime). В контексте вьюхи самого товара прописал обновление поля last_visit -
self.object.last_visit = datetime.now() self.object.save(), что бы время обновлялось при каждом обращении к странице. В recently_viewed_products добавил order_by, в нем сортировку по полю last_visit -
recently_viewed_products = Product.objects.filter(slug__in=request.session['recently_viewed']).order_by('last_visit')


TLS сокет на python. Получил я шифрование пересылаемых данных или только проверку сертификатов при соединении?
У меня есть шаблон кода из учебника по теме TLS сокетов и применения алгоритма вычисления ключа шифрования по Диффи-Хеллману.
В блоке обработчика входящих сообщений мы видим такую строку:

encrypted_key = conn.recv(4096).decode()

что прямо нам говорит: на вход мы получаем зашифрованный ключ. Дальше надо его расшифровать, и делай чего хочешь. Так вот, я никак не могу определиться, что от меня хотел автор учебника, и как это надо сделать-то грамотно? В том плане, что за ключ я по плану должен получить? Т.е., надо прописать на стороне клиента алгоритм генерации симметричного ключа и его шифрование? Но тогда это уже ненадежно и не относится к Диффи-Хеллману...
Данный вопрос истекает из следующей непонятки: а чего я вообще добился таким кодом? Создал сокет, создал обертку TLS и завернул сокет в обертку. Я точно проверил сертификаты при подключении, а значит обменялся ими. Но я не утверждал алгоритма шифрования и не нашел ничего подобного в документации к библиотеке, значит текущая обертка TLS лишь позволяет автоматизировать обмен сертификатами? Блок генерации ключа по Диффи-Хеллману нужно прописать вручную (вручную - отсылая команды к openssl)? Или для этого все же есть предустановленные методы ? Или я что-то где-то упустил?
Полный код сервера:

import socket
import ssl
import threading

client_cert = 'path/to/client.crt'
server_key = 'path/to/server.key'
server_cert = 'path/to/server.crt'
port = 8080

context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.verify_mode = ssl.CERT_REQUIRED
context.load_verify_locations(cafile=client_cert)
context.load_cert_chain(certfile=server_cert, keyfile=server_key)
context.options |= ssl.OP_SINGLE_ECDH_USE
context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2

def handler(conn):
       encrypted_key = conn.recv(4096).decode()
      #------------------------------------------------
      # Добавьте сюда код для расшифровки
      #------------------------------------------------
      conn.send(decrypted_key.encode())
      conn.close()

with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
      sock.bind(('', port))
      sock.listen(5)
      with context.wrap_socket(sock, server_side=True) as ssock:
            while True:
                   conn, addr = ssock.accept() 
                   print(addr)
                   handlerThread = threading.Thread(target=handler, args=(conn,))
                   handlerThread.start()

encrypted_key, decrypted_key не относятся к связи. это просто какие-то данные. Их можно использовать для установки сеанса шифрованной связи, но явно на это ничего не указывает. Скорее всего просто "секретные" данные.
А вот wrap_socket делает обмен сертификатами, генерацию сессионных ключей и обмен ими по Диффи-Хеллману. В ssock не передаются никакие ключи и сертификаты - всё это убрано в контекст ssl. Данные попавшие в ssoсk шифруются и отправляются через sock.


Помогите разобраться с функцией modify_list
Напишите функцию modify_list(l), которая принимает на вход список целых чисел, удаляет из него все нечётные значения, а чётные нацело делит на два. Функция не должна ничего возвращать, требуется только изменение переданного списка, например:

lst = [1, 2, 3, 4, 5, 6]
print(modify_list(lst))  # None
print(lst)               # [1, 2, 3]
modify_list(lst)
print(lst)               # [1]

lst = [10, 5, 8, 3]
modify_list(lst)
print(lst)               # [5, 4]

Вот что у меня получилось, но это почему то не работает, выдает ошибку: IndexError: list index out of range

def modify_list(l):
    ll=[]
    for x in l:
        if x%2==0 and x!=0:
            a=int(x/2)
            ll.append(a)
    b=len(ll)
    del l[b:]
    for y in l:
        l[y]=ll[y]
ls=[int(i) for i in input().split()]
print(ls)
modify_list(ls)
print(ls)

помогите пожалуйста разобраться и понять, что я делаю не так.

Весь этот кусок:

    b=len(ll)
    del l[b:]
    for y in l:
        l[y]=ll[y]

Можно заменить на такой:

l[:] = ll

Он делает тоже самое (копирует новый список в старый), но гораздо короче.
А так то у вас проблема была в том, что вы перебирали не индексы списка, а сами элементы списка. Это чинится так:

# for y in l:
for y in range(b):

Но, повторюсь, тоже самое можно сделать гораздо короче.


Как записать две csv-таблицы на разные листы через pandas в Python?
Нужно два листа записать на отдельные страницы в CSV. Сейчас записываю только одну

frame = pandas.DataFrame(*лист для записи*)
fileWrite = open(path, 'a', encoding='UTF-8', newline='')
frame.to_csv(fileWrite, index=False, sep=';')

Как записать вторую таблицу на другую страницу в этот же файл?
Знаю про
ExcelWriter, но он не работает с CSV

Нужно -  это хорошо. Вот только вы хотите невозможного. Формат СSV не поддерживает многостраничные файлы. В этом легко убедиться самому. Создайте хlsх файл. Сделайте его многостраничным, а потом попробуйте его сохранить как сsv. Обнаружите, что вам предложат либо сохранять каждый лист в отдельный файл, либо использовать другой формат, который поддерживает многостраничность.
Так что если позарез нужна многостраничность -  используйте to_excel() и формат хlsх. Если позарез нужен csv -  то пишите в этом формате  с помощью to_csv() но в разные файлы.  А "скрестить бульдога с носорогом" не удастся.


Как парсить json если в нем есть значения с кавычкой?
Пробую таким способом:

data = response.json()
for item in data['result']['list']:
    print(item['Id'])

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

KeyError: 'Id'

структура json такая:

{
  "result": {
    "Info": {
      "Msg": {
        "is": 0
      }
    },
    "total": 2,
    "list": [
      {
        "Id": 111,
        "name": "111111",
        "host": {
          "is": 0
        }
      },
      {
        "Id": 222,
        "name": "222"222",
        "host": {
          "is": 0
        }
      }
    ]
  }
}

Вывод:

111
Traceback (most recent call last):
  File "C:\test.py", line 26, in <module>
    print (*item['Id'])
KeyError: 'Id'

Из-за того что в ключе значения
name есть ковычка, я не могу получить вывод без ошибки

Не валидный
json в вопросе. При приведении данной структуры к словарю вы бы получили ошибку:

json.decoder.JSONDecodeError: Expecting ',' delimiter....

Но у вас этого нет. Ошибка говорит о другом.
Чтобы убрать исключение при обращении к несуществующему ключу, используйте метод
get

data = response.json()
for item in data['result']['list']:
    print(item.get("Id"))

Этот же метод можете использовать для условий, например

for item in data['result']['list']:
    if item.get("Id"):
         print(item.get("Id"))

То есть при вызове метода если ключ не найден, то просто вернется
None и данная ветка условия не сработает. В этом случае будьте осторожны, поскольку значение под этим ключом тоже может быть
None. В таком случае ветка тоже не сработает


Проблема с сортировкой списка
подскажите в чем проблема. Есть папка с файлами
F_1.jpg, F_2.jpg, F_3.jpg ... и т.д. более ста тыщ по порядку.
Делаю список

b = [i for i in os.listdir(path='C:/Users/vovad/Desktop/Screen/Screenshots/')]

Далее делаю сортировку

b.sort()

Получаю вот такую фигню вообще не по порядку. В чем может быть проблема?

'F_0.jpg',
 'F_1.jpg',
 'F_10.jpg',
 'F_100.jpg',
 'F_1000.jpg',
 'F_10000.jpg',
 'F_100000.jpg',
 'F_100001.jpg',
 'F_100002.jpg',
 'F_100003.jpg',
 'F_100004.jpg',
 'F_100005.jpg',
 'F_100006.jpg',
 'F_100007.jpg',
 'F_100008.jpg',
 'F_100009.jpg',
 'F_10001.jpg',
 'F_100010.jpg',
 'F_100011.jpg',
 'F_100012.jpg',
 'F_100013.jpg',
 'F_100014.jpg',
 'F_100015.jpg',
 'F_100016.jpg',
 'F_100017.jpg',


Написать цикла для перебора символов в нескольких строчках [закрыт]

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

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

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

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

Дано N строк, нужно написать цикл так, чтобы перебрать каждый символ в каждой строке. Понимаю, что нужен вложенный цикл, чтобы сначала пройтись по количеству строк, а потом по каждой строке отдельно, но не понимаю как записать - на вложенном цикле, где я хочу пройти по длине строки выдает ошибку
string indices must be integers. В строки могут входить как цифры, так и пробелы и буквы.

N = int(input())  # количество строк
strings_arr = []

for string in range(N):
    strings_arr.append(str(input()))  # ввод строки и добавление ее в список

for string in strings_arr:  # проходимся по строкам в словаре
    for letter in string:  # проходимся по буквам в строке
        print(letter)  # выводим букву


Как сделать чтобы определенный код/функция срабатывал при запуске/закрытии бота Aiogram 3
Во втором aiogram'e есть два параметра при старте поллинга и запуске вебхука, это
on_startup и
on_shudown, которые срабатывают при запуске и завершении бота.
Как сделать это на третьей версии aiogram'a так как там, нету таких параметров при запуске?

import asyncio

from loader import dp, bot

async def on_startup(dispatcher):
    print("Бот запущен")

async def main():
    # способ для пропуска старых апдейтов для 3 версии айограма
    await bot.delete_webhook(drop_pending_updates=True)
    # собственно способ зарегистрировать функцию которая сработает при запуске бота
    dp.startup.register(on_startup)
    # в allowed_updates можно передать вызов метода resolve_used_update_types() от диспетчера,
    # который пройдёт по всем роутерам, узнает, хэндлеры на какие типы есть в коде,
    # и попросить Telegram присылать апдейты только про них
    # короче просто делайте так же
    await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())

@dp.message()
async def random_handler(message: types.Message):
    pass

if __name__ == "__main__":
    asyncio.run(main())


Как выровнять панель rich?
Я создал панель с помощью rich

from rich.panel import Panel
from rich import print

print(Panel.fit("Hello world!"))

и мне нужно ее выровнять по центру, я пробывал добавить параметр justify, но вылазит ошибка

Traceback (most recent call last):
  File "D:\failes\все\scripts\pnla.py", line 4, in <module>
    print(Panel("Hello world!"), justify="center")
TypeError: print() got an unexpected keyword argument 'justify'

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

У меня получилось через
align.Align:

from rich.panel import Panel
from rich.align import Align
from rich import print

print(Align(Panel("Hello world!"), align='center'))

Вывод:

                                                 ╭──────────────╮
                                                 │ Hello world! │
                                                 ╰──────────────╯


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

Рабочее время сотрудника Alex c 8 до 17 в 8, 17, 14 часов сотрудник занят

а получаю:

Рабочее время сотрудника Alex c 8 до 17 в 9, 10, 11, 12, 13, 15, 16 часов сотрудник занят

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

class Worker:
def __init__(self, name, worktime):
    self.name = name
    self.worktime = worktime

def test_input(self, busy=None):
    # if busy[0] < self.worktime[0] or busy[1] > self.worktime[1]:
    #     raise ValueError('Время занятости сотрудника не может быть больше времени его работы')
    return busy

def main(self, busy=None):
    if busy:
        # self.test_input(busy)
        all_time = []
        time_busy = []
        for i in range(self.worktime[0] - 1, self.worktime[1]):
            x = i + 1
            all_time.append(x)
        for i in range(len(busy)):
            # busy = busy[i]
            # i = i + 1
            time_busy.append(busy[i])
            s = set(time_busy) & set(all_time)
            all_time = [i for i in all_time if i not in s]
        return f'Рабочее время сотрудника {self.name} c {self.worktime[0]} до {self.worktime[1]}' \
               f' в {", ".join(map(str, all_time))} часов сотрудник занят'
    else:
        return f'Свободное время сотрудника {self.name} c {self.worktime[0]} до {self.worktime[1]}'

busy_time = [8, 17, 14]  # ввод времени когда сотрудник занят
Alex = Worker('Alex', [8, 17])  # ввод сотрудника и времени его работы
test = Worker.main(Alex, busy_time)  # busy_time - переменная не обязательна
print(test)

class Worker:

    def __init__(self, name, worktime):
        self.name = name
        self.worktime = worktime
        self.busy_time = set()  # это фактическая занятость

    def main(self, busy=None):
        if busy:
            self.busy_time.update(busy)
            return f'Рабочее время сотрудника {self.name} c {self.worktime[0]} до {self.worktime[1]}' \
                   f' в {sorted(self.busy_time)} часов сотрудник занят'
        else:
            all_time = set(range(self.worktime[0], self.worktime[1] + 1))
            free_time = all_time - self.busy_time
            return f'Свободное время сотрудника {self.name}: {sorted(free_time)}'

busy_time = [8, 17, 14]  # ввод времени когда сотрудник занят
Alex = Worker('Alex', [8, 17])  # ввод сотрудника и времени его работы
test = Alex.main(busy_time)  # busy_time - переменная не обязательна
print(test)
print(Alex.main())

Рабочее время сотрудника Alex c 8 до 17 в [8, 14, 17] часов сотрудник занят
Свободное время сотрудника Alex: [9, 10, 11, 12, 13, 15, 16]


Дублирование значений ключей при добавлении новых записей
Есть данные в dataframe pandas формата:

  ticker,price,size,time
  potato,2014,60,4057
  potato,2015,62,4073
  potato,2014,61,4076

Необходимо создать словарь, где ключами будут ticker и вложенный словарь с ключами size со значениями price, time и delta в виде списков. Для каждого значения size необходимо создавать не только один ключ, но и 2 дополнительных со значением +/-1, т.е. после первой итерации создается словарь potato с 3 ключами 60, 59 и 61 и так для каждой строки.
Обработка первой строки:

{potato:{60:{[4057],[2014],[0]},
         61:{[4057],[2014],[0]},
         59:{[4057],[2014].[0]}}

Проблема в том, что при 2 итерации, когда мы заносим значения в ключи 62, 61 и 63, при занесении значения списков в ключ 61 эти значения, также дублируются в ключах 60 и 59, как будто все 3 первоначально созданных ключа ссылаются на одну область памяти.
Получается так:

{potato:{60:{[4057,4073],[2014,2015],[0,16]},
         61:{[4057,4073],[2014,2015],[0,16]},
         59:{[4057,4073],[2014,2015],[0,16]},
         62:{[4073],[2015],[0]},
         63:{[4073],[2015],[0]}

А должно быть так:

{potato:{60:{[4057],[2014],[0]},
         61:{[4057,4073],[2014,2015],[0,16]},
         59:{[4057],[2014],[0]},
         62:{[4073],[2015],[0]},
         63:{[4073],[2015],[0]}

Подскажите, как написать код грамотно, чтобы такого не происходило.
Сам код:

import pandas as pd

def robodetect(zz):
    time = []
    price = []
    delta = []
    if zz.ticker not in robot_dict:
        time.append(zz.time)
        price.append(zz.price)
        delta.append(0)
        robot_dict[zz.ticker] = {zz.size: {"time": time, "price": price, "delta": delta},
                                 zz.size+1: {"time": time, "price": price, "delta": delta},
                                 zz.size-1: {"time": time, "price": price, "delta": delta}}
    else:
        for i in [0, 1, -1]:
            if zz.size+i in robot_dict[zz.ticker]:
                time = []
                price = []
                delta = []
                time = robot_dict[zz.ticker][zz.size+i]['time']
                time.append(zz.time)
                robot_dict[zz.ticker][zz.size+i]['time'] = time
                price = robot_dict[zz.ticker][zz.size+i]['price']
                price.append(zz.price)
                robot_dict[zz.ticker][zz.size+i]['price'] = price
                delta = robot_dict[zz.ticker][zz.size+i]['delta']
                e = time[-1] - time[-2]
                delta.append(e)
                robot_dict[zz.ticker][zz.size+i]['delta'] = delta
            else:
                time = []
                time.append(zz.time)
                price = []
                price.append(zz.price)
                delta = []
                delta.append(0)
                robot_dict[zz.ticker][zz.size+i] = {"time": time, "price": price, "delta": delta}

q1 = "d:\Python_Soft\\Temp\\data_potato.txt"
dfah=pd.read_csv(q1,delimiter=',')
robot_dict = {}
for row in dfah.itertuples(index=False):
    robodetect(row)

Подсказали в одном из Python чатов. Ларчик просто открывался:
<code>
def robodetect(zz):
    if zz.ticker not in robot_dict:
        robot_dict[zz.ticker] = {zz.size: {"time": [zz.time], "price": [zz.price], "delta": [0]},
                                 zz.size+1: {"time": [zz.time], "price": [zz.price], "delta": [0]},
                                 zz.size-1: {"time": [zz.time], "price": [zz.price], "delta": [0]}}
    else:
        for i in [0, 1, -1]:
            if zz.size+i in robot_dict[zz.ticker]:
                robot_dict[zz.ticker][zz.size+i]['time'].append(zz.time)
                robot_dict[zz.ticker][zz.size + i]['price'].append(zz.price)
                time = robot_dict[zz.ticker][zz.size + i]['time']
                e = time[-1] - time[-2]
                robot_dict[zz.ticker][zz.size + i]['delta'].append(e)
            else:
                robot_dict[zz.ticker][zz.size+i] = {"time": [zz.time], "price": [zz.price], "delta": [0]}
</code>


Как сделать ограничения на количество запусков программы в день?
Задача состоит в следующем: необходимо, чтобы программу можно было запускать не более 6 раз в день,т.е. после 6 запусков программу можно было запустить только на следующий день. В моей программе есть два текстовых файла 1 - счетчик и 2 - файл с датой. Сделана проверка на счетчик и файл с датой,в программе проверяется текущая дата и дата из файла, если дата из файла и дата текущая не совпадают, то счетчик обновляется, однако с 54 строки проверка не срабатывает как надо. В коде отметил  область в которой проблемы.
<code>
from tkinter import *
import os
import datetime

root = Tk()
root.title('main')
root.geometry('300x300')

def develop_label(mark_index):
    marks = ['1', '2', '3']
    lbl1['text'] = marks[mark_index]
    if mark_index == len(marks) - 1:
        mark_index = -1
    root.after(5000, develop_label, mark_index + 1)

lbl1 = Label(text='1', font='TimesNewRoman 12')
lbl1.place(x=120, y=10)

######Исправить
file = open('count.txt', 'r+')#файл с кол-вом запусков
N=file.read(1)

file2 = open('date.txt', 'r+') ##файл с датой

data_in_file = ''

date_now = datetime.date.today()
date_now1 = str(date_now)
file.close()

file = open('count.txt', 'r+')
file.seek(0)
N = int(N)
N += 1
file.write(str(N))

if N == 0:
    file2.seek(0)
    file2.write(str(date_now))
    file2.close()
    file2 = open('date.txt', 'r+')
    data_in_file = file2.read()
    file2.close()
    print('aboba')

if int(N) >= 6:
    print('rabotaet')
    if date_now1 != data_in_file:

        file2 = open('date.txt', 'r+')
        file2.seek(0)
        file2.write(str(date_now))
        N = 0
        file.write(str(N))

    else:
        print('data rabotat')
        exit()

######

k = 0
def correct():
    global k
    path = "C:\\Users\\Gamer\\Desktop\\fuf"
    file_name = 'test.py'
    file_path = os.path.join(path,file_name)
    a = field.get()
    if a == "йцу":
        print('asdasd')
        lbl2 = Label(root, text = 'Correct',borderwidth = 5)
        lbl2.place(x=120, y=50)

    else:
        lbl2 = Label(root, text = 'Incorrect')
        lbl2.place(x=120, y=50)
        k += 1
        print(k)
        if k == 3:
            print(k,"yeees")
            #os.remove(file_path)
            root.destroy()

field = Entry()
field.place(x=100, y=100)
file.close()
file2.close()
butt = Button(root, text ="go", command = lambda:correct())
butt.place(x=100, y=200)
root.after(0, develop_label, 0)  # (интервал в мс, функция, аргумент функции)
root.mainloop()
</code>

Прикладываю код, того, что вы хотите. Начиная со строчки
root = Tk() вставляйте код своей основной программы. Функцции (
def) можете вставить и перед кодом или внутри него.

from tkinter import *
import datetime

date_file = open('date.txt', 'r+')
last_launch_date = date_file.read()
today_date = str(datetime.date.today())

if last_launch_date == today_date:  # если в файле сегодняшняя дата
    counter_file = open('count.txt', 'r+')
    launches_today = int(counter_file.read()) + 1
    counter_file.close()
    counter_file = open('count.txt', 'w')  # перезаписываем файл
    counter_file.write(str(launches_today))  # переписываем кол-во запусков
    counter_file.close()
    if launches_today > 6:
        exit()
else:  # даты не соответствуют
    date_file.close()
    date_file = open('date.txt', 'w')  # перезаписываем файл
    date_file.write(today_date)  # переписываем дату запуска
    counter_file = open('count.txt', 'w')
    counter_file.write('1')
    counter_file.close()

date_file.close()

# Ниже основной код программы:
root = Tk()
root.mainloop()

Тоже самое, но с конструкциями
with open() as - код короче, понятнее и закрывает файл сразу после завершения работы с ним:

from tkinter import *
import datetime

with open('date.txt', 'r+') as date_file:
    last_launch_date = date_file.read()
today_date = str(datetime.date.today())

if last_launch_date == today_date:  # если в файле сегодняшняя дата
    with open('count.txt', 'r+') as counter_file:
        launches_today = int(counter_file.read()) + 1
    with open('count.txt', 'w') as counter_file: # перезаписываем файл
        counter_file.write(str(launches_today))  # переписываем кол-во запусков
    if launches_today > 6:
        exit()
else:  # даты не соответствуют
    with open('date.txt', 'w') as date_file:  # перезаписываем файл
        date_file.write(today_date)  # переписываем дату запуска
    with open('count.txt', 'w') as counter_file:
        counter_file.write('1')

# Ниже основной код программы:
root = Tk()
root.mainloop()


Нужно посчитать занятое время
есть сотрудник который работает с 9 до 18 и нужно занять это время

class Worker:
    def __init__(self, name, worktime):
        self.name = name
        self.worktime = worktime

    def time_busy(self, times):
        busy = какой то алгоритм
        return busy

передаем данные
Maxim = Worker('Maxim', [9, 18])
далее к примеру мы озадачиваем Максима с 9 до 15
Maxim = Worker.time_busy('Maxim', [9, 15])
и я не понимаю какой алгоритм написать что бы на выходе я получил остаток рабочего времени, а именно то что осталось время с 15 до 18

задачу можно решать по разному - если она подразумевает, что можно указать несколько диапазонов (последовательно) когда работник занят и в результате вернуть все диапазоны, когда работник свободен
способ 1:
если дело касается только суток и целое кол-во часов, то можно обойтись малой кровью:

создать список со свободными часами
при вводе диапазона занятости удалять эти значения из списка (по сути собирая новый список)
когда требуется вернуть свободные диапазоны - просто двигаться от начала списка к концу и если числа идут последовательно (например, 13, 14, 15) - включать их в единый диапазон (т.е. изменять начало и конец диапазона), а если числа с перерывом, то считать, что один диапазон закончился и надо начинать новый

способ 2:
если диапазон может включать и минуты (и секунды)
когда задача немного усложняется, но принцип тот же самый -

надо идти по свободным диапазонам и если диапазон попадает (полностью или частично) в занятый диапазон - обрезать справа или слева время (или даже удалять диапазон) или из 1 диапазона формировать 2 диапазона, если "обрезание" происходит по центру

например свободный диапазон 10-20, а занятый 11-15, смотрим что левый коней занятого > левого конца свободного, но больше правого конца свободного - формируем новый свободный диапазон 10-11
и т.д.


Как корректно изменить тип <class 'telebot.types.Contact'>, чтобы можно было сохранить данные в БД?
Подскажите, пожалуйста:
есть ли возможность изменить тип данных у сообщения, содержащего данные о контакте,
в такой, чтобы данные из этого массива можно было сохранить в БД?
Сейчас имею данные в формате
<class 'telebot.types.Contact'>:

{
    'phone_number': '+799999999',
    'first_name': 'Name',
    'last_name': 'Lastname',
    'user_id': 999999,
    'vcard': None
}

Пробовала изменить тип на словарь, но это явно неверный путь решения.

Я бы записал в json.

@bot.message_handler(content_types=["contact"])
def get_contact(message: types.Message):
    contact = message.contact.__dict__
    json_contafct = json.dumps(contact, ensure_ascii=False) # <- type str

Ну и потом, с помощью,
json модуля распарсить обратно в словарь.
UPD. Хотя нет. Я бы просто вытащил номер телефона и записал бы его в БД.

contact = message.contact.phone_number


как автоматически скрывать окно?
Пытаюсь создать программу, и задумался как сделать авто скрытие.
• Ведь у окна стоит атрибут
overrideredirect = True, тогда окно скрывается пропадает с панели. Мне надо сделать при нажатие другой вкладки ( напр. ), скрывается окно и появляется на панели ( без кнопки ).
• В попытках ставил бинд на потерю фокуса, но работа была с миганием, дерганием и лагами.
• Код с биндами утерял, но могу написать шаблон ( как было, но без биндов ).
• Вот шаблон ( интерфейс программы ) :

import tkinter

width # ширина экрана, посторонний модуль. ( переменная )
height # высота экрана, посторонний модуль. ( переменная )

root = tkinter.Tk()

root.attributes('-topmost', True)

root.geometry('{}x{}'.format(width, height - 40))

root.overrideredirect(1)

content = tkinter.Frame(root, cursor = '')

content ['background'] = '#2e2e2e'

content.pack_propagate(0)

content.pack(fill = tkinter.BOTH, expand = 1)

border = tkinter.Frame(content)

border ['background'] = '#90ee90'

border.place(x = 0, y = 0, width = width, height = 20)

button_exit = tkinter.Button(border, border = 0, command = lambda : sys.exit(), background = '#ff7f50', text = ' ', activebackground = '#ff7f50')

button_exit.place(x = width - 20, width = 20, height = 20)

root.mainloop()

Для этого надо изменить
overrideredirect на False, при ловле нужного события и тогда уж создать иконку на панели задач. При разворачивании окна надо ловить событие
<Map> и возвращать
overrideredirect на True.

Map, Unmap
The Map and Unmap events are generated whenever the mapping state of a window changes.
Windows are created in the unmapped state. Top-level windows become mapped when they transition to the normal state, and are unmapped in the withdrawn and iconic states. Other windows become mapped when they are placed under control of a geometry manager (for example pack or grid).
A window is viewable only if it and all of its ancestors are mapped.
Note that geometry managers typically do not map their children until
they have been mapped themselves, and unmap all children when they
become unmapped; hence in Tk Map and Unmap events indicate whether or
not a window is viewable.

Для образца сделал клик на салатовый фрейм, для сокрытия:

import tkinter
import sys

width = 400  # ширина экрана, посторонний модуль. ( переменная )
height = 400  # высота экрана, посторонний модуль. ( переменная )
flag = True

def show_ico(e):
    global flag
    flag = False
    root.withdraw()
    root.overrideredirect(flag)
    root.iconify()

def show_root(e):
    global flag
    flag = True
    root.overrideredirect(flag)
    root.deiconify()
    root.focus_force()

root = tkinter.Tk()
root.attributes('-topmost', True)
root.geometry('{}x{}+400+300'.format(width, height - 40))
root.overrideredirect(flag)
root.bind('<Map>', show_root)
root.bind('<FocusOut>', show_ico)

content = tkinter.Frame(root, cursor='')
content['background'] = '#2e2e2e'
content.pack_propagate(0)
content.pack(fill=tkinter.BOTH, expand=1)

border = tkinter.Frame(content)
border['background'] = '#90ee90'
border.place(x=0, y=0, width=width, height=20)
border.bind('<ButtonPress-1>', show_ico)

button_exit = tkinter.Button(border, border=0, command=lambda: sys.exit(), background='#ff7f50', text=' ',
                             activebackground='#ff7f50')
button_exit.place(x=width - 20, width=20, height=20)

root.mainloop()


Собрать данные по уникальным значениям датафрейма
Задача такая: Дан
csv документ, где отображены
id (они иногда повторяются) и отзывы, которые оставил человек с этим
id. Нужно собрать в новый датафрейм все отзывы, которые оставил человек с конкретным
id.
Я действовала через grouby:
grouped_data = data.groupby('id').review.unique(). Данные собрались как надо, но я не могу преобразовать их в отдельный датафрейм т.к.
id и отзыв отображаются единым текстом.
Как поступить?

Для описанной вами задачи все проще - фильтрация с помощью булева массива

data = pd.DataFrame({'id': [1, 2, 1, 3, 2], 'review': ['Текст 1', 'Текст 2', 'Текст 3', 'Текст 4', 'Текст 5']})
concrete_id = 2
grouped_data = data[data.id.eq(concrete_id)]
print(grouped_data)

   id   review
1   2  Текст 2
4   2  Текст 5

Пояснение. Сначала с помощью
data.id.eq(concrete_id) создается булев массив (Series):

0    False
1     True
2    False
3    False
4     True
Name: id, dtype: bool

Далее с помощью
data[<булев массив>] в новый фрейм выбираются все строки исходного, которые соответствуют
True в булевом массиве. В данном случае - 1 и 4 строки.


Задача красивые числа
Условие задачи:
Красивое число — это число, состоящее из уникальных цифр. Например, 222, 8, 5555 —
красивые числа, а 34, 5505 и 12345 — нет.
Ваша задача по данным двум целым числам l и r найти количество красивых чисел в
интервале [l..r].
Входные данные
В единственной строке даны два целых числа l и r
Выходные данные
Выведите одно целое число — ответ на задачу
Помогите откорректировать код или при нужде поменять его полностью!! Спасибо большое заранее!!!
Мой код:
<code>
l, r = input('Введите диапозон чисел например 42 100, т.е. 42-100: ').split(' ')

l = int(l)
r = int(r)
count = 0

for i in range(l, r):
  i = str(i)
  amount_of_words = len(i)
  for k in range(0, amount_of_words):
    if i[k] == i[k+1]:

print(count)
</code>

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

l, r = input().split(' ')
l = int(l)
r = int(r)

count = 0

for i in range(l, r, 1): # step не обязательно, просто я уже к нему привык
  i = str(i)
  if i.count(i[0]) == len(i):
    count += 1
  else:
    continue

print(count)

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

  else:
    continue

То будет выдаваться ошибка (SyntaxError)


Взять текст и вставить в переменную
Ввод API ключа в текстовое поле, сохранить его в переменную, после нажатия на кнопку получить - подставить его и получить данные с сервера.
Работает, только если явно определяю: API_KEY='ключ'
<code>
import tkinter as tk
from tkinter import *
import requests
import json

root = Tk()
root.geometry("600x600")
root.title("API mpoisk.ru")

l1 = Label(root, text = "Ваш ключ API")
l1.config(font = ("Courier", 14))

l = Label(root, text = "Результат")
l.config(font = ("Courier", 14))

T = Text(root, height = 15, width = 40)
T.tag_configure("bold", font="Arial 8 bold")

T1 = Text(root, height = 20, width = 50)
T.tag_configure("bold", font="Arial 8 bold")

def get_api():
    API_KEY = T1.get("1.0",'end-1c')

API_KEY = T1.get("1.0",'end-1c')

header = {
  'Authorization': 'Bearer ' + API_KEY,
}
api_url ="здесь ссылка"

def get_fact1():
    response = requests.get(api_url, headers=header)
    response_info = json.loads(response.text)
    Fact = response_info
    T.delete('1.0', tk.END)
    T.insert(tk.END, Fact)

b = Button(root, text = "Авторизоваться", command = get_api)
b1 = Button(root, text = "Получить", command = get_fact1)

l1.pack()
T1.pack()
b.pack()

l.pack()
T.pack()

b1.pack()
b2.pack()

tk.mainloop()
</code>

def get_api():
    API_KEY = T1.get("1.0",'end-1c')

header = {
  'Authorization': 'Bearer ' + API_KEY,
}

Тут сразу две проблемы:

Для функции
get_api переменная
API_KEY - локальная. Вы можете написать в неё что угодно, вне этой функции значение глобальной переменной
API_KEY не поменяется.
Пользуясь значением переменной
API_KEY вы задали значение словаря
header один раз, в начале работы кода, и больше его никак не меняете. Даже если вы поменяете значение
API_KEY, оно не попадёт автоматически в словарь `header.

Лучше всего исправить эту ситуацию так на мой взгляд:

def get_api():
    return T1.get("1.0",'end-1c')

def get_header():
    return {'Authorization': 'Bearer ' + get_api() }

api_url ="здесь ссылка"

def get_fact1():
    response = requests.get(api_url, headers=get_header())

В этом случае
header будет формироваться динамически, используя текущее значение ключа из соответствующего поля. А кнопка
'Авторизоваться' вообще не нужна.
Нет, можно решить и как вы хотите, но тогда нужно сохранять глобальную переменную
API_KEY и всё-равно формировать
header динамически. Глобальные переменные - не очень хорошее решение, поэтому я это решение не рекомендую:

def get_api():
    global API_KEY
    API_KEY = T1.get("1.0",'end-1c')

def get_header():
    return {'Authorization': 'Bearer ' + API_KEY }

api_url ="здесь ссылка"

def get_fact1():
    response = requests.get(api_url, headers=get_header())

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


Как объединить 2 массива в bs4

import requests
from bs4 import BeautifulSoup

url = 'xxxx'
response = requests.get(url)
bs = BeautifulSoup(response.text, "lxml")
quotes = bs.find_all('td', class_='row3 over')
 #print(quotes)

for item2 in quotes:
    item2_text = item2.text
    qw = item2.text
     #print(qw)

#for link in bs.find_all('a'):

 #   print(link.get('href'))

all_a = bs.find_all('a', class_='last-post-icon')

 #print(all_a)

for item in all_a:
    item_text = item.text
    item_url = item.get("href")
    print(f'{qw}: {item_url}')

По задумке, код должен каждые 2 секунды парсить страницу, потом заносить результат формата "title_name + url" в какой то список. Проблема с выводом сообщений из переменных.
Переменная qw имеет, допустим 10 названий топиков = title
Переменная item_url имеет ссылку на последнее сообщение = url
При попытке их распечатать выдается список формата:

title1 : url 1
title1 : url 2
title1 : url 3

Как их совместить таким образом, чтобы сохранить очередность из каждой переменной?

title1 : url 1
title2 : url 2
title3 " url 3

В вашем случае так:
<code>
bs = BeautifulSoup(response.text, "lxml")
quotes = bs.find_all('td', class_='row3 over')
all_a = bs.find_all('a', class_='last-post-icon')
for item, item2 in zip(all_a, quotes):
    qw = item2.text
    item_url = item.get("href")
    print(f'{qw}: {item_url}')
</code>
А если скинете ссылку на сайт я вам напишу еще один вариант кода


Не работает условие или я написал что-то не так?
При вводе -10 -10 -10, почему то выводит: -10 + -10 + -10 = -30, хотя не должно. Где я ошибся?
'''
<code>
a = float(input())
b = float(input())
c = float(input())

if a < 0:
    sl = a + b + c
    print(format(a, '.0f'), '+', format(b, '.0f'), '+', format(c, '.0f'), '=', format(sl, '.0f'))

elif b < 0:
    sl = a - b + c
    print(format(a, '.0f'), format(b, '.0f'), '+', format(c, '.0f'), '=', format(sl, '.0f'))

elif c < 0:
    sl = a + b - c
    print(format(a, '.0f'), '+', format(b, '.0f'), format(c, '.0f'), '=', format(sl, '.0f'))

elif a < 0 and b < 0:
    sl = a - b + c
    print(format(a, '.0f'), format(b, '.0f'), '+', format(c, '.0f'), '=', format(sl, '.0f'))

elif b < 0 and c < 0:
    sl = a - b - c
    print(format(a, '.0f'), format(b, '.0f'), format(c, '.0f'), '=', format(sl, '.0f'))

elif a < 0 and b < 0 and c < 0:
    sl = a - b - c
    print(format(a, '.0f'), ' ', format(b, '.0f'), ' ', format(c, '.0f'), '=', format(sl, '.0f'))

else:
    sl = a + b + c
    print(format(a, '.0f'), '+', format(b, '.0f'), '+', format(c, '.0f'), '=', format(sl, '.0f'))
</code>
'''

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

Если покороче переписать ваш код с использованием тернарного
if и
abs(), можно сделать так:

a, b, c = [float(f) for f in input("Введите 3 числа через пробел: ").split()]
out = f'{"-" if a < 0 else ""}{abs(a):.0f}{"-" if b < 0 else "+"}{abs(b):.0f}{"-" if c < 0 else "+"}{abs(c):.0f}={a + b + c:.0f}'
print(out)

Введите 3 числа через пробел: 10 -30 -5
10-30-5=-25

Вообще задача имеет циклический вид, поэтому удобнее сделать в цикле для произвольного кол-ва чисел:

numbers = [float(f) for f in input("Введите N чисел через пробел: ").split()]
out = ''
for n in numbers:
    out += f'{"-" if n < 0 else ("" if out == "" else "+")}{abs(n):.2f}'

out += f'={sum(numbers):.2f}'
print(out)

Введите N чисел через пробел: 24.2 -16.5 22 45 -2.2 42
24.20-16.50+22.00+45.00-2.20+42.00=114.50


Python. Частота появления слов и букв независимо от их регистра в тексте который находиться в файле
Нужно написать программу, которая будет анализировать частоту с которой
в тексте(в файле) будут встречаться отдельные буквы или слова независимо от их регистра и выводить в консоль потом записывать в новый файл.
Для начала:
<code>
with open(filename, encoding="utf8") as file:
    text = file.read()
    text = text.replace("\n", " ")
    text = text.replace(",", "").replace(".", "").replace(":", "").replace(";", "").replace("?", "").replace("!", "")
    text = text.lower()
    words = text.split()
</code>
Таким образом получаем текст из файла и убираем всё лишние из текста, а дальше как правильно сделать не понимаю....

Для слов

from collections import Counter
import re

words = re.findall(r'\w+', text.lower())
cnt = Counter(words).most_common(10) # для примера 10 самых популярных
with open("new.txt", "w") as file:
    file.write(cnt)

Для букв
Тоже самое, но для паттерна для модуля
re использовать отдельные буквы. В зависимоти от того насколько большой текст, возможно, стоит отказаться для подсчета букв от данного модуля и использовать конструкцию

str.count("a")

И использовать перебор по всем буквам алфавита

from string import ascii_lowercase as letters

cnt = Counter()
for letter in letters:
    cnt[letter] = text.lower().count(letter)

Запись организовать как указано выше
и так далее, для чисел, для знаков и прочее
Чтобы удалить все знаки препинания, тоже можно воспользоваться модулем
re

import re

text = re.sub(r'[^\w\s]', '', text)

Теперь если все объеденить

import re
import json
from collections import Counter
from string import ascii_lowercase as letters

# чтение
def read_file(path):
    result = None
    with open(path, encoding="utf8") as file:
        text = file.read().lower()
        result = re.sub(r'[^\w\s]', '', text)  # это излишнее можно удалить, только для примера использую
    return result

def find_words(text):
    words = re.findall(r'\w+', text)
    cnt = Counter(words)
    return dict(cnt)

def find_letters(text):
    cnt = Counter()
    for letter in letters:
        cnt[letter] = text.count(letter)
    return dict(cnt)

# запись
def write_file(all_entities, path):
    with open(path, "w") as file:
        json.dump(all_entities, file, indent = 4)

# Основная логика
file = read_file("test_data.txt")
words = find_words(file)
letters = find_letters(file)
common_dict = {"words":words, "letters":letters}
write_file(common_dict, "new_file.txt")

Пример результирующего файла на тексте рыбе

{
    "words": {
        "but": 4,
        "i": 2,
        "must": 1,
        "explain": 1,
        "to": 7,
        "you": 2,
        "how": 2,
        "all": 1,
        "this": 1,
        "mistaken": 1,
        "idea": 1,
        "of": 7,
        "denouncing": 1,
        "pleasure": 7,
        "and": 4,
        "praising": 1,
        "pain": 5,
        "was": 1,
        "born": 1,
        "will": 1,
        "give": 1,
        "a": 5,
        "complete": 1,
        "account": 1,
        "the": 5,
        "system": 1,
        "expound": 1,
        "actual": 1,
        "teachings": 1,
        "great": 2,
        "explorer": 1,
        "truth": 1,
        "masterbuilder": 1,
        "human": 1,
        "happiness": 1,
        "no": 3,
        "one": 2,
        "rejects": 1,
        "dislikes": 1,
        "or": 4,
        "avoids": 2,
        "itself": 2,
        "because": 4,
        "it": 3,
        "is": 3,
        "those": 1,
        "who": 5,
        "do": 1,
        "not": 1,
        "know": 1,
        "pursue": 1,
        "rationally": 1,
        "encounter": 1,
        "consequences": 2,
        "that": 3,
        "are": 1,
        "extremely": 1,
        "painful": 1,
        "nor": 1,
        "again": 1,
        "there": 1,
        "anyone": 1,
        "loves": 1,
        "pursues": 1,
        "desires": 1,
        "obtain": 2,
        "occasionally": 1,
        "circumstances": 1,
        "occur": 1,
        "in": 1,
        "which": 2,
        "toil": 1,
        "can": 1,
        "procure": 1,
        "him": 1,
        "some": 2,
        "take": 1,
        "trivial": 1,
        "example": 1,
        "us": 1,
        "ever": 1,
        "undertakes": 1,
        "laborious": 1,
        "physical": 1,
        "exercise": 1,
        "except": 1,
        "advantage": 1,
        "from": 1,
        "has": 2,
        "any": 1,
        "right": 1,
        "find": 1,
        "fault": 1,
        "with": 1,
        "man": 1,
        "chooses": 1,
        "enjoy": 1,
        "annoying": 1,
        "produces": 1,
        "resultant": 1
    },
    "letters": {
        "a": 74,
        "b": 13,
        "c": 32,
        "d": 17,
        "e": 93,
        "f": 13,
        "g": 10,
        "h": 33,
        "i": 53,
        "j": 2,
        "k": 5,
        "l": 33,
        "m": 14,
        "n": 56,
        "o": 68,
        "p": 27,
        "q": 2,
        "r": 43,
        "s": 59,
        "t": 61,
        "u": 42,
        "v": 7,
        "w": 13,
        "x": 7,
        "y": 11,
        "z": 0
    }
}


Как перенести переменную из message handler в callback handler?
Работаю в TeleBot на бд SQLite3
Как правильно переместить переменную из message handler в callback handler?

@bot.message_handler(content_types=['text'])
def func(message):
    if (message.text == "text"):
        user_id = message.from_user.id #Вот эту переменную мне нужно переместить
        c.execute("SELECT attempts FROM users WHERE user_id = ?",(user_id,))
        results = c.fetchall()
        for row in results:
            attempts = int(row[0])
            if attempts > 1:
            bot.send_message(message.chat.id, "text{attempts}")

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.data == 'text':
        user_id = message.from_user.id # Вот сюда
        c.execute("SELECT attempts FROM users WHERE user_id = ?",(user_id,))
        results = c.fetchall()
        for row in results:
            attempts = int(row[0])
            if attempts < 1:
            bot.edit_message_text(chat_id=call.message.chat.id,message_id=call.message.message_id, text="text{attempts}"

Вот при таком исполнении выводит ошибку:

NameError: name 'message' is not defined

Подскажите пожалуйста, можно ли это сделать и как?

Кажись вам просто нужен юзер айди юзера, который нажал на кнопку. Вот так делайте.

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.data == 'text':
        user_id = call.from_user.id

А если вас интересует ВАШЕ (бота) сообщение, в котором находится нажатая кнопка, то можно вот так

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    msg = call.message

Но повторю, это сообщение бота. потому
call.message.from_user будет принадлежать боту, а не юзеру нажавшему кнопку.


Как получать и изменять переменные из другого файла. Python
У меня есть 2 файла.
Помогите пожалуйста, мне надо сделать так, чтобы первый файл main.py брал переменные из второго файла second.py.
К примеру в файле second.py будет код:

x = 1

В файле main.py будет такой код:

x +=1
print(x)

И вывод будет сначала 2, а в файле second.py код будет уже
x = 2
В следующий раз, при запуске main.py вывод будет 3, и во втором файле будет
x = 3
и т.д.
Нужно это для того, чтобы если при перезапуске main.py, значения не сбрасывались. Я не знаю корректно ли я задал вопрос. Если буду нужен, пожалуйста напишите

with open('second.txt', 'r') as f:
    a = f.readline()
b = int(a)
b+=1
print(b)
with open('second.txt', 'w+') as f:
    a = f.write(str(b))

данная программа полностью соответствует вашей задачи.
для этой задачи вам потребуется создать файл в формате .txt как у меня, по другому реализовать нельзя. можно, конечно, в формате .py, но смысла в это не так много, если у вас один файл чисто для хранения. проще хранить в текстовом формате
первый раз открывается файл для чтения, но открывается в формате строки. мы преобразуем его из формата str в int, чтобы могли сложить.
далее мы проверяем принтом, что все сложилось (данная строка не обязательна, чисто для проверки)
и в конце мы открываем файл в формате для записи, чтобы сохранить полученный результат.
после повторного запуска программа будет уже считать то число, что было получено в предыдущем запуске.
надеюсь все понятно объяснил. если что, то обращайтесь, объясню более подробно

with open('second.txt', 'r') as f:
    a = f.read().split('\n')[0:2]    #позволяет читать каждую строку отдельно без лишних символов
q = []    #создаем временный файл, куда будем записывать полученные значения, чтобы они не удалились раньше времени
for i in range(len(a)):
    b = int(a[i])
    b+=1
    q.append(b)    #записываем полученное число во временный файл
print(str(q).replace(', ','\n')[1:-1])   #вывод без лишних знаков (построчно, вместо [2, 3])
with open('second.txt', 'w+') as f:
    for i in range(len(q)):    #перебором записываем в файл построчно
        a = f.write(f'{str(q[i])}\n')

как должен выглядеть при этом файл с данными:

1
2


Возвращает результат победы в лотерее 10, 5, 1 или 0 в соответствии с входными значениями

def lottery(a: int, b: int, c: int) -> int:
    if a == 5 and b == 5 and c == 5:
        return 10
    elif a != 5 and b != 5 and c != 5:
        return 5
    elif a != b and a != c:
        return 1
    elif a == b or a == c:
        return 0

print(lottery(5, 5, 5))  #10
print(lottery(2, 2, 1))  #0
print(lottery(2, 3, 1))  #1
print(lottery(0, 0, 3))  #0
print(lottery(5, 1, 5))  #0

В коде видимо необходимо сделать какие-то настройки алгоритма, чтобы он выдавал правильные ответы. На данный момент он выдает
10; 5; 5; 5; 0.
Где допущена ошибка и как её изменить?
Условия:

Если все три числа являются «выигрышными», т. е. 5, то возвращается самый высокий выигрышный результат — 10.
Если все три числа просто одинаковы, но не равны «выигрышному числу», то возвращается средний выигрышный результат - 5.
Если и b, и c отличны от a, выигрышный результат равен 1.
В противном случае, если либо b, либо c равно a, выигрышный результат равен 0.

У вас не соблюдается второе условие равенства всех переменных и неравенства их
5. Вот здесь

elif a != 5 and b != 5 and c != 5: # возьмем a = 2, b = 2, c = 1

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

elif a == b == c != 5: # равны между собой и не равны 5

Полностью код для вашей задачи будет

def lottery(a: int, b: int, c: int) -> int:
    if a == b == c == 5:
        return 10
    elif a == b == c != 5:
        return 5
    elif a != b and a != c:
        return 1
    else:
        return 0

Проверка

>>> print(lottery(5, 5, 5))  #10
10
>>> print(lottery(2, 2, 1))  #0
0
>>> print(lottery(2, 3, 1))  #1
1
>>> print(lottery(0, 0, 3))  #0
0
>>> print(lottery(5, 1, 5))  #0
0


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

def students_study(time: int, coffee_needed: bool) -> bool:
    """Если это вечернее и ночное время (между 18:00 и 24:00, включая конечные точки),то пить кофе не важно. Если это утро и время обеда (с 5 до 17 часов включительно), то пить кофе крайне важно. Между 1 и 4 (включая конечные точки) пить кофе нельзя.
    Пример: (19, False) -> True
    (1, True) -> False.
    """
    if 24 >= time >= 18 and coffee_needed == False:
        return True
    elif 17 >= time >= 5 and coffee_needed == True:
        return True
    elif 4 >= time >= 1 and coffee_needed == False:
        return True

При запуске теста

print(students_study(19, False))
print(students_study(1, True))

Питон выдает ответ
True; None. Тоесть алгоритм по какой-то причине не работает. Можете помочь разобраться с ошибкой? Может можно сократить алгоритм?

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

С 18-24, пить кофе не важно
С 1-4, пить кофе нельзя, то есть при любом значении данной переменной возвращаем
False

Если я правильно понял эти условия из вашего описания, то сначала проверям эти временные промежутки без участия переменной
coffee_needed. А затем пишем условие для оставшегося временного промежутка

def students_study(time_: int, coffee_needed: bool) -> bool:
    if 24 >= time_ >= 18:
        return True
    if 4 >= time_ >= 1:
        return False
    if  17 >= time_ >= 5:
        if coffee_needed:
            return True
        else:
            return False

Проверяем

>>> print(students_study(19, False))
True
>>> print(students_study(1, True))
False

Переименовал переменную
time в
time_, поскольку есть одноименный модуль.
Если взглянуть детальнее, то можно сократить до вот такого кода

def students_study(time_: int, coffee_needed: bool) -> bool:
    if 24 >= time_ >= 18:
        return True
    if  17 >= time_ >= 5 and coffee_needed:
        return True
    return False

Возвращать
True только при необходимых условиях, если ни одно не попало и функция дошла до последней строки, то вернуть
False


Возвращает количество корзин с фруктами

def fruit_order(small_baskets: int, big_baskets: int, ordered_amount: int) -> int:
"""
Вернуть количество маленьких корзин, если это возможно для завершения заказа. Если это невозможно, то вернуть -1

(4, 1, 9) -> 4
(3, 1, 10) -> -1
"""
pass

Большая корзина фруктов включает в себя 5 кг, маленькая 1 кг. Как я понимаю необходимо использовать алгоритм с началом if ordered_amount % 5:
Дальше исходя из остатка необходимо посчитать сколько маленьких корзин получится(result) и если их количество совпадает со small_baskets, то return result. Если нет, то return -1

if small_baskets == result:
return result
if small_baskets != result:
return -1

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

Наполняем по максимуму большие корзины, потом проверяем, что в маленькие поместится то, что осталось
<code>
def fruit_order(small_baskets: int, big_baskets: int, ordered_amount: int) -> int:
    """
    Вернуть количество маленьких корзин, если это возможно для завершения заказа.
    Если это невозможно, то вернуть -1

    (4, 1, 9) -> 4
    (3, 1, 10) -> -1
    """
    if big_baskets:
        big = min(ordered_amount // big_baskets, big_baskets)
        ordered_amount -= 5 * big
    if ordered_amount > small_baskets:
        return -1
    return ordered_amount
</code>


Как менять параметр функции внутри другой функции?
Высчитываю двойной интеграл степенной функции
<code>
def dbl_integral(f, a1, b1, a2, b2, n1, n2):
    j = 0
    N = b1 - a1
    h = (n2-n1)/N
    n = n1
    I = []

    while j != N:
        f = lambda x, y: x**n # здесь надо менять не всю функцию напрямую а лишь изменять параметр n
        i = scipy.integrate.dblquad(f, a1, b1, a2, b2)[0]
        I.append(i)
        n += h
        j += 1
    return I
</code>
Я хочу потом этот метод использовать и под другие похожие функции, все что мне надо делать это менять параметр n внутри функции, а сейчас получается так что я переписываю полностью всю функцию(хардкод кароче). Как можно это решить?

Определите
fn как функцию трёх аргументов (
fn = lambda n, x, y: x ** n). Внутри
dbl_integral определите функцию двух аргументов, в ней
n фиксировано (
f = lambda x, y: fn(n, x, y)):

def dbl_integral(fn, a1, b1, a2, b2, n1, n2):
    j = 0
    N = b1 - a1
    h = (n2-n1)/N
    n = n1
    I = []

    while j != N:
        f = lambda x, y: fn(n, x, y) # здесь надо менять не всю функцию напрямую а лишь изменять параметр n
        i = scipy.integrate.dblquad(f, a1, b1, a2, b2)[0]
        I.append(i)
        n += h
        j += 1
    return I

...
print(dbl_integral(lambda n, x, y: x ** n, a1, b1, a2, b2, n1, n2)


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

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

Срезы в строках

                                (3 ответа)

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

Мне нужно удалить все символы, до определённого индекса в строке.
Например:
Есть строка
str = example и индекс найден при помощи
str.find('m').
Как получить
ple?

С помощью среза

str = 'example'
idx = str.find('m')
out = str[idx + 1:] # это срез [<от индекса + 1>:<до конца строки>]
print(out)

ple


Оптимизация запроса с помощью кэша QuerySet
Я хочу оптимизировать запросы в базу данных.
У меня возникает ситуация по которой мне нужно фильтровать по одному столбцу, но по с нескольким значениям. И все отфильтрованные данные отправить в словаре.
Я знаю, что у QuerySet есть кэш. Но похоже в моей ситуации, он не работает или я делаю что-то не так.
Вот упрощенная модель и варианты работы с кэшом QuerySet.

class Meme(models.Model):
    name = models.CharField(max_length=50)

meme = Meme.objects.all()
meme_list = list(meme)  # тут происходит оценивание QuerySet и запись в кэш
print(meme)  # берутся данные из кэша из QuerySet объекта meme
meme_name_list = []
    for i in meme:  # тут тоже берутся данные из кэша из QuerySet объекта meme
        meme_name_list.append(i.name)

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

filtered_meme = meme.filter(name__icontains='Иван')  # тут не используется кэш из QuerySet объекта meme,
                                                # хотя в объекте meme, а значит и в кэше точно есть эти данные.
filtered_meme1 = meme.filter(name__icontains='Петя')
filtered_meme2 = meme.filter(name__icontains='Саня')
filtered_meme3 = meme.filter(name__icontains='Маша')
filtered_meme4 = meme.filter(name__icontains='Соня')

data = {
    "filtered_meme": filtered_meme,
    "filtered_meme1": filtered_meme1,
    "filtered_meme2": filtered_meme2,
    "filtered_meme3": filtered_meme3,
    "filtered_meme4": filtered_meme4,
}

На каждую такую фильтрацию будет новый запрос в бд.
Можно ли такие запросы как-нибудь оптимизировать с помощью кэша QuerySet?
Или какие есть альтернативы решения данной проблемы.

Один хороший человек дал решение:
<code>
import functools
from collections import defaultdict
from operator import or_
from django.db.models import Q, Case, CharField, Value, When

values = ("Иван", "Петя", "Саня")
result = defaultdict(list)
queryset = Meme.objects.annotate(
    i=Case(
        *[
            When(
                name__icontains=value,
                then=Value(str(i))
            )
            for i, value in enumerate(values)
        ],
        output_field=CharField()
    )
).filter(
    functools.reduce(
        or_,
        [
            Q(name__icontains=value)
            for value in values
        ]
    )
)
for obj in queryset:
    result["filtered_meme" + (obj.i if obj.i != "0" else "")].append(obj)
</code>
Данный подход выполняет один запрос в базу данных.


Передать объект функции с аргументами
Стоит такая задача: необходимо передать функцию, как объект, при этом, что б объект сразу нес в себе определенные данные. Для примера:

def print_smth1(a):
    print(a)

def print_smth2(a, b):
    print(a, b)

actions = {1: print_smth1,
           2: print_smth2}

s = 1
action = actions.get(s)
action("text")

text

Проблема в том, что я не хочу передавать в action() аргументы. Нужно реализовать, что-то наподобие:

def print_smth1(a):
    print(a)

def print_smth2(a, b):
    print(a, b)

actions = {1: print_smth1("text"),
           2: print_smth2("text1", "text2")}

s = 1
action = actions.get(s)
action()

Ожидаемый вывод

text

Возможно ли провернуть такое?

Для расширения ассортимента: можно воспользоваться partial из functools
<code>
from functools import partial

def print_smth1(a):
    print(a)

def print_smth2(a, b):
    print(a, b)

actions = {1: partial(print_smth1, 'text'),
           2: partial(print_smth2, 'text', 'text2')}

s = 1
action = actions.get(s)
action()
</code>


Почему не работает код? Строки/python
Подскажите, пожалуйста, почему не работает? Я написал этот код сам, а затем сверил с учителем - все одинаково - но у него работает исправно, а у меня нет. В итоге программа должна вывести "4477". Заранее спасибо
<code>
s = '7' * 96 + '4' * 24
while '4444' in s or '7777' in s:
    if '4444' in s:
        s = s.replace('4444', '77', 1)
    else:
        s = s.replace('4444', '44', 1)
print(s)
</code>

while '4444' in s or '7777' in s:

означает, что цикл будет работать, если в цикле у вас встречается или
4444 или
7777 или и то и другое
в самом цикле вы выполняете замену ТОЛЬКО
4444

if '4444' in s:
    s = s.replace('4444', '77', 1)
else:
    s = s.replace('4444', '44', 1)

а строку формируете, содержащую и
7777:

s = '7' * 96 + '4' * 24

таким образом, чтобы ни происходило в цикле, ваша строка будет всегда содержать
7777, а значит цикл будет протекать вечно
Вот такой код работал бы конечное время:

s = '7' * 96 + '4' * 24

while '4444' in s or '7777' in s:
    if '4444' in s:
        s = s.replace('4444', '77', 1)
    else:
        s = s.replace('7777', '44', 1)

print(s)

в нем происходит и замена 4ок и замена 7ок и происходит выход из цикла (получается
4477)


Можно ли из файла с музыкой получить ноты python
Я хочу написать ИИ для генерации музыки. Мне кажется для тренировки его мне понадобится разбить музыку на ноты, типа ля2-до3 и т.д. Что бы потом он сам смог написать её. Может нужно как то прочитать mid файл или типа того. Помогите пожалуйста.

from music21 import converter, instrument, note, chord

notes = []
file = "songs/my_song.mid"

# Получаем все ноты и аккорды из файла
midi = converter.parse(file)
parts = instrument.partitionByInstrument(midi)

if parts:
    notes_to_parse = parts.parts[0].recurse()
else:
    notes_to_parse = midi.flat.notes
for element in notes_to_parse:
    if isinstance(element, note.Note):
        # Добавляем "ноты, типа ля2-до3"
        notes.append(str(element.pitch))
    elif isinstance(element, chord.Chord):
        # Добавляем аккорды
        notes.append('.'.join(str(n) for n in element.pitches))

print(notes)

Так ты получишь ноты из midi файла в массив notes. Т.к. ты собрался обучать ИИ, нужно будет закодировать каждую ноту в нужную цифру.

note_to_int = {note: number for number, note in enumerate(sorted(set(notes)))}
for i in range(len(notes)):
    notes[i] = note_to_int.get(notes[i])

С этим уже можно работать


Как из текста с английскими и русскими словами выбрать только русские?
Через selenium парсю c русскоязычной версии википедии прозвища клубов:
<code>
Канониры (англ. The Gunners)
The Citizens (Горожане)[1]
The Blues (Голубые)[2]
Sky Blues (Небесно-голубые)[1]
Шпоры (англ. The Spurs)
Лилово-белые (англ. The Lilywhites)
Синие (The Blues)[1], Пенсионеры (The Pensioners)[2]
Red Devils (Красные дьяволы)[1]
The Reds (Красные)[2]
</code>
Но мне надо чтоб были исключительно прозвища на русском языке и если б эти прозвища были в скобках или не в скобках то я б сейчас вопрос не задавал, а так по-разному. И как мне это исправить?

Попробуйте применить регулярные выражения

import re

txt = """Канониры (англ. The Gunners)
The Citizens (Горожане)[1]
The Blues (Голубые)[2]
Sky Blues (Небесно-голубые)[1]
Шпоры (англ. The Spurs)
Лилово-белые (англ. The Lilywhites)
Синие (The Blues)[1], Пенсионеры (The Pensioners)[2]
Red Devils (Красные дьяволы)[1]
The Reds (Красные)[2]"""

res = [x.strip() for x in re.findall(r'[а-яА-ЯёЁ \-]+', txt)]
res = list(filter(lambda x: x != '' and x != 'англ', res))
print(res)

['Канониры', 'Горожане', 'Голубые', 'Небесно-голубые', 'Шпоры', 'Лилово-белые', 'Синие', 'Пенсионеры', 'Красные дьяволы', 'Красные']


Python pandas множественный фильтр только по True условиям
Необходимо отфильтровать DataFrame по множесву фильтров. Но требуется чтобы филтр применялся только если условие фильтра выполняется.
Как есть:

frame = pd.DataFrame({"col_one": [1,2],
                      "col_two": [3,4]})

test_filter = frame[(frame["col_one"] == 1) &
                    (frame["col_two"] == 5)]

print(len(test_filter))
# Out 0

Хочется как то так:

frame = frame[(if 1 in listframe["col_one"]: frame["col_one"] == 1) &
               (if 5 in frame["col_two"]: frame["col_two"] == 5)]

print(len(frame))
# Out 1

Просьба подсказать решение.

Если я правильно понял ваши комментарии, то можно сделать через
query:

import pandas as pd

frame = pd.DataFrame({"col_one": [1,2],
                      "col_two": [3,4]})

filters = [
    "col_one == 1",
    "col_two == 5",
]

result = frame
for f in filters:
    tmp = result.query(f)
    if tmp.size > 0:
        result = tmp
print(result)

Вывод:

   col_one  col_two
0        1        3


Стандартный ввод множеств и их пересечение

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

Я пытался сделать задания. Но код все равно работает не так как надо.
<code>
a=int(input('Ввод числа через пробел'))
b=int(input('Ввод числа через пробел'))
c = sep(a)&sep(b)
for i in a:
    if i in c:
        continue
    for j in b:
        if i == j:
            c.append(i)
            break

print(c)
</code>

Сначала необходимо "нарезать" введенную строку вида "1 2 3 4 5" по пробелам с помощью
.split(), затем преобразовать каждое сочетание цифр в число
map(int,...), затем преобразовать последовательность целых чисел в множество
set(). После этого произвести операцию пересечения множеств -
intersection() или
&. Для вывода через пробел можно использовать преобразование целых чисел в строку также через
map() и объединение через пробел с помощью
' '.join()

a=set(map(int,input('Ввод числа через пробел: ').split()))
b=set(map(int,input('Ввод числа через пробел: ').split()))
c = a & b
print(' '.join(map(str,c)))

Ввод числа через пробел: 1 2 3 4 5
Ввод числа через пробел: 1 3 5 7 9
1 3 5

В принципе, поскольку в данном случае не предусмотрены арифметические операции над целыми числами, можно опустить преобразования из строки в целые числа и обратно, чем укоротить код. Также, при применении
set(a).intersection(b) не требуется явное преобразование
b в
set. Можно обойтись и без
join(), распаковав при печати множество с помощью
* и задав разделитель
sep=' ':

a = input('Ввод числа через пробел: ').split()
b = input('Ввод числа через пробел: ').split()
c = set(a).intersection(b)
print(*c,sep=' ')

Ввод числа через пробел: 1 2 3 4 5
Ввод числа через пробел: 1 3 5 7 9
1 5 3


discord.py / Ошибка отправки элементов из массива
Я открываю файл с диска, считываю его и полностью передаю в массив arr
После чего проверяю на количество элементов: если их меньше 20, то отправляю весь массив сразу.
Если их больше 20, то "разделяю" его на две части и отправляю на канал обе части отдельно.
В случае, если элементов меньше 20, все работает четко и как надо. Отправляются все элементы в нужном мне порядке.
Но если элементов больше, отправляется всего по 1 элементу массива.
Принтил массив, прежде чем вывести - все на месте, но в дискорд отправляется какая-то корявость.
<code>
with open("local.txt", "r") as onfile:

    arr = onfile.readlines()
    arrlen = len(arr)

    if arrlen < 20:
        full_data = ''.join(arr)
        await channel.send(full_data)
        print('STEP 1')

    elif arrlen > 19:

        i = 0
        while i < 19:
            full_data1 = ''.join(arr[i])
            i += 1

        await channel.send(full_data1)

        i = 20
        while i < arrlen:
            full_data2 = ''.join(arr[i])
            i += 1

        await channel.send(full_data2)

        print('STEP 2')
</code>
Для примера: если строк в файле меньше 20, то все идет и отправляется как и записано в файле:
Строчка1
Строчка2
Строчка3
Строчка4
Строчка5
и т.д
Если больше, то получается что-то в духе:
одно сообщешие: Строчка2
второе сообщение: Строчка6

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

На самом деле можно сделать так:
Считываем строки файла в список:

with open("local.txt", "r", encoding='utf-8') as file:
    lines = file.readlines()

Затем отправляем в канал первые 20 строк

await channel.send(''.join(lines[:20]))

После чего отрезаем только что отправленные элементы от списка

lines = lines[20:]

В какой-то момент вы обрежете последние элементы списка и он станет пустым. В этот момент нужно прекратить отправлять данные. Эту проверку можно реализовать с помощью цикла
while len(lines) > 0
Чтобы понять как работает обрезание списков, рекомендую почитать про срезы в Python
Полный код:

with open("local.txt", "r", encoding='utf-8') as file:
    lines = file.readlines()

while len(lines) > 0:
    await channel.send(''.join(lines[:20]))
    lines = lines[20:]


Автоматический парсинг текстовых таблиц

Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs   16G     0   16G   0% /dev
tmpfs          tmpfs     3.2G  1.1M  3.2G   1% /run
/dev/vda1      ext4      388G  230G  159G  60% /

Есть ли какие-то решения для автоматической конвертации чего-то подобного в список словарей, например?

[
    {
        "filesystem": "udev",
        "type": "devtmpfs",
        "size": "16G",
        "used": "0"
        ...
    },
    {
        "filesystem": "tmpfs",
        ...
    }
]

Колонки в вашем файле имеют фиксированную ширину, поэтому удобно использовать специально предусмотренную для таких случаев функцию
pd.read_fwf() fixed-width formatted c аргументом
widths= (или
colspecs=):

import pandas as pd
df = pd.read_fwf(r'c:\test\sample.txt', widths=[15, 10, 6, 5, 6, 5, 100])
print(df.to_json(orient='records', indent=2)) # или df.to_dict(orient='records')

[
  {
    "Filesystem":"udev",
    "Type":"devtmpfs",
    "Size":"16G",
    "Used":"0",
    "Avail":"16G",
    "Use%":"0%",
    "Mounted on":"\/dev"
  },
  {
    "Filesystem":"tmpfs",
    "Type":"tmpfs",
    "Size":"3.2G",
    "Used":"1.1M",
    "Avail":"3.2G",
    "Use%":"1%",
    "Mounted on":"\/run"
  },
  {
    "Filesystem":"\/dev\/vda1",
    "Type":"ext4",
    "Size":"388G",
    "Used":"230G",
    "Avail":"159G",
    "Use%":"60%",
    "Mounted on":"\/"
  }
]


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

a = "0,4,53"
for i in a:
    classes = int(i)

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

classes = 0,4,53

значения остались int, но перечислены через запятую. Тип стринг, массив и просто по очереди применять значения - не подходит.

a = "0,4,53"
classes = tuple(list(map(int, a.split(','))))

значение
classes = (0, 4, 53) это тоже самое, что
classes = 0, 4, 53


Python. Программа в которой пользователь вводит список чисел. После обработки программа должна выводить список квадратов этих чисел
Помогите пожалуйста понять где ошибки и почему программа не работает
<code>
x=[]
x=input()
x=x.split()
for j in x:
    x[j]=int(x[j])
for i in range(len(x)):
    x[i]=x[i]**2
print (x)
</code>

Ваш код неправильный во всем.
могу предложить свои варианты.
Если вы подаёте  в input() через запятую и пробел, то вот ваше решение:

x = input().split(', ') # вводите 1, 2, 3, 4
for i in range(len(x)):
    x[i] = int(x[i]) ** 2

print(x) # получаете [1, 4, 9, 16]

или

print(list(map(lambda x: int(x) ** 2, input().split(', '))))

Если вы подаете в input() значение в виде списка ([1, 2, 3, 4, 5]), то вот ваш код

print(list(map(lambda z: z ** 2, list(map(int, input().replace('[', '').replace(']', '').split(', '))))))
#при вводе [1, 2, 3, 4, 5] вы получите [1, 4, 9, 16, 25]


Помогите пожалуйста с кодом, выводит значения на 1 меньше
Итак, вот сама задача:
"Пифагоровы тройки"
Напишите программу, которая находит тройки натуральных чисел a,b,c таких, что
a⩽b⩽c⩽n и
a^2+b^2=c^2.
Заметьте, что таким образом, вы найдёте все прямоугольные треугольники с целочисленными сторонами.
Формат входных данных
В первой строке содержится целое число n (1⩽n⩽10^3).
Формат результата
Выведите тройки a,b,c в лексикографическом порядке.
Пример:
Входные Данные:

15

Результат:

3 4 5
5 12 13
6 8 10
9 12 15

Вот мой код:

def pif_triples(n):
    tmp = [k * k for k in range(1, n + 1)]
    res = []
    for i in range(1, n):
        for j in range(i, n):
            q = tmp[i] + tmp[j]
            if q in tmp:
                k = tmp.index(q)
                res.append((i, j, k + 1))
    return res

n = int(input())
for a in pif_triples(n):
    print(*a)

и при вводе 15, он выводит

2 3 5
4 11 13
5 7 10
8 11 15

Что делать, как поменять?

Индексация списков начинается с нуля. Чтобы получить соответствие чисел и их квадратов не по индексам, а по значениям, можно использовать словарь. Ваш код с минимальными изменениями, делающими его рабочим. Только сами изменённые строки:

tmp = {k: k * k for k in range(1, n + 1)} # словарь вместо списка
...
            if q in tmp.values(): # ищем в значениях словаря
                k = int(q**0.5)   # лучше создать обратный словарь, но и так сойдёт
                res.append((i, j, k)) # никаких k+1 не нужно

Вывод:

15
3 4 5
5 12 13
6 8 10
9 12 15

Этот код не оптимален, я просто указал на вашу ошибку и показал, как её можно исправить.
В принципе ваш код чинится ещё короче, но я считаю, что сам подход с обращением по индексам не очень хороший, тут нужно думать о соответствии. Словарь надёжнее. А так то можно починить и так:

tmp = [k * k for k in range(n + 1)] # начинаем список с нуля
...
               res.append((i, j, k)) # зачем там было +1 я так и не понял


Ожидание перед действием discord.py
Есть команда, нужно выполнить следующее действие по истечению условного таймера, пытался гуглить - не понял.
<code>
@bot.command()
@commands.has_permissions(administrator=True)
async def clear(ctx, count = 50):
    await ctx.send('Сейчас через какое то время делитнуца сообщения')
    #таймер
    await ctx.channel.purge(limit = count+2)
</code>

Импортируем
import asyncio после используем где нужно
await asyncio.sleep(count) на примере этого кода:

@bot.command()
@commands.has_permissions(administrator=True)
async def clear(ctx, count = 50):
    await ctx.send('Сейчас через какое то время делитнуца сообщения')
    await asyncio.sleep(2) #следующее действие произойдёт по истечению времени
    await ctx.channel.purge(limit = count+2)


Как сконвертировать в UNIX формат время вида "YYYY-MM-DDTHH:MM:SS+0000" (Python)
У меня есть время вида
<code>
YYYY-MM-DDTHH:MM:SS+0000
</code>
Как мне на Python получить с него unix timestamp?

pip install python-dateutil

from dateutil.parser import parse

print(
  repr(parse(
    '2020-12-12T10:11:15+0000'
  ))
)
# datetime.datetime(2020, 12, 12, 10, 11, 15, tzinfo=tzlocal())