Как вернуть упорядоченный список мероприятий?
Встроенные методы calendarAPI возвращают словарь с неупорядоченными ивентами.

class GoogleCalendar(object):

    def __init__(self):
        credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
        self.service = googleapiclient.discovery.build('calendar', 'v3', credentials=credentials)

    def get_events_list(self):
        # 2021-01-04T12:30:00+03:00
        now = datetime.datetime.utcnow().isoformat() + 'Z'
        day_end = datetime.datetime.now().date()
        time_end = str(day_end) + 'T23:59:59' + '+03:00'
        print('time end: ' + str(time_end))
        print("now time: " + str(now))
        print('Getting the upcoming 10 events')
        events_result = self.service.events().list(calendarId=calendarId,
                                                   timeMin=now,
                                                   timeMax = time_end,
                                                   singleEvents=True).execute()
        events = events_result.get('items', [])
        counter = 0
        event_dict = {}
        if not events:
            print('No upcoming events found.')
            return 'Нет предстоящих мероприятий'
        for event in events:
            counter                    += 1
            summary                     = event['summary']
            date_Time_start             = event['start'].get('dateTime', event['start'].get('dateTime'))
            date_Time_end               = event['end'].get('dateTime', event['start'].get('dateTime'))
            event_dict[str(counter)]    = [summary, date_Time_start, date_Time_end]
        for key in event_dict:
            print(key, '->', event_dict[key])
        return event_dict

calendar = GoogleCalendar()
events = calendar.get_events_list()

При минимальной перетасовке мероприятий код возвращает мероприятий в случайном порядке.
Собственно - вот вот вывод в консоль :

key -> value
  1 -> ['Вечерний: Донсков', None, None]
  2 -> ['Утренний: Русый', None, None]
  3 -> ['Ивент 2', '2021-01-06T19:30:00+03:00', '2021-01-06T20:30:00+03:00']
  4 -> ['Ивент 1', '2021-01-06T18:00:00+03:00', '2021-01-06T19:00:00+03:00']
  5 -> ['Ивент 3', '2021-01-06T21:15:00+03:00', '2021-01-06T22:15:00+03:00']

Подскажите, как я могу вернуть упорядоченный словарь или отсортировать его по времени?


Как найти дискорд тег человека, ник которого ты уже знаешь? [закрыт]

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

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

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

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

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

Можно. Держи:

for i in range(10):
    for j in range(10):
        for k in range(10):
            for n in range(10):
                print(f'NAME#{i}{j}{k}{n}')

Это все тэги.
client.get_user_info для поиска.
Только там с этим ником может быть сколько угодно людей ;)


Как конвертировать строку в дату?
Пытаюсь конвертировать дату:

Wed, 06 Jan 2021 12:56:00 +0200

в дату python, однако получаю ошибку.

re.error: redefinition of group name 'b' as group 8; was group 3 at position 211

Код

date_time_str = 'Wed, 06 Jan 2021 12:56:00 +0200'
date_time_obj = datetime.strptime(date_time_str, '%a,/%m %b /%y %H:%M:%S %z')

Подскажите, как конвертировать такой формат даты?

Вы указали неправильный формат.
Попробуйте так:

In [106]: datetime.strptime('Wed, 06 Jan 2021 12:56:00 +0200', '%a, %d %b %Y %H:%M:%S %z')
Out[106]: datetime.datetime(2021, 1, 6, 12, 56, tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)))

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

In [107]: datetime.strptime('Wed, 06 Jan', '%a, %d %b')
Out[107]: datetime.datetime(1900, 1, 6, 0, 0)

In [108]: datetime.strptime('Wed, 06 Jan 2021 12:56:00', '%a, %d %b %Y %H:%M:%S')
Out[108]: datetime.datetime(2021, 1, 6, 12, 56)

In [109]: datetime.strptime('Wed, 06 Jan 2021 12:56:00 +0200', '%a, %d %b %Y %H:%M:%S %z')
Out[109]: datetime.datetime(2021, 1, 6, 12, 56, tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)))


Вывести в датафрейм проценты от столбца
Есть df с df['Key'],df['Score'] - где Score это кол-во встречающихся Key. Нужно в новом датафрейме узнать сколько значений в процентах присуще каждому Key.

df
Key     Score
0       9.0
1       9.0
2       0.0
3       6.0
4       9.0
5       6.0
6       3.0
7       9.0
8       9.0
9       7.0

Узнаем сколько здесь строк - в нашем случае будет 10

a = df_result.shape[0]
Теперь нужно узнать какое кол-во значений в этих 10 ти строках наибольшее кол-во. Сейчас мы знаем что Девяток (9.0) здесь пять штук, от 10ти это 50%. Цифр 6 здесь две, это 20%.
Хочу получить новый df, в котором будет так:

Key     %
0       10
1       0
2       0
3       10
4       0
5       0
6       20
7       10
8       0
9       50

Тоесть мы каждому ключю прописали сколько раз он встречается в df['Score']


извлечение данных из Дата фрейм с несколькими колонками
Как правильно извлечь данные из дата фрейма? Код ниже не работает:
<code>
for Device, Host in df_r0[["Device","Host"]]:
    print ( Device, Host)
</code>
В самом дата фрейме два столбца с заголовками Device и Host. В одном название маршрутизатора, в другом его адрес.

Чтобы последовательно получить значения из столбцов, можно воспользоваться iterrows(). Генератор возвращает индекс и значения столбцов из одного ряда. Можно сразу их  и распаковать
<code>
for i, (Device, Host) in df_r0[["Device","Host"]].iterrows() :
    print (Device, Host)
</code>


Ошибка импорта модуля librosa в python 3.9.0
Есть кусок кода на Python для загрузки библиотек для анализа аудиоданных:
<code>
import librosa
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import os
from PIL import Image
import pathlib
import csv
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
import keras
from keras import layers
from keras import layers
import keras
from keras.models import Sequential
import warnings
warnings.filterwarnings('ignore')
</code>
После установки модуля librosa (pip install librosa) импорт все равно ругается на этот модуль.

Если у тебя установлено несколько версий Python, то в Path переменных среды в свойствах компьютера строка версии, на которой работаешь, должна стоять выше остальных.
После этото провести pip istall librosa


Аналог Python генераторов на C++
Можно ли как-то заставить
C++ код работать как-то схоже с кодом на
python, который называются генераторы, "не изобретая при этом новую Теорию Относительности".
Например, последовательность Фибоначчи:

def fib():
    f = 1
    s = 0
    while True:
        yield s
        f, s = s, s+f

k = fib()
for i in range(10):
    print(next(k))

Пробовал так, но, думаю, что есть какие-то более "правильные" варианты ?

int fib(){
    static int f=1, s=0;
    int t=f;
    f = s;
    s += t;
    return s;
}

int main(){
    for(int i=0; i<10; ++i)
        cout << fib() << ' ';
    return 0;
}

Как минимум, мой аналог "одноразовый" (нельзя начать последовательность заново).

Например так (с созданием экземпляра объекта и использованием оператора вызова функции):
<code>
class Fib {
public:
    int operator()()
    {
        int t = f;
        f = s;
        s += t;
        return s;
    }
private:
    int f = 1;
    int s = 0;
};

int main() {
    Fib k;
    for (int i = 0; i < 10; ++i)
        std::cout << k() << ' ';
}
</code>


Python. Матрицы
Есть матрица NxN.
Необходимо заполнить единицами часть матрицы от главной диагонали до верхнего правого угла, но не трогать элементы, которые лежат на левой половине матрицы. Если N нечетное, в центральном столбце тоже должны быть единицы.
Как нужно сделать исключение для левой половины?
<code>
import random
N = int(input("Разряд: "))
matrix = [[random.randrange(-10,10) for y in range(N)] for x in range(N)]
print("Начальная матрица: ",matrix)
for i in range(N):
    for j in range(N):
        if j > i:
            matrix[i][j] = 1

print("Конечная матрица: ",matrix)
</code>

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

add = (N+1) % 2
for i in range(N):
    for j in range(i+add,N):
        matrix[i][j] = 1

весь код

import random
from pprint import pprint

N = int(input("Разряд: "))
matrix = [[random.randrange(0,9) for y in range(N)] for x in range(N)]
print("Начальная матрица: ")
pprint(matrix)
add = (N+1) % 2
for i in range(N):
    for j in range(i+add,N):
        matrix[i][j] = 1
print("Конечная матрица: ")
pprint(matrix)

вот, что получается в одном случае

Разряд: 3
Начальная матрица:
[[7, 4, 3], [7, 5, 3], [3, 5, 5]]
Конечная матрица:
[[1, 1, 1], [7, 1, 1], [3, 5, 1]]

и во втором

Разряд: 4
Начальная матрица:
[[8, 5, 7, 5], [6, 0, 8, 1], [8, 7, 4, 0], [8, 4, 6, 6]]
Конечная матрица:
[[8, 1, 1, 1], [6, 0, 1, 1], [8, 7, 4, 1], [8, 4, 6, 6]]


Python. Матрицы и двухмерные массивы
Всем привет, с праздниками. Пишу с такой проблемой: не до конца понимаю работу циклов с матрицами. Нашёл туториал на паскале по схожему заданию, пробую вот как-то перевести на Python, но пока не очень получается, вот что сделал и вроде логически понимаю задачу, но не могу реализовать на коде. Пока такое есть. Сама задача:
-Есть матрица NxN и число К. Столбец с минимальным по модулю элементом в k-той строке переставить с k-тым столбцом. Мой код:
<code>
import random
n = int(input("Розряд: "))
matrix = [[random.randrange(-10,10) for y in range(n)] for x in range(n)]
print("Начальная матрица: ",matrix)
k = int(input("Число К:" ))
tmp = []
maxcol = 0
max = 1
#номер макс. по модулю элемента k строки и его номер (столбец)
for i in range(n):
    if max < abs(matrix[k, i]):
        max = abs(matrix[k, i])
        maxcol = 1
#переставляем столбцы
for i in range(n):
    tmp = matrix[i, k]
    matrix[i, k] = matr[i, maxcol]
    matrix[i, maxcol] = tmp
#вывод матрицы
for i in range(n):
    for j in range(n):
        print...
</code>

Я точно не понял, что вам нужно, но заметил пару ошибок в коде:

Обращаться к элементу матрицы нужно вот так:

matrix[строка][столбец]

Если вам нужно найти минимальный элемент, то переменной
max нужно присвоить максимальное значение + 1. Я так понимаю максимальное значение элемента в матрице у вас будет 10.
Значит присваиваем
max = 11

В первом цикле вы проверяете
max < abs(matrix[k, i]), то есть если элемент матрицы больше, то вы делаете какие либо действия, а вам нужно найти минимальный элемент.
По этому пишем:

if abs(matrix[k][i]) < max:

Ну а сам цикл просто проходится по элементом
k-ой строки, тут я думаю все понятно.

Далее у вас изначально
tmp это пустой массив, я думаю раз
tmp используется для перестановки, то это должно быть число, то есть
tmp = 0.
И во втором цикле у вас опечатка не
matr а
matrix должно быть.

Ну и вот пример вывода матрицы:

for i in range(n):
    for j in range(n):
        print(matrix[i][j], end = ' ')
    print()

Полный код:

import random
n = int(input("Разряд: "))
matrix = [[random.randrange(-10,10) for y in range(n)] for x in range(n)]
print("Начальная матрица: ",matrix)
k = int(input("Число К:" ))
tmp = 0
maxcol = 0
max = 11
#номер макс. по модулю элемента k строки и его номер (столбец)
for i in range(n):
    if abs(matrix[k][i]) < max:
        max = abs(matrix[k][i])
        maxcol = i
#переставляем столбец
for i in range(n):
    tmp = matrix[i][k]
    matrix[i][k] = matrix[i][maxcol]
    matrix[i][maxcol] = tmp
#вывод матрицы
for i in range(n):
    for j in range(n):
        print(matrix[i][j], end = ' ')
    print()


почему выводит none [закрыт]

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

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

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

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

четвертый день как стал изучать программирование и столкнулся с этим, в чем проблема должно записывать в .txt login а записывает None
<code>
введите сюда код

from tkinter import *

asd = Tk()

#asd.resizable(False, False)
asd.geometry('340x80+760+470')
asd.title("****")
asd.iconbitmap('C:/*****')
asd['bg'] = '#474747'

text = Label( text = 'Login', font = 'Comfortaa 14',
    fg = '#1cbced',
    bg = '#474747',
    padx= 6,
    pady=5).grid()

login = Entry (asd, font = 'consolas 15',
    fg = '#ccc', # цвет текста
    bg = '#474747', # фоновый цвет кнопки
    relief = 'solid',width = 15,selectbackground = '#000', ).place(x = 65,y = 5 )

text_pas = Label(asd, text = 'Pass', font = 'Comfortaa 14',
    fg = '#1cbced',
    bg = '#474747',
    padx= 6,
    pady=5).grid()

def logacc():
    file = open('zxc.txt', "a" )
    file.write(str(login))

pas= Entry (asd, font = 'consolas 15',
    fg = '#ccc', # цвет текста
    bg = '#474747', # фоновый цвет кнопки
    relief = 'solid',width = 15).place(x = 65,y = 40)

butt_save = Button(text='SAVE',font = 'consolas 10', bg='#1cdfed',highlightcolo='#ed1cd8', width =12, command = logacc
    ).place(x=245 ,y= 6,)

name = Entry (asd, font = 'consolas 15',
    fg = '#ccc', # цвет `введите сюда код`текста
    bg = '#474747', # фоновый цвет кнопки
    relief = 'solid',width = 8).place(x = 245,y = 40)

text_name = Label(asd, text = 'name', font = 'Comfortaa 8',
    fg = '#1cbced',
    bg = '#474747',height=1).place(x=295, y=60)

asd.mainloop()
</code>

Замените на:

login = Entry(asd, font = 'consolas 15', fg='#ccc', bg='#474747', relief='solid', width=15, selectbackground='#000')
login.place(x=65, y=5)

И потом
login.get(). Потому что сейчас у Вас
login - значение функции
place(), которая ничего не возвращает.


Соответствие столбцов в двух фреймах данных
Есть два неравных между собой фрейма данных. В одном тысяча строк (
df1), в другом несколько (
df2)).

df1

Data number act1
2020 1      0
2019 4      0
2018 4      0
2017 5      0
2016 2      0
2015 5      0

df2

number act2
1      0
2      Yes
3      0
4      Yes
5      0

Как записать значения для каждых
act1 из
df1, значениями столбца
act2 из
df2 чтобы это все соответствовало общим
number?

df1

Data number act2
2020 1      0
2019 4      Yes
2018 4      Yes
2017 5      0
2016 2      Yes
2015 5      0

Пример:

In [35]: df1["new"] = df1["number"].map(df2.set_index("number")["act2"])

In [36]: df1
Out[36]:
   Data  number  act1  new
0  2020       1     0    0
1  2019       4     0  Yes
2  2018       4     0  Yes
3  2017       5     0    0
4  2016       2     0  Yes
5  2015       5     0    0

PS я специально для наглядности присвоил результат в новый столбец. В реальной задаче можно присвоить его обратно:

df1["act1"] = df1["number"].map(df2.set_index("number")["act2"])

результат:

n [40]: df1
Out[40]:
   Data  number act1
0  2020       1    0
1  2019       4  Yes
2  2018       4  Yes
3  2017       5    0
4  2016       2  Yes
5  2015       5    0


Python. Проблема в списках и циклах
Нужно напечатать все разные слова и указать для каждого количество повторений в тексте. До этого нужно было разбить текст на список по коме и убрать точку, но с этим, вроде бы, проблем нету и успешно это сделал. Есть вот ошибка в 7 и 8 строке, вместо переменной z я могу сделать print и оно будет успешно выводить, но оно выводит не так как нужно. Хочу что бы вывод был так, что каждое слово только по одному разу и около него цифра, сколько раз повторяется.
Мой код:
<code>
text = input("текст: ")
#Nastya, Cat, Eat, Nastya, Love.
text = text.replace(".", "")
words = list(text.split(", "))
b = words
z = 0
for i in b:
    z = (i, words.count(i))
print(z)
print(list(set(words)))
</code>

Так, что-ли

text = input("текст: ")
#Nastya, Cat, Eat, Nastya, Love.
text = text.replace(".", "")
words = list(text.split(", "))
b = set(words)
z = 0
for i in b:
    z = (i, words.count(i))
    print(z)

Результат:

('Cat', 1)
('Nastya', 2)
('Love', 1)
('Eat', 1)


Какая лучшая практика использования try-except в функциях?
В каких случаях нужно использовать блоки
try-except в функциях, а в каких их не рекомендованно или вообще нельзя использовать?
Как лучше перехватывать и обрабатывать исключения и ошибки - с блоком или без? Интересует best practice для разработчика.

Уточняющий комментарий.
Я и курсы проходил и сам использую try exception во всех функциях. Недавно при работе с deno (JS) опытный разработчик, сказал, чтобы я не использовал
try-catch вообще, кроме случая код я не могу предусмотреть все возможные ошибки.
В связи с этим у меня возник вопрос - а на сколько правильно и оправданно использования
try-except во всех функциях в которых идет вызов каких-то библиотек?
Пример кода функции с try except. На сколько он корректный и оптимальный с точки зрения обработки исключений?

async def GetPrices(symbol, exchange, limit=10):

    sellPrice = None
    buyPrice = None

    while True:
        try:
            orderBook = await exchange.fetchOrderBook(symbol, limit=limit)
            bidsPrice, bidsAmount = map(list, zip(*orderBook['bids']))
            asksPrice, asksAmount = map(list, zip(*orderBook['asks']))

            buyPrice = np.average(bidsPrice, weights = bidsAmount)
            sellPrice = np.average(asksPrice, weights = asksAmount)
            break

        except ccxt.RequestTimeout as e:
            log.error("Exchange %s  %s  %s", exchange.name, '[' + type(e).__name__ + ']', str(e)[0:200])
            # will retry
        except ccxt.DDoSProtection as e:
            log.error("Exchange %s  %s  %s", exchange.name, '[' + type(e).__name__ + ']', str(e)[0:200])
            # will retry
        except ccxt.ExchangeNotAvailable as e:
            log.error("Exchange %s  %s  %s", exchange.name, '[' + type(e).__name__ + ']', str(e)[0:200])
            # will retry
        except ccxt.ExchangeError as e:
            log.error("Exchange %s  %s  %s", exchange.name, '[' + type(e).__name__ + ']', str(e)[0:200])
            break  # won't retry
        except Exception as e:
            log.error("Exchange %s  %s  %s", exchange.name, '[' + type(e).__name__ + ']', str(e)[0:200])
            break  # won't retry

    return sellPrice, buyPrice

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

# NOTE: DONT'T DO THIS !!!
try:
    #do_something...
except Exception as e:
    print("видимо что-то пошло не так")

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

def to_float(num_str: str) -> float:
    try:
        return float(str(num_str).replace(",", "."))
    except ValueError as exc:
        print(f"Значение [{num_str}] не может быть преобразовано в вещественное число")

тесты:

In [52]: to_float(1.23)
Out[52]: 1.23

In [53]: to_float("3.14")
Out[53]: 3.14

In [54]: to_float("1,23")
Out[54]: 1.23

In [55]: to_float("nan")
Out[55]: nan

In [57]: to_float("1e-3")
Out[57]: 0.001

In [74]: to_float("10a")
Значение [10a] не может быть преобразовано в вещественное число


Реализация класса в Python 3.7 [закрыт]

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

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

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

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

Подскажите, пожалуйста, как этот код реализовать через класс
Код:
<code>
A = [[1, 4], [2, 6]]

s = ''

for row in A:
    for cell in row:
        s += f'{cell} '
    s += '\n'

print(s)
</code>

Элементарно:
<code>
class C():

    A = [[1, 4], [2, 6]]

    s = ''

    for row in A:
        for cell in row:
            s += f'{cell} '
        s += '\n'
    print(s)

C()
</code>


Вопросы про pythonw
Недавно узнал про запуск файлов с помощью команды
pythonw, но не нашел интересующие меня вопросы:

Данная команда интерпретирует файл в скрытом шелле или где то в другом месте? В чем различия между
pythonw и
python?
После завершение программы шелл остается открытым? Нужно ли его закрывать самостоятельно внутри кода?

pythonw не открывает окно консоли, используется в основном для работы с GUI либо в фоновом режиме. Закрывается при завершении программы.
Пример: PyQt при запуске через
python всегда будет иметь консоль на фоне. Через
pythonw будет только окно PyQt.
Пример 2 сервер работающий в фоне без отрисовки консоли. Нужно проработать условие закрытия или закрывать через диспетчер так как взаимодействовать с ним сложнее в таком режиме.


Как суммировать значения словаря, у которого ключи - это даты? [закрыт]

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

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

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

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

Как суммировать значения словаря, у которого ключи - это даты?
Cуммировать нужно только те значения, ключи которых в сумме не более 7-ми дней.
<code>
d = {'2020-10-04': 9,
     '2020-10-05': 6,
     '2020-10-07': 3,
     '2020-10-10': 3,
     '2020-10-20': 6}

</code>

Как-то так:
<code>
import datetime as DT

def str_to_date(string):
    return DT.datetime.strptime(string, '%Y-%m-%d').date()

_dict = {'2020-10-04': 9,
     '2020-10-05': 6,
     '2020-10-07': 3,
     '2020-10-10': 3,
     '2020-10-20': 6,
}
delta = DT.timedelta(days=7)

summs = []
keys = sorted(_dict.keys())
idx = 0
while keys:
    summs.append(0)
    date = str_to_date(keys[0])
    while keys and (str_to_date(keys[0]) - date < delta):
        summs[idx] += _dict[keys.pop(0)]
    idx += 1
print(summs)
</code>


ошибка числа с плавающей точкой в Python [закрыт]

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

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

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

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

<code>
import time
i=0
while True:
    print(i)
    i= i+0.1
    time.sleep(0.1)
    round(i, 1)
</code>

результат функции
round надо чему-то присваивать

i = round(i, 1)

а не как это сделали вы


Преобразование данных из таблицы в словарь
помогите пожалуйста со следующей проблемой.
Данные из таблицы отображаются в Python в виде списка списков:

[
    ['S1', 'G1', 'T1', 'N', 'TN1'],
    ['S1', 'G1', 'T1', 'P', 'TP1'],
    ['S1', 'G2', 'T2', 'N', 'TN2'],
    ['S1', 'G2', 'T2', 'P', 'TP2'],
    ['S2', 'G3', 'T3', 'N', 'TN3'],
    ['S2', 'G3', 'T3', 'P', 'TP3']
]

Мне нужно, преобразовать список список в словарь такого типа:

{
    'S1': {
        'G1': {
            'T': 'T1',
            'P': 'TP1',
            'N': 'TN1'
        },
        'G2': {
            'T': 'T2',
            'P': 'TP2',
            'N': 'TN2'
        },
    },
    'S2': {
        'G3': {
            'T': 'T3',
            'P': 'TP3',
            'N': 'TN3'
        }
    }
}

Как это сделать? Заранее спасибо


Почему не работает сохранение фото на сервере Telegram Bot Python [закрыт]

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

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

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

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

Мне надо сделать телеграм бота на python написал весь код но он почему-то не работает
<code>
file_photo = bot.get_file(user.photo_id)
filename, file_extension = os.path.splitext(file_photo.file_path)
downloaded_file_photo = bot.download_file(file_photo.file_path)

src = 'photos/' + user.photo_id + file_extension
with open(src, 'wb') as new_file:
    new_file.write(downloaded_file_photo)
</code>
Помогите разобраться может что то надо подправить
Заранее спасибо!

Путь где я выполняю код вот такой: /project/telegram/main.py
Надо просто указать такой путь ../photos/ тогда все заработает


Как извлечь число, обрамлённое префиксом и суффиксом?
Есть константные строковые префикс и суффикс. Приходит динамическая строка вида "положительное целое число, обрамлённое префиксом и суффиксом". Надо достать это число в переменную типа
int.
Можно ли сделать это проще/лучше?

prefix = '['
suffix = ']'

x = prefix + str(42) + suffix

print(int(x.removeprefix(prefix).removesuffix(suffix)))

Например, 1 проходом удалить префикс и суффикс. Или, в предположении что префикс и суффикс односимвольные, сразу преобразовывать в
int, игнорируя символы префикса и суффикса, без манипуляций со строками.

Универсальный вариант с использованием RegEx - удаляем из строки все "не цифры":

import re

res = int(re.sub(r"\D", "", x))

Вариант для заранее известных префикса и суффикса любой длины:

res = int(x[len(prefix):-len(suffix)])

Вариант для любых односимвольных префикса и суффикса:

res = int(x[1:-1])


Импорт класса из другого файла
Я имею файл main.py в котором есть код:

import pygame
import os
import sys
import random as rand
from player import Player

def load_image(name, colorkey=None):
    fullname = os.path.join('data', name)
    # если файл не существует, то выходим
    if not os.path.isfile(fullname):
        print(f"Файл с изображением '{fullname}' не найден")
        sys.exit()
    image = pygame.image.load(fullname)
    if colorkey is not None:
        image = image.convert()
        if colorkey == -1:
            colorkey = image.get_at((0, 0))
        image.set_colorkey(colorkey)
    else:
        image = image.convert_alpha()
    return image

pygame.init()
pygame.display.set_caption('Battle City')
size = (500, 500)
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()
FPS = 60
width = height = 25
player = None
enemies = []
all_sprites = pygame.sprite.Group()
tiles_group = pygame.sprite.Group()
player_group = pygame.sprite.Group()
enemy_group = pygame.sprite.Group()
tile_images = {
    'wall': load_image('wall.png'),
    'empty': load_image('empty.png'),
    'iron-wall': load_image('iron-wall.png'),
    'water': load_image('water.png'),
    'base': load_image('base.png'),
    'star': load_image('star.png'),
    'grenade': load_image('grenade.png'),
    'shovel': load_image('shovel.png')
}
player_image = load_image('player.png')
enemy_image = load_image("enemy1.png")
bullet_image = load_image('bullet.png')

tile_width = tile_height = 20

class Player(pygame.sprite.Sprite):
    def __init__(self, pos_x, pos_y, health, speed):
        super().__init__(player_group, all_sprites)
        self.image = player_image
        self.rect = self.image.get_rect().move(
            tile_width * pos_x, tile_height * pos_y)
        self.x, self.y = pos_x, pos_y
        self.angle = 0
        self.top = self.down = self.left = self.right = False
        self.last_direction = "top"
        self.tile_type = "player"
        self.hp = health
        self.speed = speed
        self.damage = 5
        self.died = False

    def get_position(self):
        return self.rect.x, self.rect.y

    def move(self):
        if self.left:
            self.rotate_player("left")
            self.rect.x -= self.speed
        elif self.right:
            self.rotate_player("right")
            self.rect.x += self.speed
        elif self.top:
            self.rotate_player("top")
            self.rect.y -= self.speed
        elif self.down:
            self.rotate_player("down")
            self.rect.y += self.speed

    def rotate_player(self, side):
        self.image = pygame.transform.rotate(self.image, -self.angle)
        self.angle = 0
        if side == "left":
            self.image = pygame.transform.rotate(self.image, 90)
            self.angle += 90
        elif side == "right":
            self.image = pygame.transform.rotate(self.image, 270)
            self.angle += 270
        elif side == "top":
            pass
        elif side == "down":
            self.image = pygame.transform.rotate(self.image, 180)
            self.angle += 180
        self.last_direction = side

    def check_position(self):
        if self.rect.x < 0:
            self.left = False
            self.rect.x += 1
        elif self.rect.x + 20 > size[0]:
            self.right = False
            self.rect.x -= 1
        elif self.rect.y < 0:
            self.top = False
            self.rect.y += 1
        elif self.rect.y + 20 > size[1]:
            self.down = False
            self.rect.y -= 1

    def check_collision(self):
        for sprite in all_sprites:
            if pygame.Rect.colliderect(self.rect, sprite.rect) and sprite.tile_type in \
                    ("wall", "iron-wall", "water", "base", "grenade", "shovel", "star", "enemy"):
                if self.last_direction == "left":
                    self.rect.x += 1
                    self.left = False
                elif self.last_direction == "right":
                    self.rect.x -= 1
                    self.right = False
                elif self.last_direction == "top":
                    self.rect.y += 1
                    self.top = False
                elif self.last_direction == "down":
                    self.rect.y -= 1
                    self.down = False

    def death(self, damage):
        self.hp -= damage
        if self.hp <= 0:
            self.died = True

    def update(self, *args):
        screen.blit(self.image, (self.rect.x, self.rect.y))
        if args and args[0].type == pygame.KEYDOWN:
            if args[0].key == pygame.K_LEFT:
                self.left = True
            elif args[0].key == pygame.K_RIGHT:
                self.right = True
            elif args[0].key == pygame.K_UP:
                self.top = True
            elif args[0].key == pygame.K_DOWN:
                self.down = True
        elif args and args[0].type == pygame.KEYUP:
            if args[0].key == pygame.K_LEFT:
                self.left = False
            elif args[0].key == pygame.K_RIGHT:
                self.right = False
            elif args[0].key == pygame.K_UP:
                self.top = False
            elif args[0].key == pygame.K_DOWN:
                self.down = False
        self.check_position()
        self.check_collision()
        self.move()

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

Думается мне, что лучше будет сделать так:
vars.py

#ваши переменные, которые вы не хотите переписывать
player.py

#class Player(): ....
main.py

from player import Player
from vars import *
...


Архитектура базы данных для товаров у который цена различается в зависимости от цвета
Использую python 3.9, Django 3 и MySQL 8.
Подскажите пожалуйста как можно реализовать таблицы в БД в такой ситуации (и как потом выводить только один из товаров на странице каталога товаров):
Допустим у меня есть товар "Коляска №1". Она может иметь три цвета: белый, красный, синий.
Коляска № 1 белая - 20 000 р.
Коляска № 1 красная - 21 000 р.
Коляска № 1 синяя - 19500 р.
Также есть товар Коляска № 2. Она также может иметь несколько цветов: белый,  оранжевый, коричневый.
Коляска № 2 белая - 11 000 р.
Коляска № 2 оранжевая - 10 000 р.
Коляска № 2 коричневая - 11500 р.
Т.е. каждый товар может иметь несколько цветов и для каждого цвета будет своя цена. При этом один и тот же цвет может быть у нескольких товаров.
При этом на странице каталога товаров я хочу выводить только один товар (любого цвета) и уже внутри в карточке товара покупатель будет выбирать цвет.
Заранее спасибо, тем кто откликнется!

<code>
create table colors(
  id
  name varchar(255)
);

create table products(
  id
  name varchar(255),
  description text
);

create table product_variants (
  id
  product_id
  color_id
  default_variant bool,
  price numeric(8,2)
);
</code>
я бы сделал примерно так.


Как убрать символы из строки, которая вернулась из базы данных?
Строка возвращается из базы данных в таком формате:

('text',)

Как это дело обрезать и оставить только
text?

При чтении данных из БД с использованием методов
cursor.fetchone(),
cursor.fetchall() - вы всегда получаете кортежи с данными, в не зависимости от того сколько столбцов таблицы вы читаете - один или несколько.
Судя по тому, что вы получаете строку
"('text',)" вместо кортежа
('text',), вы неправильно обрабатываете полученные из БД кортежи с данными. А именно применяете
str() к полученному из БД кортежу данных:
Пример того, как делать не нужно:

cur.execute("SELECT text_col FROM table_name")
for row in cur.fetchall():
    text = str(row)  # <-- опасное и ненужное преобразование кортежа с данными в строку!
    print(text)

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

cur.execute("SELECT text_col FROM table_name")
for row in cur.fetchall():
    text = row[0]
    # дальше мы используем text


Несколько тернарных операторов в выражении

x = (1 if True else 2
     + 3 if True else 4
     + 5 if False else 6)
print(x)

Выводит
1. Можно ли подобным синтаксисом получить
10 без нескольких statement-ов?

Да, можно. Нужно расставить скобки:
<code>
x = ((1 if True else 2)
     + (3 if True else 4)
     + (5 if False else 6))
</code>


Тормозит распознавание речи
Есть простой код на
python по распознаванию голоса с использованием библиотеки
speech_recognition:

import speech_recognition

if __name__ == "__main__":

    # инициализация инструментов распознавания и ввода речи
    recognizer = speech_recognition.Recognizer()
    microphone = speech_recognition.Microphone()

    while True:
        # старт записи речи с последующим выводом распознанной речи
        voice_input = record_and_recognize_audio()
        print(voice_input)

Уже на этапе обработки голоса зависает секунд на 10-15...
Как можно повысить скорость работы сервиса? Куда копать?

Тестировал на разных мощностях разных серверов, но видно, это особенность облачного распознавания от SpeechRecognition.
Перешел на библиотеку Vosk с предобученными моделями Kaldi, и скорость увеличилась раз в десять.


Отправка сообщения aiogram
Допустим, я создал бота. Начал с ним общение. Как я могу ботом отправлять себе сообщение, т.е, без использования хэндлеров, чтобы к примеру раз в какое-то время бот именно мне присылал сообщение?

Нашел решение, но я уверен, что это самое худшее из всех решений, что могли быть.
Буду рад, если подскажете, что-то элегантнее.
<code>
import asyncio
from aiogram import Bot

token = 'token'
bot = Bot(token)

async def gg():
    while True:
        await bot.send_message(id, msg)
        asyncio.sleep(10)

asyncio.run(gg())
</code>


Python Узнать все о процессоре
Я хочу написать программу которая будет
отпровлять данные о компьютере в базу данных и я бы хотел узнать как я могу получить характеристики процессора в
python
Мне надо:

Получение полного имени процессора, по типу "Intel Core i7"
Получать Ghz процессора

Вы можете установить пакет
cpuinfo:

pip3 install py-cpuinfo

Что бы получить имя процессора:

import cpuinfo
cpuinfo.get_cpu_info()['brand_raw']

Вывод:

'Intel(R) Core(TM) i3-8145U CPU @ 2.10GHz'


Как сделать умный time.sleep()?
Мне нужно, чтобы программа при загрузке новой вкладки или процесса выполняла
sleep(), но этот метод неудобный, так как непонятно, сколько именно времени программа будет загружаться.
Есть ли замена данному методу и какая?

У Selenuim-a есть метод
WebDriverWait.until(), по которому можно судить о "готовности" загрузки важной части станицы:

class element_has_css_class(object):
  """An expectation for checking that an element has a particular css class.

  locator - used to find the element
  returns the WebElement once it has the particular css class
  """
  def __init__(self, locator, css_class):
    self.locator = locator
    self.css_class = css_class

  def __call__(self, driver):
    element = driver.find_element(*self.locator)   # Finding the referenced element
    if self.css_class in element.get_attribute("class"):
        return element
    else:
        return False

# Wait until an element with id='myNewInput' has class 'myCSSClass'
wait = WebDriverWait(driver, 10)
element = wait.until(element_has_css_class((By.ID, 'myNewInput'), "myCSSClass"))


Случайное отправка сообщения из массива для бота на dicrord.py [закрыт]

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

 Скорее всего, данный вопрос не соответствует тематике Stack Overflow на русском, согласно правилам описанным в справке.

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

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

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

случайное значение из массив можно получить с помощью
random.choice пример:

import random

arr = [0, 2, 3, 5]

print(random.choice(arr))


Неверный счет в переменной
<code>
print("start")
start = {"x":20, "y":20};
print(start)
print("startingPos")
startingPos = start;
print(startingPos)

def refreshCoords(directions,startingPos):
    if directions == "^":
        startingPos = {"x":startingPos["x"], "y":startingPos["y"]+1};
    if directions == "v":
        startingPos = {"x":startingPos["x"], "y":startingPos["y"]-1};
        return startingPos
    if directions == ">":
        startingPos = {"x":startingPos["x"]+1, "y":startingPos["y"]};
    if directions == "<":
        startingPos = {"x":startingPos["x"]-1, "y":startingPos["y"]};

def walker(direction,startingPos):
    print(refreshCoords(direction,startingPos))

for i in range(1,10,1):
    walker("v",startingPos)
</code>
Нужна помощь в разъяснение, не понимаю почему при вызове walker("v",startingPos), "Y" меняется только один раз, а дальше значение повторяется. Надо что бы, он менялся столько раз сколько надо ( в данном примере что бы он изменялась с 20 до 10 при вызове функции). В чем ошибка в этом коде?

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

print("start")
start = {"x":20, "y":20}
print(start)
print("startingPos")
startingPos = start
print(startingPos)

def refreshCoords(directions, oldPos):
    newPos = oldPos

    if directions == "^":
        newPos = {"x":oldPos["x"], "y":oldPos["y"]+1}
    if directions == "v":
        newPos = {"x":oldPos["x"], "y":oldPos["y"]-1}
    if directions == ">":
        newPos = {"x":oldPos["x"]+1, "y":oldPos["y"]}
    if directions == "<":
        newPos = {"x":oldPos["x"]-1, "y":oldPos["y"]}

    return newPos

def walker(direction, oldPos):
    newPos = refreshCoords(direction, oldPos)
    print(newPos)
    return newPos

newPos = startingPos
for i in range(1,10,1):
    newPos = walker("v",newPos)


Как сайту получать данные о компьютере
Я не давно узнал о такой программе как Intel Driver & Support! И она работает таким образом:

Вы скачиваете программу и устонавливаете\
На сайте нажимаете кнопку \
Сайт получает все данные вашего пк

И я бы хотел узнать как это можно реолизовать на
python,
html,
javascript?

С помощью свойства
appVersion(объект
Navigator) можно узнать версию браузера,
свойства
appName – название браузера, свойства
appCodeName – кодовое
название браузера, свойства
platform– ОС, которую использует
пользователь.
Используется как-то так(с помощью
свойства
userAgent можно вывести на страницу информацию о браузере
пользователя):

document.write('Информация о браузере:'+navigator.userAgent);

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


Проблема с бесконечным циклом

Почему в выводе получается бесконечный цикл?
По идее при вводе 4-го X цикл должен был завершится, но этого не происходит..
Может я что то упустил в коде?

<code>
def profile (name, **db):
"""Пример регистрации на сайте"""
print(f"{name}:")

while True:
    y = input("О чём данные?: ")
    x = input("Введите данные: ")
    db[y] = x
    if x:
        y1 = input("О чём данные?: ")
        x1 = input("Введите данные: ")
        db[y1] = x1
    elif x1:
        y2 = input("О чём данные?: ")
        x2 = input("Введите данные: ")
        db[y2] = x2
    elif x2:
        y3 = input("О чём данные?: ")
        x3 = input("Введите данные: ")
        db[y3] = x3
    elif x3:
        y4 = input("О чём данные?: ")
        x4 = input("Введите данные: ")
        db[y4] = x4
    elif x4:
        print("-Введенно достаточно данных-")
        break

for key,value in db.items():
    print(f"\t{key} - {value}")

profile("Josh")
</code>

Вы, кажется, предполагаете что после
if True: может выполнится
elif True:. Нет, в цепочке
if/elif/elif/.../elif/else всегда срабатывает только один вариант. Что приводит к такому порядку ввода:

while
y, x, y1, x1
while
y, x, y2, x2
while
y, x, y3, x3
while
y, x, y4, x4
while
y, x
print
break

Чтобы поправить замените везде
elif на
if. А ещё лучше переработайте на ввод одной пары
x,
y в цикле до тех пор пока размер
db не станет равен пяти.

while len(db) < 5:
    y = input("О чём данные?: ")
    x = input("Введите данные: ")
    db[y] = x
print("-Введенно достаточно данных-")


Как одна программа может взять вывод другой программы? [закрыт]

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

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

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

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

Во-первых, программа 1 должна запустить программу 2.
Программа 2 посчитает некоторые математические действия, и ответ занесёт в переменную 1.
Затем, второе, программа 1 должна взять этот ответ и вставить её в свою переменную.
Условный пример:
Программа 1

q = open( 'program2.py', '[ ??? ]')

file = open( 'c', 'w')
file.write( 'что-то' )
file.close()

Программа 2

a = 2
b = 2
variable1 = a + b

(Знаю, было много подобных вопросов, но я не понял.)

То, что вы хотите сделать, может выглядеть так:
q1226821_1.py

from q1226821_2 import _add                   # импорт функции `_add` из `q1226821_2.py`

fileName = 'test.txt'

variable = _add()                             # вызов функции `_add` на исполнение
                                              # результат ее работы будет в `variable`

with open(fileName, "w") as fileOutput:
    fileOutput.write(str(variable))

q1226821_2.py

def _add():              # это функция сложения двух переменных (int)
    a = 2
    b = 2
    variable1 = a + b
    return variable1     # return - возвращает резудьтат вычислений данной функции

Запускаем программу:
python q1226821_1.py


Как решить проблему с нехваткой оперативной памяти при обучении модели keras?
Не хватает оперативной памяти, снизил размер изображений до 36 х 36. Этот же размер передаю в
input_shape.
Появляется ошибка, где сказано, что памяти не хватает, а в скобках (256 х 256).
От чего так?

import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
import os
import keras
import joblib
from keras.preprocessing.image import ImageDataGenerator

train_images = 'C:\\Users\\Администратор\\AppData\\Local\\Programs\\Python\\Python36-32\\train_images'

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(36, 36, 3)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dropout(0.5),
    keras.layers.Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

datagen = ImageDataGenerator(rescale = 1. /255)

train_generator = datagen.flow_from_directory(
  train_images,
  batch_size = 4,
  class_mode = 'binary')

model.fit(np.array(train_generator), epochs=10, validation_split = 0.1)

Ошибка (cmd).

Found 336 images belonging to 2 classes.
Traceback (most recent call last):
  File "C:\Users\Администратор\AppData\Local\Programs\Python\Python36-32\image_g
uess.py", line 31, in <module>
    model.fit(np.array(train_generator), epochs=10, validation_split = 0.1)
  File "C:\Users\Администратор\AppData\Local\Programs\Python\Python36-32\lib\sit
e-packages\keras_preprocessing\image\iterator.py", line 104, in __next__
    return self.next(*args, **kwargs)
  File "C:\Users\Администратор\AppData\Local\Programs\Python\Python36-32\lib\sit
e-packages\keras_preprocessing\image\iterator.py", line 116, in next
    return self._get_batches_of_transformed_samples(index_array)
  File "C:\Users\Администратор\AppData\Local\Programs\Python\Python36-32\lib\sit
e-packages\keras_preprocessing\image\iterator.py", line 222, in _get_batches_of_
transformed_samples
    batch_x = np.zeros((len(index_array),) + self.image_shape, dtype=self.dtype)

MemoryError: Unable to allocate 3.00 MiB for an array with shape (4, 256, 256, 3
) and data type float32

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

datagen = ImageDataGenerator(rescale=1. / 255)

# size of mini-data
batch_size = 32
# train data
train_data_size = N # общее число картинок в обучающей выборке

train_generator = datagen.flow_from_directory(
    train_images,
    target_size=(48, 48),
    batch_size=batch_size,
    class_mode='binary')

model.fit_generator(
    train_generator,
    steps_per_epoch=train_data_size // batch_size,
    epochs=10)


Как реализовать добавление в словарь?
В первой строке записывается число k(сколько раз будет выполняться запрос строчек в цикле). Далее в каждой строке записывается слово и сразу же через пробел идет описание к этому слову, так вот в чем вопрос, как это слово добавить в качестве ключа в словарь, а все что идет в этой же строке через пробел после этого ключа записать в словарь в value
попытался сделать так, но не получается(почему то задаю значение 2 на входе, а ввожу 4 строки и в словарь естественно идет не первое слово строки, а вся строка и в значение вторая строка)

arr = {}
for i in range(int(input())):
  k, v = input(), input()
  arr[k] = v
print(arr)

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

1
слово описание к этому слову
arr = {"слово": "Описание к этому слову", ...}

arr = {}

for i in range(int(input())):
    k, v = input().split(' ', 1)
    arr[k] = v

print(arr)

input() - ожидает ввод с клавиатуры и возвращает строку;
.split(' ', 1) - разбивает по первому пробелу и возвращает список;
k, v - распаковывает список в две переменные

У вас же
k, v = input(), input() делает ровно то, что вы описали: принимает две строки и первую устанавливает, как ключ, вторую - значением словаря...


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

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

ряд «1 4 6 4 1» получается из предыдущего ряда «1 3 3 1» так: в начале всегда 1, 1+3=4, 3+3=6, 3+1=4, в конце всегда 1
Идея такова, что уже есть первые два элемента матрицы и цикл начинается с первого элемента и высчитывает там сумму двух соседних элементов и записывает во второй элемент(нумерацию в матрице начинаю с нуля) ,я пытался как то через это реализовать, но не очень то и получается

table = [[1], [1, 1]]
n = int(input())
s = 0
for i in range(n - 2):
  for row in table[i]:
       s += sum(row)
  table.append([s])
print(table)

что исправить в коде, чтобы заработало?

pascal_triangle - бесконечный генератор строк треугольника Паскаля. Следующая строка получается суммированием соседних элементов предыдущей. Для этого к предыдущей строке прибавим нули слева и справа:

1 3 3 1 ->    0 1 3 3 1
              1 3 3 1 0
            + ---------
              1 4 6 4 1

itertools.islice - инструмент для обрезания бесконечных генераторов:

import itertools

def pascal_triangle():
    line = (1, )
    while True:
        yield line
        line = tuple(map(sum, zip((0, ) + line, line + (0, ))))

for line in itertools.islice(pascal_triangle(), 5):
    print(*line)

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1


Ошибка отсутствия модуля VOSK для распознавания аудио совместно в python3.9.0
Пытаюсь установить библиотеку VOSK для распознавания речи, чтобы заработал код:

from vosk import Model, KaldiRecognizer  # оффлайн-распознавание от Vosk

Установка завершается без ошибок, но импорт опять ругается на отсутсвие модуля vosk.
Установку осуществляю в python3.9.0 с помощью команд:

pip3 install vosk

и

pip install vosk.

Несовместимость версий. Из документации vosk:

Make sure you have up-to-date pip and python3 versions:
Python version: 3.5-3.8 (Linux), 3.6-3.7 (ARM), 3.8-3.9 (OSX), 3.8-64bit (Windows) pip version: 19.0 and newer.


Получение информации о потоке исполнения через равные промежутки времени python
Имеется следующий код:
<code>
        proc = multiprocessing.Pool(n_cpu)
        proc.map(func, some_data)
</code>
как мне параллельно с этим пулом запустить ещё один процесс который бы через заданное время получал информацию о том как обстоят дела в каждом из потоков пула?
p.s. костыльно получалось сделать с очередью только результаты получались отдельно по каждому потоку, а не по всем сразу...

Похоже результат func Вам не важен.

    proc = multiprocessing.Pool(n_cpu)
    l = len(some_data)
    i = 0
    for res in proc.imap_unordered(func, some_data):
        i+=1
        print('\r', i*100//l, '%', flush=True, end='')

или если результат важен

def map_process(p,f,d):
    l = len(d)
    i = 0
    for r in p.imap(f, d):
       i+=1
       print('\r', i*100//l, '%', flush=True, end='')
       yield r

proc = multiprocessing.Pool(n_cpu)
result = map_process(proc, func, some_data)

Или асинхронно и недокументированно

proc = multiprocessing.Pool(n_cpu)
jobs = proc.map_async(func, some_data)

while not jobs.ready():
    print('осталось', jobs._number_left)
    jobs.wait(2)


Как передавать данные между двумя компьютерами в python?
Я хочу создать игру на двоих в python. Мне нужен простой и удобный способ передавать данные между двумя компьютерами. Есть идеи?

Рекомендую вам воспользоваться socket'ами. Вот простой пример. Сервер реагирует на команду say hello и пишет hello в консоль, когда клиент эту команду посылает.
Server:

import socket

HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
PORT = 65432        # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            if data == b'say hello':
                print("hello")

Client:

import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 65432        # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'say hello')

Начать учить, продолжить. Удачи!


Имена и их id в Python
Можете пожалуйста объяснить как это работает:

>>> x = 5
>>> id(5)
1520660801968
>>> x += 1
>>> id(x)
1520660802000
>>> x -= 1
>>> id(x)
1520660801968
>>>

Создаётся
PyObject для имени
x, когда мы прибавляем к имени
x 1, то создаётся новый
PyObject, в результате 2
PyObject, при этом счётчик ссылок нового
PyObject увеличивается на 1, а счётчик ссылок старого
PyObject уменьшается на 1. Почему мы просто не можем перезаписывать старый
PyObject (как работает в C, вместо имён - переменные, которые не изменяют адрес памяти), из-за этого потребление памяти в
Python больше?

В С вы можете сами управлять тем, где у вас скалярные значения, а где указатели. В python для того что бы сделать язык проще и решили спрятать понятие указателя от разработчика. И для этого сделали указателями все. Любая переменная - указатель. А значит изменять скалярный по природе объект по указателю нельзя, так как могут быть другие переменные ссылающиеся на тот же объект. Отсюда получили два эффекта, во первых обращение к любой переменной медленнее чем могло бы быть. Во вторых да, использование памяти в какие то моменты времени может быть выше. Но в отличие от C python сам следит за использованием памяти. Разработчику в большинстве случаев не надо об этом задумываться и освобождать память от ненужных объектов. Когда на какой нибудь объект не ссылается ни одна переменная, то сборщик мусора этот объект удаляет через некоторое время.
Очень может быть, что для небольших чисел объекты есть всегда. Если же использовать числа большего размера, то можно обнаружить другое поведение:
<code>
>>> a=590
>>> id(a)
140274437545744  # Объект 590 размещен в памяти
>>> a+=1
>>> id(a)
140274437545904  # 591 находится в новой области памяти
>>> a+=1
>>> id(a)
140274437545744  # 590 уже был удален сборщиком мусора и его адрес использован для 592
>>> a-=2
>>> id(a)
140274437545904  # Там где был 591 теперь 590
>>> a
590              # В чем можно убедится
</code>


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

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

Как ввести в одной строке n переменных

                                (1 ответ)

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

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

a, b = map(int, input().split(","))

print(a, b)

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

arr = list(map(int, input().split(','))

вместо
map можно использовать
for, но код будет подлиннее:

arr = [int(i) for i in input().split(',')]


Использование multiiprocessing увеличивает время выполнения
Без multiprocessing время выполнения - 7 секунд. С ним - Более 5 минут. Как правильно использовать multiprocessing?
<code>
for global_cycle in range(30000):

    data_z = {}
    dw = {}

    for spliting_cycle in range(quan_of_spliting):
        data_z_ninside, data_z_inside = Pipe()

        p = Process(target=forward, args=(w_slovar["Split " + str(spliting_cycle)], data_z_inside, x,))
        p.start()

        data_z["Split " + str(spliting_cycle)] = data_z_ninside.recv()
    p.join()

    for spliting_cycle in range(quan_of_spliting):
        cost_nin, cost_inside = Pipe()
        dw_nin, dw_inside = Pipe()

        p2 = Process(target=backward, args=(cost_inside, dw_inside, w_slovar["Split " + str(spliting_cycle)], data_z["Split " + str(spliting_cycle)], y,))
        p2.start()

        cost += cost_nin.recv()
        dw["Split " + str(spliting_cycle)] = dw_nin.recv()
    p2.join()

    for spliting_cycle in range(quan_of_spliting):
        w_slovar_nin, w_slovar_inside = Pipe()
        p3 = Process(target=update_weights, args=(dw["Split " + str(spliting_cycle)], w_slovar["Split " + str(spliting_cycle)], w_slovar_inside, learning_rate))
        p3.start()

        w_slovar["Split " + str(spliting_cycle)] = w_slovar_nin.recv()
    p3.join()
</code>

Как писали в комментарии multiprocessing это долго и кол-во процессов примерно должно быть равно кол-ву ядер процессора иначе теряется весь смысл. Попробуйте использовать потоки. Хотя чрезмерно большое кол-во потоков тоже не есть хорошо:
<code>
from threading import Thread
import time

def func(x): # Ваша функция
    time.sleep(2)
    print("func", x)

for i in range(500): # Запуск в цикле
    potoc = Thread(target=func, args=[i], daemon=True)
    potoc.start()
potoc.join()
</code>


Произведение отличных от нуля чисел
Напишите программу, которая считывает 10 чисел и выводит произведение отличных от нуля чисел.
Формат входных данных:
На вход программе подаются 10 целых чисел, каждое на отдельной строке.
Формат выходных данных:
Программа должна вывести произведение отличных от нуля чисел.
Примечание: Гарантируется, что хотя бы одно из 10 чисел является ненулевым.

Sample Input 1:

8
0
1
2
1
0
0
5
4
12

Sample Output 1:

3840

Мой код:

total = 1
a = int(input())
for i in range(1, 10):
    if a != 0 and a *= a:
        a += a
print(total)

result = 1
for _ in range(10):
    a = int(input())
    if a:
        result *= a
print(result)


Pyrhon ругается на то, что я написал. не могу понять в чем дело, помогите пожалуйста [закрыт]

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

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

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

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

Написал программу, а питон подчёркивает 'x'
<code>
 def x:
    x=int(input('Введите код города:'))
    t=int(input('Введите длительность переговоров:'))
    if x=343:
        R=15*t
        print('Такова длительность переговоров в выбранном вами городе',R)
    elif x=381:
        R = 18* t
        print('Такова длительность переговоров в выбранном вами городе', R)
    elif x=473:
        R = 13* t
        print('Такова длительность переговоров в выбранном вами городе', R)
    elif x=485:
        R = 11*t
        print('Такова длительность переговоров в выбранном вами городе', R)
</code>
И после выводит это:

def x:
^
SyntaxError: invalid syntax

def определяет функцию, а значит надо

def x():

хотя называть функцию как переменную - первый шаг к огромным ошибкам
затем у вас будет ошибка в

if x=343:

сравнение в питоне делается через двойное равно -
==:

if x == 343:


Выход из программы при вводе пустой строки (sys.stdin)
Перепробовал различные способы, но так и не понял как добиться завершения программы при вводе пустой строки. Я прочитал, что если строка
line пустая, то можно выйти условием
if not line, но это тоже не помогает.  Ловить ошибку при вводе ctrl+D  я не хочу, интересует именно завершение программы при вводе пустой строки.
Подскажите, пожалуйста, как правильно это сделать?
Спасибо!
P.S. Код ниже

import sys
import os

with open('task1.txt', 'a') as some_file:
    for line in sys.stdin:
        if not line:
            print(f"Файл был успешно записан. Вы можете найти его по адресу {os.path.join(os.getcwd(), 'task1.txt')}")
        else:
            some_file.write(line)

for line in sys.stdin:
    if len(line) > 1:
        print(line)
    else:
        break

print("вышли")

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

for line in sys.stdin:
    if line == '\n':
        break

    # вывести введённую строку без последнего символа (который является символом '\n')
    print(line[:-1])

print("вышли")


Параллельный запуск функции по расписанию с разными параметрами
Как на python >3.8 реализовать параллельный запуск функций по расписанию, но с разными параметрами и чтобы работа скрипта не была привязана к версии операционой системы?
Ниже приведен пример конфиг файла. Скрип на python будет считывать конфиг, а далее в зависимости от заданной в конфиге периодичности должен запускать функцию fnc с заданным параметром в параллельном режиме. Для примера если пользователь задал в конфиге задал параметры 1m, 1h, 1d то в 00:00:00 каждого дня должно параллельно выполниться функции с параметрами fnc(timeframe = 1m), fnc(timeframe = 1h), fnc(timeframe = 1d). Как реализовать заданный функционал и максимально оптимально и правильно?
ini file
<code>
1m:fnc(timeframe = 1m)
5m:fnc(timeframe = 5m)
1h:fnc(timeframe = 1h)
4h:fnc(timeframe = 4h)
1d:fnc(timeframe = 1d)
1w:fnc(timeframe = 1w)
</code>

Можно, к примеру, опереться на монотонный таймер
asyncio и
concurrent.futures.Executor для распаралеливания.

import asyncio
import datetime
import time
import re
import concurrent.futures

tab = """
1m:fnc(timeframe = 1m)
5m:fnc(timeframe = 5m)
1h:fnc(timeframe = 1h)
4h:fnc(timeframe = 4h)
1d:fnc(timeframe = 1d)
1w:fnc(timeframe = 1w)
"""

TIMEZONE = 3*60
ms = {
  'm':1,
  'h':60,
  'd':24*60,
  'w':7*24*60
}

def fnc(**args):
    print(datetime.datetime.now(), args)

def dispatcher(loop, pool, crontab):
    time_seconds = time.time()
    delay_seconds = (time_seconds//60+1) * 60 - time_seconds
    loop.call_later(delay_seconds, dispatcher, loop, pool, crontab)
    minute = time_seconds // 60 + TIMEZONE
    for interval, callback, name, value in crontab:
        if minute % interval == 0:
            pool.submit(callback, **{name: value})

def get_crontab():
    reg = re.compile("([0-9][mhdw]*):([a-z]*)\(([a-z][a-z0-9]*).*([0-9][mhdw]*)\)", re.M)
    crontab = [list(line) for line in reg.findall(tab)]

    for line in crontab:
        v,m = re.match(r'([0-9]*)([mhdw])', line[0]).groups()
        v = int(v)
        m = ms[m]
        line[0] = v * m
        line[1] = globals()[line[1]]
    return crontab

pool = concurrent.futures.ThreadPoolExecutor(max_workers=5)
loop = asyncio.get_event_loop()
dispatcher(loop, pool, get_crontab())
loop.run_forever()

На моем компютере задержка от часов получилась в пределах 0,003-0,060 секунды
get_crontab - переводит формат из примера текста в список: интервал, функция, аргумент, значение.
pool - это 5 потоков, которые почти одновременно запустят функции. Замените на
ProcessPoolExecutor если нужно разгрузиться по всем ядрам.
loop - это асинхронный цикл, который в этом случае получает сигналы монотонного таймера от ядра системы.
dispatcher - в первую очередь запланирует себя к выполнению в 00 секунд следующей минуты. А потом выполнит функции из списка, которые должны выполнится в текущей минуте.
pool.submit - паралельно запускает функцию в одном из потоков пула.
Конкурентный вариант (не паралельно, но асинхронно)

import asyncio
import datetime
import time
import re
import concurrent.futures
import inspect
import functools

tab = """
1m:fnc(timeframe = 1m)
5m:fnc(timeframe = 5m)
1h:fnc(timeframe = 1h)
4h:fnc(timeframe = 4h)
1d:fnc(timeframe = 1d)
1w:fnc(timeframe = 1w)
"""

TIMEZONE = 3*60
ms = {
  'm':1,
  'h':60,
  'd':24*60,
  'w':7*24*60
}

async def fnc(**args):
    print(datetime.datetime.now(), args)

def dispatcher(loop, crontab):
    time_seconds = time.time()
    delay_seconds = (time_seconds//60+1) * 60 - time_seconds
    loop.call_later(delay_seconds, dispatcher, loop, crontab)
    minute = time_seconds // 60 + TIMEZONE
    if time_seconds % 60 > 5:
        return
    for interval, callback, name, value in crontab:
        if minute % interval == 0:
            if inspect.iscoroutinefunction(callback):
                loop.create_task(callback(**{name: value}))
            elif inspect.isfunction(callback):
                loop.call_soon(functools.partial(callback, **{name: value}))

def get_crontab():
    reg = re.compile("([0-9][mhdw]*):([a-z]*)\(([a-z][a-z0-9]*).*([0-9][mhdw]*)\)", re.M)
    crontab = [list(m) for m in reg.findall(tab)]

    for line in crontab:
        v,m = re.match(r'([0-9]*)([mhdw])', line[0]).groups()
        v = int(v)
        m = ms[m]
        line[0] = v * m
        line[1] = globals()[line[1]]
    return crontab

async def main():
    dispatcher(loop, get_crontab())

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.run_forever()


Как при выводе списка первую букву нулевого элемента сделать заглавной?
например , у меня есть список
<code>
a = ["небо", "кроет", "буря"]
print(*a) # небо кроет буря
# а нужно: Небо кроет буря
</code>
как такое реализовать?

Вот так, а что?
<code>
a = ["небо", "кроет", "буря"]
print(' '.join(a).capitalize())
</code>


Как заполнить поле связной модели Django
Подскажите пожалуйста, хочу в модель ResultTest запоминать результаты выполненных тестов для каждого пользователя и заменять их в случае перерешивания теста, как передать номер теста в ResultTest, я понимаю что нужно создать в модели ResultTest что то вроде этого test = models.ForeignKey(Test, on_delete=models.CASCADE), но как это заполнять из views.py
models.py

from django.contrib.auth.models import User
from django.db import models

class Task(models.Model):
    number = models.IntegerField()
    text = models.TextField(max_length=1000)
    answer = models.CharField(max_length=50)
    file = models.FileField(null=True, blank=True) # (null=True,blank=True) показываем что это необязательный аргумент
    picture = models.ImageField(null=True, blank=True)

    def __str__(self): # имя в админ панели
        return f'№{self.number} '

class Test(models.Model):
    number_test = models.IntegerField(null=True, blank=True)
    task = models.ManyToManyField('Task', related_name='tasks')

    def __str__(self):
        return f' {self.number_test}'

class ResultTest(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    result = models.IntegerField('res', default=False)

views.py

...
@login_required()
def answer(request, pk):
    ...
    user = request.user
    new = ResultTest(result=res, user = user)
    new.save()

    context = {
                'a': a,
                'pk': pk,
                'res': res
                }

    return render(request, '/answer.html', context )

Ну во первых задайте для модели Test колонку с уникальным значением, то есть значением по которому вы сможете определить уникальность теста, импортируйте в views модель Test, и точно также как вы заносите в RequestTest поля user и result, найдите Тест по его айди
<code>
test = Test.objects.get(id=<int>)
</code>
И положите его в ваш ForeignKey у RequestTest.


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

from collections import Counter
inv = {'cold coin': 42, 'rupe': 1, 'dagger': 1, 'sword': 1}
dragonLoot = ['cold coin', 'cold coin', 'cold coin', 'robe', 'sword']
print('Inventory')

def addToInventroy(inventory, addedLoot):
    newInv = Counter(inventory) + Counter(addedLoot)
    total = 0
    for k, v in newInv.items():
        print(k + ' ' + str(v))
        total += v
    print('total: ' + str(total))

addToInventroy(inv, dragonLoot)

но можно ли как-то так записать, чтобы он добавлял елементы из списка в словарь обходя функцию Counter? я размышлял, что-то на подобее

def addToInventroy(inventory, addedLoot):
    for k, v in inventory:
         for k in range(len(addedLoot):
             if k in inventory:
                 inventory[k] = inventory[k] + 1

addToInventroy(inv, dragonLoot)

заранее благодарен

Можно сделать так:
<code>
inv = {'cold coin': 42, 'rupe': 1, 'dagger': 1, 'sword': 1}
dragonLoot = ['cold coin', 'cold coin', 'cold coin', 'robe', 'sword']

def add_items(d: dict, l: list)-> dict:
    for i in l:
        d.setdefault(i, 0)
        d[i]+=1
    return d

print(add_items(inv, dragonLoot))
# {'cold coin': 45, 'rupe': 1, 'dagger': 1, 'sword': 2, 'robe': 1}
</code>


Если QLineEdit пуст, то приложение крашится
Код на
Python, с использованием библиотеки
PyQt5. Написал калькулятор суточного расхода калорий, всё работает, но есть проблема.
Если
QLineEdit или
QLineEdit'ы пусты, то приложение крашится.
Прошу помочь
main.py:

import re
import sys
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QMainWindow

from design_project import Ui_MainWindow

OLDEST_HUMAN = 112
MIN_AGE_FOR_CALC = 7
GREATEST_WEIGHT = 635
MIN_WEIGHT_FOR_CALC = 20
HIGHEST_GROWTH = 272
LOWEST_GROWTH = 55
MAX_EXP = 14241
MIN_EXP = 417

class WayToTheDream(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setWindowTitle('Way To The Dream!')
        self.setFixedSize(1010, 763)
        # условия для запуска  | калькулятор
        self.LineVivodCalc.setDisabled(True)
        self.PolMuzh.stateChanged.connect(self.calculating_if_polmuzh)
        self.PolZhen.stateChanged.connect(self.calculating_if_polzhen)
        # лимит на количество символов в лайнэдитах + возможность вводить только цифры
        self.LineRost.setValidator(QtGui.QIntValidator(1, 999))
        self.LineVes.setValidator(QtGui.QIntValidator(1, 999))
        self.LineVozrast.setValidator(QtGui.QIntValidator(1, 999))
        self.lineEdit.setValidator(QtGui.QIntValidator(1, 99999))

    # проверка на соблюдение условий В КАЛЬКУЛЯТОРЕ СУТОЧНОГО РАСХОДА КАЛОРИЙ если пользователь выбрал МУЖСКОЙ ПОЛ
    def checking_for_a_condition_polmuzh(self):
        string_vozrast1 = int("".join(list(map(str, re.findall(r'\d+', self.LineVozrast.text())))))
        if MIN_AGE_FOR_CALC <= string_vozrast1 <= OLDEST_HUMAN:
            string_ves1 = int("".join(list(map(str, re.findall(r'\d+', self.LineVes.text())))))
            if GREATEST_WEIGHT >= string_ves1 >= MIN_WEIGHT_FOR_CALC:
                string_rost1 = int("".join(list(map(str, re.findall(r'\d+', self.LineRost.text())))))
                if HIGHEST_GROWTH >= string_rost1 >= LOWEST_GROWTH:
                    return 5 + (10 * string_ves1) + (6.25 * string_rost1) - (
                            5 * string_vozrast1)

    # проверка на соблюдение условий В КАЛЬКУЛЯТОРЕ СУТОЧНОГО РАСХОДА КАЛОРИЙ если пользователь выбрал ЖЕНСКИЙ ПОЛ
    def checking_for_a_condition_polzhen(self):
        string_vozrast1 = int("".join(list(map(str, re.findall(r'\d+', self.LineVozrast.text())))))
        if MIN_AGE_FOR_CALC <= string_vozrast1 <= OLDEST_HUMAN:
            string_ves1 = int("".join(list(map(str, re.findall(r'\d+', self.LineVes.text())))))
            if GREATEST_WEIGHT >= string_ves1 >= MIN_WEIGHT_FOR_CALC:
                string_rost1 = int("".join(list(map(str, re.findall(r'\d+', self.LineRost.text())))))
                if HIGHEST_GROWTH >= string_rost1 >= LOWEST_GROWTH:
                    return (10 * string_ves1) + (6.25 * string_rost1) - (
                            5 * string_vozrast1) - 161

    # вывод суточного расхода калорий если пользователь выбрал МУЖСКОЙ ПОЛ
    def calculating_if_polmuzh(self, toggle):
        if toggle == QtCore.Qt.Checked:
            self.PolZhen.setEnabled(False)
            if self.checking_for_a_condition_polmuzh() is None:
                self.LineVivodCalc.clear()
            elif self.ComboFizAkt.currentText() == 'Сидячий':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.2) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Слабый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.375) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Преобладает физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.55) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.725) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Очень тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.9) + ' ккал/сут.')
        else:
            self.PolZhen.setEnabled(True)
            self.LineVivodCalc.clear()

    # вывод суточного расхода калорий если пользователь выбрал ЖЕНСКИЙ ПОЛ
    def calculating_if_polzhen(self, toggle):
        if toggle == QtCore.Qt.Checked:
            self.PolMuzh.setEnabled(False)
            if self.checking_for_a_condition_polzhen() is None:
                self.LineVivodCalc.clear()
            elif self.ComboFizAkt.currentText() == 'Сидячий':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.2) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Слабый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.375) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Преобладает физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.55) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.725) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Очень тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.9) + ' ккал/сут.')
        else:
            self.PolMuzh.setEnabled(True)
            self.LineVivodCalc.clear()

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

    ex = WayToTheDream()
    ex.show()

    sys.exit(app.exec_())

design_project.py:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1010, 763)
        MainWindow.setStyleSheet("background-color: #F0F0F0;")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.ViborPola = QtWidgets.QLabel(self.centralwidget)
        self.ViborPola.setGeometry(QtCore.QRect(790, 320, 81, 51))
        self.ViborPola.setObjectName("ViborPola")
        self.PolMuzh = QtWidgets.QCheckBox(self.centralwidget)
        self.PolMuzh.setGeometry(QtCore.QRect(880, 320, 70, 17))
        self.PolMuzh.setObjectName("PolMuzh")
        self.PolZhen = QtWidgets.QCheckBox(self.centralwidget)
        self.PolZhen.setGeometry(QtCore.QRect(880, 350, 70, 17))
        self.PolZhen.setObjectName("PolZhen")
        self.UkazatVozrast = QtWidgets.QLabel(self.centralwidget)
        self.UkazatVozrast.setGeometry(QtCore.QRect(790, 150, 81, 51))
        self.UkazatVozrast.setObjectName("UkazatVozrast")
        self.LineVozrast = QtWidgets.QLineEdit(self.centralwidget)
        self.LineVozrast.setGeometry(QtCore.QRect(880, 150, 71, 51))
        self.LineVozrast.setObjectName("LineVozrast")
        self.UkazatVes = QtWidgets.QLabel(self.centralwidget)
        self.UkazatVes.setGeometry(QtCore.QRect(790, 200, 81, 51))
        self.UkazatVes.setObjectName("UkazatVes")
        self.LineVes = QtWidgets.QLineEdit(self.centralwidget)
        self.LineVes.setGeometry(QtCore.QRect(880, 200, 71, 51))
        self.LineVes.setObjectName("LineVes")
        self.UkazatRost = QtWidgets.QLabel(self.centralwidget)
        self.UkazatRost.setGeometry(QtCore.QRect(790, 250, 81, 51))
        self.UkazatRost.setObjectName("UkazatRost")
        self.LineRost = QtWidgets.QLineEdit(self.centralwidget)
        self.LineRost.setGeometry(QtCore.QRect(880, 250, 71, 51))
        self.LineRost.setObjectName("LineRost")
        self.LvlFizAkt = QtWidgets.QLabel(self.centralwidget)
        self.LvlFizAkt.setGeometry(QtCore.QRect(780, 50, 171, 21))
        self.LvlFizAkt.setObjectName("LvlFizAkt")
        self.ComboFizAkt = QtWidgets.QComboBox(self.centralwidget)
        self.ComboFizAkt.setGeometry(QtCore.QRect(780, 70, 171, 22))
        self.ComboFizAkt.setObjectName("ComboFizAkt")
        self.ComboFizAkt.addItem("")
        self.ComboFizAkt.addItem("")
        self.ComboFizAkt.addItem("")
        self.ComboFizAkt.addItem("")
        self.ComboFizAkt.addItem("")
        self.KolvoTrenirovok = QtWidgets.QLabel(self.centralwidget)
        self.KolvoTrenirovok.setGeometry(QtCore.QRect(780, 100, 171, 21))
        self.KolvoTrenirovok.setObjectName("KolvoTrenirovok")
        self.ComboTrenirovki = QtWidgets.QComboBox(self.centralwidget)
        self.ComboTrenirovki.setGeometry(QtCore.QRect(780, 120, 171, 22))
        self.ComboTrenirovki.setObjectName("ComboTrenirovki")
        self.ComboTrenirovki.addItem("")
        self.ComboTrenirovki.addItem("")
        self.ComboTrenirovki.addItem("")
        self.ComboTrenirovki.addItem("")
        self.ComboTrenirovki.addItem("")
        self.ComboTrenirovki.addItem("")
        self.ComboTrenirovki.addItem("")
        self.ComboTrenirovki.addItem("")
        self.LineVivodCalc = QtWidgets.QLineEdit(self.centralwidget)
        self.LineVivodCalc.setGeometry(QtCore.QRect(780, 370, 171, 91))
        self.LineVivodCalc.setObjectName("LineVivodCalc")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1010, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.ViborPola.setText(_translate("MainWindow", "Пол"))
        self.PolMuzh.setText(_translate("MainWindow", "Мужской"))
        self.PolZhen.setText(_translate("MainWindow", "Женский"))
        self.UkazatVozrast.setText(_translate("MainWindow", "Возраст"))
        self.UkazatVes.setText(_translate("MainWindow", "Вес"))
        self.UkazatRost.setText(_translate("MainWindow", "Рост"))
        self.LvlFizAkt.setText(_translate("MainWindow", "Уровень физической активности:"))
        self.ComboFizAkt.setItemText(0, _translate("MainWindow", "Сидячий"))
        self.ComboFizAkt.setItemText(1, _translate("MainWindow", "Слабый физ. труд"))
        self.ComboFizAkt.setItemText(2, _translate("MainWindow", "Преобладает физ. труд"))
        self.ComboFizAkt.setItemText(3, _translate("MainWindow", "Тяжёлый физ. труд"))
        self.ComboFizAkt.setItemText(4, _translate("MainWindow", "Очень тяжёлый физ. труд"))
        self.KolvoTrenirovok.setText(_translate("MainWindow", "Кол-во тренировок в неделю:"))
        self.ComboTrenirovki.setItemText(0, _translate("MainWindow", "0"))
        self.ComboTrenirovki.setItemText(1, _translate("MainWindow", "1"))
        self.ComboTrenirovki.setItemText(2, _translate("MainWindow", "2"))
        self.ComboTrenirovki.setItemText(3, _translate("MainWindow", "3"))
        self.ComboTrenirovki.setItemText(4, _translate("MainWindow", "4"))
        self.ComboTrenirovki.setItemText(5, _translate("MainWindow", "5"))
        self.ComboTrenirovki.setItemText(6, _translate("MainWindow", "6"))
        self.ComboTrenirovki.setItemText(7, _translate("MainWindow", "7+"))

P.S.
Добавлена проверка, но всё равно происходит ошибка:

    def calculating_if_polmuzh(self, toggle):
        if toggle == QtCore.Qt.Checked:
            self.PolZhen.setEnabled(False)
            if self.checking_for_a_condition_polmuzh() is None:
                self.LineVivodCalc.clear()
            if not self.LineVozrast.text():  # начало
                self.LineVivodCalc.clear()
            if not self.LineVes.text():
                self.LineVivodCalc.clear()
            if not self.LineRost.text():
                self.LineVivodCalc.clear()  # конец
            elif self.ComboFizAkt.currentText() == 'Сидячий':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.2) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Слабый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.375) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Преобладает физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.55) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.725) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Очень тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.9) + ' ккал/сут.')
        else:
            self.PolZhen.setEnabled(True)
            self.LineVivodCalc.clear()

Ошибка из-за того, что в
int у вас была пустая строка

string_vozrast1 = int("".join(list(map(str, re.findall(r'\d+', self.LineVozrast.text())))))
    ValueError: invalid literal for int() with base 10: ''

У вас тот код повторяется и лучше его в функцию поместить примерно так:
Кст, у вас в функции излишек кода. Смотрите,
findall и так возвращает список строку, поэтому
map с
str излишен, поэтому убрал лишнее

def get_int(line_edit) -> int:
    try:
        return int("".join(re.findall(r'\d+', line_edit.text())))
    except:
        return -1

Тогда, с функцией код станет таким:

string_vozrast1 = get_int(self.LineVozrast)

С куском кода:

    # проверка на соблюдение условий В КАЛЬКУЛЯТОРЕ СУТОЧНОГО РАСХОДА КАЛОРИЙ если пользователь выбрал МУЖСКОЙ ПОЛ
    def checking_for_a_condition_polmuzh(self):
        string_vozrast1 = get_int(self.LineVozrast)
        #                 ^^^^^^^^^^^^^^^^^^^^^^^^^
        if MIN_AGE_FOR_CALC <= string_vozrast1 <= OLDEST_HUMAN:
            string_ves1 = get_int(self.LineVes)
            #             ^^^^^^^^^^^^^^^^^^^^^^
            if GREATEST_WEIGHT >= string_ves1 >= MIN_WEIGHT_FOR_CALC:
                string_rost1 = get_int(self.LineRost)
                #              ^^^^^^^^^^^^^^^^^^^^^^^^^
                if HIGHEST_GROWTH >= string_rost1 >= LOWEST_GROWTH:
                    return 5 + (10 * string_ves1) + (6.25 * string_rost1) - (
                            5 * string_vozrast1)

    # проверка на соблюдение условий В КАЛЬКУЛЯТОРЕ СУТОЧНОГО РАСХОДА КАЛОРИЙ если пользователь выбрал ЖЕНСКИЙ ПОЛ
    def checking_for_a_condition_polzhen(self):
        string_vozrast1 = get_int(self.LineVozrast)
        #                 ^^^^^^^^^^^^^^^^^^^^^^^^^
        if MIN_AGE_FOR_CALC <= string_vozrast1 <= OLDEST_HUMAN:
            string_ves1 = get_int(self.LineVes)
            #             ^^^^^^^^^^^^^^^^^^^^^^^^^
            if GREATEST_WEIGHT >= string_ves1 >= MIN_WEIGHT_FOR_CALC:
                string_rost1 = get_int(self.LineRost)
                #              ^^^^^^^^^^^^^^^^^^^^^^^
                if HIGHEST_GROWTH >= string_rost1 >= LOWEST_GROWTH:
                    return (10 * string_ves1) + (6.25 * string_rost1) - (
                            5 * string_vozrast1) - 161

Весь main.py:

import re
import sys
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QMainWindow

from design_project import Ui_MainWindow

def get_int(line_edit) -> int:
    try:
        return int("".join(re.findall(r'\d+', line_edit.text())))
    except:
        return -1

OLDEST_HUMAN = 112
MIN_AGE_FOR_CALC = 7
GREATEST_WEIGHT = 635
MIN_WEIGHT_FOR_CALC = 20
HIGHEST_GROWTH = 272
LOWEST_GROWTH = 55
MAX_EXP = 14241
MIN_EXP = 417

class WayToTheDream(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setWindowTitle('Way To The Dream!')
        self.setFixedSize(1010, 763)
        # условия для запуска  | калькулятор
        self.LineVivodCalc.setDisabled(True)
        self.PolMuzh.stateChanged.connect(self.calculating_if_polmuzh)
        self.PolZhen.stateChanged.connect(self.calculating_if_polzhen)
        # лимит на количество символов в лайнэдитах + возможность вводить только цифры
        self.LineRost.setValidator(QtGui.QIntValidator(1, 999))
        self.LineVes.setValidator(QtGui.QIntValidator(1, 999))
        self.LineVozrast.setValidator(QtGui.QIntValidator(1, 999))
        # self.lineEdit.setValidator(QtGui.QIntValidator(1, 99999))

        # проверка на соблюдение условий В КАЛЬКУЛЯТОРЕ СУТОЧНОГО РАСХОДА КАЛОРИЙ если пользователь выбрал МУЖСКОЙ ПОЛ

    def checking_for_a_condition_polmuzh(self):
        string_vozrast1 = get_int(self.LineVozrast)
        if MIN_AGE_FOR_CALC <= string_vozrast1 <= OLDEST_HUMAN:
            string_ves1 = get_int(self.LineVes)
            if GREATEST_WEIGHT >= string_ves1 >= MIN_WEIGHT_FOR_CALC:
                string_rost1 = get_int(self.LineRost)
                if HIGHEST_GROWTH >= string_rost1 >= LOWEST_GROWTH:
                    return 5 + (10 * string_ves1) + (6.25 * string_rost1) - (
                            5 * string_vozrast1)

    # проверка на соблюдение условий В КАЛЬКУЛЯТОРЕ СУТОЧНОГО РАСХОДА КАЛОРИЙ если пользователь выбрал ЖЕНСКИЙ ПОЛ
    def checking_for_a_condition_polzhen(self):
        string_vozrast1 = get_int(self.LineVozrast)
        if MIN_AGE_FOR_CALC <= string_vozrast1 <= OLDEST_HUMAN:
            string_ves1 = get_int(self.LineVes)
            if GREATEST_WEIGHT >= string_ves1 >= MIN_WEIGHT_FOR_CALC:
                string_rost1 = get_int(self.LineRost)
                if HIGHEST_GROWTH >= string_rost1 >= LOWEST_GROWTH:
                    return (10 * string_ves1) + (6.25 * string_rost1) - (
                            5 * string_vozrast1) - 161

    # вывод суточного расхода калорий если пользователь выбрал МУЖСКОЙ ПОЛ
    def calculating_if_polmuzh(self, toggle):
        if toggle == QtCore.Qt.Checked:
            self.PolZhen.setEnabled(False)
            if self.checking_for_a_condition_polmuzh() is None:
                self.LineVivodCalc.clear()
            elif self.ComboFizAkt.currentText() == 'Сидячий':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.2) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Слабый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.375) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Преобладает физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.55) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.725) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Очень тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polmuzh() * 1.9) + ' ккал/сут.')
        else:
            self.PolZhen.setEnabled(True)
            self.LineVivodCalc.clear()

        # вывод суточного расхода калорий если пользователь выбрал ЖЕНСКИЙ ПОЛ

    def calculating_if_polzhen(self, toggle):
        if toggle == QtCore.Qt.Checked:
            self.PolMuzh.setEnabled(False)
            if self.checking_for_a_condition_polzhen() is None:
                self.LineVivodCalc.clear()
            elif self.ComboFizAkt.currentText() == 'Сидячий':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.2) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Слабый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.375) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Преобладает физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.55) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.725) + ' ккал/сут.')
            elif self.ComboFizAkt.currentText() == 'Очень тяжёлый физ. труд':
                self.LineVivodCalc.setText(str(self.checking_for_a_condition_polzhen() * 1.9) + ' ккал/сут.')
        else:
            self.PolMuzh.setEnabled(True)
            self.LineVivodCalc.clear()

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

    ex = WayToTheDream()
    ex.show()

    sys.exit(app.exec_())

НО!
Я вам рекомендую не писать костыли с
QLineEdit, а вместо них использовать QSpinBox. Этот виджет как раз то, что вам нужно и вы сможете сразу работать с целыми числами и получать из него числа (метод
value)
UPD. Пример с этим решением в соседнем ответе


Django ImageField обновление изображения
Есть модель, пользователя, в которой есть поле avatar, которое по умолчанию заполняется картинкой:

class Account(AbstractUser):
"""
Аккаунт пользователя
"""
class Meta:
    verbose_name = 'Account'
    verbose_name_plural = 'Accounts'

.... Другие поля модели ....

avatar = models.ImageField(
    blank=True,
    verbose_name='Avatar',
    upload_to=f'account/avatar/',
    default='../static/img/account/noimage.png'
)

Проблема состоит в том, что, когда я хочу обновить автар пользователя, ничего не происходит (если делать в админке всё ок)
HTML-шаблон

<div id="edit_account_profile">
<form method="post">
    {% csrf_token %}
    {% for field in user_edit_form %}
    <p>{{ field }}<p>
    {% endfor%}
    <input type="submit" class="fadeIn fourth" value="Save">
</form>

Форма:

class AccountEditForm(UserChangeForm):
"""
Форма для редактирования аккаунта пользователя
"""
first_name = forms.CharField(required=False,
                             widget=forms.TextInput(attrs={
                                 'class': 'fadeIn second',
                                 'placeholder': 'First name',
                             }))
last_name = forms.CharField(required=False,
                            widget=forms.TextInput(attrs={
                                'class': 'fadeIn second',
                                'placeholder': 'Last name',
                            }))
about_me = forms.CharField(required=False,
                           widget=forms.TextInput(attrs={
                               'class': 'fadeIn second',
                               'placeholder': 'About me',
                           }))
location = forms.CharField(required=False,
                           widget=forms.TextInput(attrs={
                               'class': 'fadeIn second',
                               'placeholder': 'Location',
                           }))
avatar = forms.ImageField(required=False,
                          widget=forms.FileInput(attrs={
                              'class': 'fadeIn second',
                              'placeholder': 'Avatar',
                          }))

class Meta:
    model = Account
    fields = ('first_name', 'last_name', 'about_me', 'location', 'avatar')

Вьюшка:

def get_user_edit(request):
"""
Изменение данных пользователя
"""
if request.POST:
    user_edit_form = AccountEditForm(request.POST, instance=request.user)
    if user_edit_form.is_valid():
        user_edit_form.save()
        return redirect('account:profile')

else:
    user_edit_form = AccountEditForm(instance=request.user)
return render(request, 'account/settings.html', {'user_edit_form': user_edit_form})

Возможно вы в теге form на html странице не отметили
<code>
enctype="multipart/form-data"
</code>


Как спарсить "полностью прокрученную" html страницу?
Когда мы листаем ленту паблика вк или чего-то подобного, она постепенно прогружается. Моя задача спарсить полностью прогруженную страницу (html код). Возможно плохо искал, но в документации к urllib я такого не нашёл. Заранее благодарен за помощь.

И не должно такого быть в urllib. urllib просто дает сделать http запрос и получить ответ. А то, что вы описывали это работа с javascript'ом, что не относится к обязанностям urllib (или requests, или bs4).
Вам нужно или посмотреть как формируется http запрос на подгрузку ленты и его повторять http-запросами, или использовать javascript движок. Например, через selenium.
Делал как-то пример для прокрутки яндекс-плейлиста (не факт, что сейчас оно работает) и там использовался такой каркас кода:

options_headless = Options()
options_headless.add_argument('--headless')

url = ...

driver = None
try:
    driver = webdriver.Firefox(options=options_headless)
    driver.implicitly_wait(2)  # seconds
    driver.get(url)
    print(f'Title: {driver.title!r}')

    time.sleep(5)

    # Конец страницы, пока лента подгружается мы не можем до него добраться
    footer_el = driver.find_element_by_class_name('footer')

    # Move down page to bottom
    y_position = 0
    while True:
        print('y_position:', y_position)
        try:
            ActionChains(driver).move_to_element(footer_el).perform()
            break
        except MoveTargetOutOfBoundsException:
            y_position += 250
            driver.execute_script(f'window.scrollTo(0, {y_position});')
            time.sleep(1)

    ...
    # Работаем с текущими данными на страницы, после прокрутки

finally:
    if driver:
        driver.quit()

Где,

Прокрутка страницы делается через js-код
window.scrollTo, который вызываем у браузера через
driver.execute_script(f'window.scrollTo(0, {y_position});')
А
headless нужен, чтобы спрятать страницу