Как одновременно вводить и выводить данные в консоль python
Я даже не знаю ка сформулировать вопрос, что бы он был ясен, но все таки постараюсь. В итоге я хочу сделать свой мини-чат - я могу получать новые сообщения во время ввода своего текста сообщения.
Мне нужен способ сделать одновременный ввод и вывод в консоли. Я пробовал делать так: с помощью ESC-последовательностей, двигать строку с вводом, затем перемещаться выше, выводить в освободившуюся строку текст, а потом возвращаться назад на строку вниз, где идет введенный мной текст и приглашение ввода. Это оказалось очень неэффективным и неудобным кодом, так как приглашение и текст пропадали, когда я пытаюсь вставить строку, когда окно консоли уже подошло к концу. Так же были проблемы, что если выводится несколько строк на экран, то сдвигалось все только на одну строку, и я писал ввод уже вдоль выведенного текста. Я пока что пользуюсь решением получать данные только по окончании ввода, но хотелось бы, что бы я мог получать нужную информация прямо во время ввода.
Возможно, как предложил @andreymal, стоит сделать 2 секции - внизу ввод, сверху вывод, но я не представляю как, я слышал что есть curses, но только на линукс. Есть ли какие то еще варианты с готовыми решениями, или стоит продолжить искать решение с ESC-последовательностями?

Что ты имеешь в виду под консолью python? Если запущенный скрипт в командной строке windows, то можно так, с кареткой и самописным input'ом. Это довольно просто и работает. Из этого кода будет ясен принцип.

import msvcrt
import time

def input_wait(prompt='', timeout=1000, *, _delay=0.02):
    inpute_line = str()
    start = time.time()

    while time.time() - start < timeout:
        prompt_t = '\r{:.1f}| {}{}'.format(timeout - time.time() + start,
                                           prompt, inpute_line)
        print(prompt_t, end='')

        if msvcrt.kbhit():
            char = msvcrt.getwch()
            if char == '\r':
                msvcrt.putwch('\n')
                break
            elif char == '\000' or char == '\xe0':
                msvcrt.getwch()
                pass
            elif ord(char) == 8: # backspace
                print('\r{}'.format(' ' * len(prompt_t)), end='')
                inpute_line = inpute_line[:-1]
            else:
                inpute_line += char
        else:
            time.sleep(_delay)
    else:
        inpute_line = None

    return inpute_line

timeout = 10
prompt = 'Enter answer: '

print('Сколько будет 5 + 5?')
print('у вас есть 10 секунд')

while True:
    answer = input_wait(prompt, timeout=timeout)

    if answer is None:
        print('\nTime is up')
    else:
        if answer == '10':
            print("It's right answer!")
        elif answer == 'q':
            print('exit...')
            break
        else:
            print("No! Try again.")

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

from __future__ import print_function
import colorama
from time import sleep

colorama.init()

# # ESC [ n A       # move cursor n lines up
# # ESC [ n B       # move cursor n lines down

cursor_up = lambda lines: '\x1b[{0}A'.format(lines)
cursor_down = lambda lines: '\x1b[{0}B'.format(lines)

print("meow :)")
print("meow-meow :)")
print("meow-meow-meow :)")
lines_up = 3
print(cursor_up(lines_up), end='')
sleep(1)
print("woof", " " * 10)
sleep(1)
lines_down = 1
sleep(1)
print(cursor_down(lines_down), end='')
sleep(1)
print("woof-woof-woof", " " * 10)
sleep(1)
lines_up = 2
sleep(1)
print(cursor_up(lines_up), end='')
print("woof-woof", " " * 10)
sleep(1)

С этим пониманием можно свободно выводить в командной строке какую угодно информацию на множестве строк, постоянно обновлять её и одновременно писать в свой input.


Как работает метод register_next_step_handler в pyTelegramBotAPI?
Пытаюсь разобраться с библиотекой telebot. не могу разобраться как в этом методе происходит ожидание ввода данных от пользователя?

register_next_step_handler()
Принимает два обязательных аргументы первый это
message, а второй это
function.
Работает таким образом, он ждёт сообщение пользователя и потом вызывает указанную функцию
с аргументом
message
Пример использования:

@bot.message_handler(commands=['start'])
def welcome(message):
    mesg = bot.send_message(message.chat.id,'Please send me message')
    bot.register_next_step_handler(mesg,test)

def test(message):
    bot.send_message(message.chat.id,'You send me message')

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


Получить значение cookie из html
есть текст:

<script language="JavaScript">
            document.cookie = binary.substr(binary.lastIndexOf('/')+1)+'4=sirius:ru:1760018168; path=/; expires=Wednesday, 18-May-33 03:33:20 GMT';
            document.location = "/manager/ispmgr";</script>

требуется получить:
4=sirius:ru:1760018168
18-May-33 03:33:20 GMT'
/manager/ispmgr
первое значение пытался получить вот так:

pattern = r"(document.cookie = ).+(\+')(.*)"
result_cookie = re.findall(pattern, string)

на выходе получалось следующее:
[('document.cookie = ', "+'", "4=sirius:ru:1276089620; path=/; expires=Wednesday, 18-May-33 03:33:20 GMT';")]
Но так и не смог понять как получить требуемый текст. Прошу подсказать

import re

text = '''
<script language="JavaScript">
            document.cookie = binary.substr(binary.lastIndexOf('/')+1)+'4=sirius:ru:1760018168; path=/; expires=Wednesday, 18-May-33 03:33:20 GMT';
            document.location = "/manager/ispmgr";</script>'''

m= re.findall(r"[\"|']([^^\"|']+)[\"|']", text)
res = m[-2].split(";")
res.append(m[-1])

тогда в res будет:

['4=sirius:ru:1760018168',
 ' path=/',
 ' expires=Wednesday, 18-May-33 03:33:20 GMT',
 '/manager/ispmgr']


Склонение слов в зависимости от числа
Есть функция которая выводит стаж.
Можно ли добавить в функцию склонить слов в зависимости от числа которое выводится?
Подставить вместо:
11111 - год, года, лет
22222 - месяц, месяцев
33333 - день, дня, дней

def stag(message):
    conn = sqlite3.connect(settings.DATABASE)
    cursor = conn.cursor()
    sql = """select last_name, first_name, third_name, data_p, data_z,
            alldays / 365 as years,
            alldays % 365 / 31 as month,
            alldays % 30 as days
        from (select last_name, first_name, third_name, data_p, data_z,
            CAst((julianday(ifnull(data_z, 'now')) - julianday(data_p)) as Integer) as alldays
        from dovidnyk) WHERE last_name = ?"""
    cursor.execute(sql,)
    result = cursor.fetchall()
    for fn in result:
        msg =  "👤 ФИО:  {} {} {}\n" \
               "📅 Дата приема:  {}\n" \
               "Стаж {} 11111 {} 22222 {} 33333\n".format(fn[0], fn[1], fn[2], fn[3], fn[4], fn[5])
        bot.send_message(message.from_user.id, msg, reply_markup=keyboard, parse_mode='HTML')

Может не самое элегантное решение, но как вариант.

dmy = {'y': 2, 'm': 5, 'd': 10}
words = {'y': ['лет', 'год', 'года'], 'm': ['месяцев', 'месяц', 'месяца'], 'd': ['дней', 'день', 'дня']}

out = []
for k, v in dmy.items():
    remainder = v % 10
    if v == 0 or remainder == 0 or remainder >= 5 or v in range(11, 19):
        st = str(v), words[k][0]
    elif remainder == 1:
        st = str(v), words[k][1]
    else:
        st = str(v), words[k][2]
    out.append(" ".join(st))

print(" ".join(out))

Вывод:

2 года 5 месяцев 10 дней
UPD:
Например, вот так:

import sqlite3
conn = sqlite3.connect('111.db')
cursor = conn.cursor()

# Записи в таблице:
# Иванов  Иван    Иванович    2001-02-01  2006-08-02
# Смирнов Андрей  Анатольевич 2002-03-05  2012-08-12

sql = """select last_name, first_name, third_name, data_p, data_z,
        alldays / 365 as years,
        alldays % 365 / 31 as month,
        alldays % 30 as days
    from (select last_name, first_name, third_name, data_p, data_z,
        CAST((julianday(ifnull(data_z, 'now')) - julianday(data_p)) as Integer) as alldays
    from dovidnyk) """

cursor.execute(sql,)
result = cursor.fetchall()
# [('Иванов', 'Иван', 'Иванович', '2001-02-01', '2006-08-02', 5, 5, 28)]

for fn in result:
    dmy = {'y': fn[5], 'm': fn[6], 'd': fn[7]}
    words = {'y': ['лет', 'год', 'года'], 'm': ['месяцев', 'месяц', 'месяца'], 'd': ['дней', 'день', 'дня']}
    out = []
    for k, v in dmy.items():
        remainder = v % 10
        if v == 0 or remainder == 0 or remainder >= 5 or v in range(11, 19):
            st = str(v), words[k][0]
        elif remainder == 1:
            st = str(v), words[k][1]
        else:
            st = str(v), words[k][2]
        out.append(" ".join(st))

    msg = "<i>👤 <u>ФИО</u></i>:  <b>{} {} {}</b>\n" \
          "<i>📅 <u>Дата приема</u></i>:  <b>{}</b>\n" \
          "Стаж {} {} {} \n".format(fn[0], fn[1], fn[2], fn[3], out[0], out[1], out[2])
    print(msg)

conn.close()

Вывод:

<i>👤 <u>ФИО</u></i>:  <b>Иванов Иван Иванович</b>
<i>📅 <u>Дата приема</u></i>:  <b>2001-02-01</b>
Стаж 5 лет 5 месяцев 28 дней

<i>👤 <u>ФИО</u></i>:  <b>Смирнов Андрей Анатольевич</b>
<i>📅 <u>Дата приема</u></i>:  <b>2002-03-05</b>
Стаж 10 лет 5 месяцев 3 дня

UPD2: Можно еще добавить
conn.row_factory = sqlite3.Row перед
cursor = conn.cursor() тогда результат запроса будет сразу в dict, и код немного упростится.

conn.row_factory = sqlite3.Row
cursor = conn.cursor()

cursor.execute(sql,)
for fn in cursor.fetchall():
    fn = dict(fn)
    words = {'years': ['лет', 'год', 'года'], 'month': ['месяцев', 'месяц', 'месяца'], 'days': ['дней', 'день', 'дня']}
    for k in words.keys():
        remainder = fn[k] % 10
        if fn[k] == 0 or remainder == 0 or remainder >= 5 or fn[k] in range(11, 19):
            st = str(fn[k]), words[k][0]
        elif remainder == 1:
            st = str(fn[k]), words[k][1]
        else:
            st = str(fn[k]), words[k][2]
        fn[k] = " ".join(st)
    msg = "<i>👤 <u>ФИО</u></i>:  <b>{} {} {}</b>\n" \
          "<i>📅 <u>Дата приема</u></i>:  <b>{}</b>\n" \
          "Стаж {} {} {} \n".format(fn['last_name'],
            fn['first_name'], fn['third_name'], fn['data_p'], fn['years'], fn['month'], fn['days'])
    print(msg)

conn.close()


записать значения переменной в список
Есть ли какой-либо способ записывать значения переменной в список?
У меня есть переменная n, ей присваиваются разные значения, каждое на новой строке, до того момента пока не будет введен 0. После этого программа останавливается и далее выполняются некоторые действия с веденными данными.
Для этого мне нужен список всех введенных данных, поэтому хотелось бы узнать можно ли как то вводить значения переменной n в список и если такая возможность есть, то как?
В интернете не нашел, либо же плохо искал
<code>
n=int(input())
while n !=0:
   n=int(input())
</code>

arr = []
while True:
    n = int(input())
    if n == 0:
        break
    arr.append(n)

либо так:

arr = [int(el) for el in iter(input, "0")]


Симулятор броска монеты с выводом результата определённой комбинации
<code>
import random
n = 1
i = 0
ifrits = []
while (ifrits[0] == 1 and ifrits[1] == 1 and ifrits[2] == 1 and ifrits[3] == 1 and ifrits[4] == 1 and ifrits[5] == 1 and ifrits[6] == 1 and ifrits[7] == 1 and ifrits[8] == 0) or (ifrits[0] == 0 and ifrits[1] == 1 and ifrits[2] == 1 and ifrits[3] == 1 and ifrits[4] == 1 and ifrits[5] == 1 and ifrits[6] == 1 and ifrits[7] == 1 and ifrits[8] == 1):
    while i < 9:
        ifrits[i] = random.random()
        i += 1
        n += 1
print(ifrits)
print(n)
</code>
Я хочу написать программу, которая заполнит список значениями 0 или 1, затем проверит список на наличие комбинации восемь единиц подряд (1,1,1,1,1,1,1,1,0) или (0,1,1,1,1,1,1,1,1). Результатом должен быть - вывод самой комбинации (списка) и номера попытки (значение счётчика), на которой выпала данная комбинация. По моим подсчётам, вероятность такой комбинации составляет - 0,4%. Моя цель - понять: может ли выпасть такая комбинация на практике вообще? Если да, то у меня будет номер попытки, на которой произошла комбинация.
Пояснение переменных:
n - общий счётчик попыток
i - счётчик для цикла
ifrits - список

import random

n = 0
while True:
    arr = [random.randrange(2) for _ in range(9)]
    if arr == [1, 1, 1, 1, 1, 1, 1, 1, 0] or arr == [0, 1, 1, 1, 1, 1, 1, 1, 1]:
        print(arr, n)
        break
    n += 1


Получить самую большую цифру в числе
<code>
def func(num):
    max = 0
    for i in range(num):
        if i > max:
            max = i
    return (max)

print(func(67124))
</code>

Можно использовать функцию
max для строкового представления числа.
Пример:

def f(num):
    return int(max(str(num)))

Цифры будут сравниваться на основе ASCII кода их символьного представления. Это возможно, потому что их коды находятся последовательно от меньшего к большему (48-57).


Как объединить две таблицы по двум столбцам?
У меня есть 2 CSV файла, в которых имеются одинаковое количество столбцов:

Date Timestamp      Open      High       Low     Close   Volume

Я хочу отредактировать эти две таблицы и оставить только эти столбцы:

Date  Timestamp  Close

Затем объединить их по
Date и
Timestamp.
В конечном итоге хочу получить таблицу с такими столбцами:

Date  Timestamp Close_1 Close_2

Подскажите, как объединить две таблицы по двум столбцам?
Пример столбца:

                        Date Timestamp    Close
0                   20210104  03:00:00  1.22492
1                   20210104  03:01:00  1.22451
2                   20210104  03:02:00  1.22446
3                   20210104  03:03:00  1.22431
4                   20210104  03:04:00  1.22431

Нужно сопоставить данные с другой таблицей по дате и времени:

           Date Timestamp   Close_1  Close_2
0      20210104  03:00:00  1.22492  2.545
1      20210104  03:01:00  1.22451  2.457
2      20210104  03:02:00  1.22446  2.789
3      20210104  03:03:00  1.22431  2.547
4      20210104  03:04:00  1.22431  2.476

Попробуйте так:
<code>
cols = "Date Timestamp Close".split()
d1 = pd.read_csv(filename1, usecols=cols).rename(columns={"Close": "Close_1"})
d2 = pd.read_csv(filename2, usecols=cols).rename(columns={"Close": "Close_2"})
res = d1.merge(d2)
</code>


Принимать сообщение при условии. PyTelegramBotApi
Как можно сделать так, чтобы бот видел введет ли пользователь цифру, когда нажмёт на Inline кнопку "Ввести цифру"? Использую библиотеку PyTelegramBotApi, он же telebot
<code>
@client.message_handler(commands=['start'])
def command_handler(message):
    Markup_inline = types.InlineKeyboardMarkup(row_width=1)
    BtnYes = types.InlineKeyboardButton(text="Ввести цифру", callback_data="Yes")
    BtnNo = types.InlineKeyboardButton(text="Не вводить цифру", callback_data="No")
    Markup_inline.add(BtnNo, BtnRefYes)
    client.send_message(message.chat.id, 'Выбери да или нет', reply_markup = Markup_inline)

@client.callback_query_handler(func = lambda call: True)
def Answer(call):
    Markup_Inline = types.InlineKeyboardMarkup(row_width=1)
    if call.data=='Yes':
        client.edit_message_text('Введи цифру', call.message.chat.id, call.message.message_id, reply_markup = Markup_Inline)
        @client.message_handler(content_types = ['text'])
        def Answer2(message):
            if (message.text).isdigit():
                print('цифра введена')
</code>

Опечатка:
BtnYes
= types.InlineKeyboardButton(text="Ввести цифру", callback_data="Yes")

Markup_inline.add(BtnNo, BtnRefYes
)
и

@client.message_handler(content_types = ['text'])
def Answer2(message):
    if message.text.isdigit():
        print('цифра введена')

расположить под
@client.callback_query_handler(func=lambda call: True)
полный код:

import telebot
from telebot import types

client = telebot.TeleBot('9:AAE')

print(client.get_me())

@client.message_handler(commands=['start'])
def command_handler(message):
    markup = types.InlineKeyboardMarkup(row_width=1)
    yes = types.InlineKeyboardButton(text="Ввести цифру", callback_data="Yes")
    no = types.InlineKeyboardButton(text="Не вводить цифру", callback_data="No")
    markup.add(no, yes)
    client.send_message(message.chat.id, 'Выбери да или нет', reply_markup=markup)

@client.callback_query_handler(func=lambda call: True)
def answer(call):
    if call.data == 'Yes':
        client.edit_message_text('Введи цифру', call.message.chat.id, call.message.message_id)

@client.message_handler(content_types=['text'])
def answer2(message):
    if message.text.isdigit():
        print('цифра введена')

client.polling(none_stop=True, interval=0)

Но имейте в виду, что если ввести цифру без нажатия кнопки, то всё равно сработает
print('цифра введена') т.к.
@client.message_handler(content_types=['text']) ловит любой текст отправленный боту.
Чтобы
print('цифра введена') срабатывал только после нажатия кнопки и ввода сообщения:

@client.callback_query_handler(func=lambda call: True)
def answer(call):
    if call.data == 'Yes':
        msg = client.edit_message_text('Введи цифру', call.message.chat.id, call.message.message_id)
        client.register_next_step_handler(msg, answer3)

def answer3(message):
    if message.text.isdigit():
        print('цифра введена после кнопки')


Разделить Dataframe на равные отрезки в python
Как осуществить разделение DataFrame из 1000 элементов в цикле for на 10 отрезков по 100 строк каждый?
Пытался сделать таким способом, но в результате получаю 10 первых отрезка:
<code>
for index in range(100,1100, 100):
    df2 = df.iloc[:index]
    X = dosomething(df)
    print(X)
</code>
Или есть более простой способ это сделать?

Можно сделать так:
<code>
import pandas as pd
import numpy as np

chunks = np.array_split(df, 10)

for chunk in chunks:
    do_something(chunk)
</code>


Вывести общую стоимость просроченных медикаментов
В текстовом файле заданны названия лекарств, срок их годности, кол-во стандартов и стоимость одного стандарта. Вывеси на экран данные по лекарствам с истекшим сроком годности на сегодняшний день и подсчитать общую сумму таких медикаментов.
Я не знаю как правильно записать. Моя идея не работала.
<code>
from functools import reduce
import datetime

nowdate = datetime.date(2021, 2, 12)
lekarstva = [
    {'nazvanie': 'Аспирин', 'srokgodnosti': datetime.date(1999, 4, 15), 'kol-vostandartov': 127, 'stoimostodnogostandarta': 1.35},
    {'nazvanie': 'Цитромон', 'srokgodnosti': datetime.date(2001, 2, 1), 'kol-vostandartov': 76, 'stoimostodnogostandarta': 0.8},
    {'nazvanie': 'Алфлутоп', 'srokgodnosti': datetime.date(1993, 3, 25), 'kol-vostandartov': 28, 'stoimostodnogostandarta': 1.42},
    {'nazvanie': 'Спазмалгон', 'srokgodnosti': datetime.date(2003, 12, 3), 'kol-vostandartov': 312, 'stoimostodnogostandarta': 1.91},
    {'nazvanie': 'Шиза', 'srokgodnosti': datetime.date(2023, 7, 17), 'kol-vostandartov': 5, 'stoimostodnogostandarta': 4.67}
     ]
for i in lekarstva:
    for key, value in i.items():
        if key == 'srokgodnosti' and value < nowdate:
            print(i)
            x = list(i)
            break
for ii in x:
    for kkey, valuess in ii.items():
        if kkey == 'kol-vostandartov' and valuess == 'stoimostodnogostandarta':
                reduce(lambda kkey, values: kkey * valuess)
                print(ii)
</code>

import datetime

nowdate = datetime.date(2021, 2, 12)
lekarstva = [
    {'nazvanie': 'Аспирин', 'srokgodnosti': datetime.date(1999, 4, 15), 'kol-vostandartov': 127, 'stoimostodnogostandarta': 1.35},
    {'nazvanie': 'Цитромон', 'srokgodnosti': datetime.date(2001, 2, 1), 'kol-vostandartov': 76, 'stoimostodnogostandarta': 0.8},
    {'nazvanie': 'Алфлутоп', 'srokgodnosti': datetime.date(1993, 3, 25), 'kol-vostandartov': 28, 'stoimostodnogostandarta': 1.42},
    {'nazvanie': 'Спазмалгон', 'srokgodnosti': datetime.date(2003, 12, 3), 'kol-vostandartov': 312, 'stoimostodnogostandarta': 1.91},
    {'nazvanie': 'Шиза', 'srokgodnosti': datetime.date(2023, 7, 17), 'kol-vostandartov': 5, 'stoimostodnogostandarta': 4.67}
]

Список с истекшим сроком годности:

foo_lekarstva = [i for i in lekarstva if i['srokgodnosti'] < nowdate]
>>> foo_lekarstva
[{'nazvanie': 'Аспирин', 'srokgodnosti': datetime.date(1999, 4, 15), 'kol-vostandartov': 127, 'stoimostodnogostandarta': 1.35}, {'nazvanie': 'Цитромон', 'srokgodnosti': datetime.date(2001, 2, 1), 'kol-vostandartov': 76, 'stoimostodnogostandarta': 0.8}, {'nazvanie': 'Алфлутоп', 'srokgodnosti': datetime.date(1993, 3, 25), 'kol-vostandartov': 28, 'stoimostodnogostandarta': 1.42}, {'nazvanie': 'Спазмалгон', 'srokgodnosti': datetime.date(2003, 12, 3), 'kol-vostandartov': 312, 'stoimostodnogostandarta': 1.91}]

Количество таких лекарств:

>>> len(foo_lekarstva)
4

Общая стоимость
total_cost в этом списке:

total_cost = 0
for i in foo_lekarstva:
    total_cost += i['kol-vostandartov'] * i['stoimostodnogostandarta']

с округлением до второй цифры после запятой:

>>> round(total_cost, 2)
867.93


Удалить совпадающие элементы списка
Само задание:

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

Вот я пробовал это сделать, но это не совсем то, т.к после преобразования из списка в множество информация о порядке элементов удаляется, а мне же надо что бы порядок остался таким же по условию задания
<code>
def spisok():
  spisok1 = [3, 5, 6, 7, 3]
  y = set(spisok1)
  for i in y:
    print(i,end = ' ')
spisok()
</code>

Для питона 3.7 (для CPython это версия 3.6) и выше можно работать через ключи словаря, т.к. порядок добавления ключей в словари сохраняется.
Пример:
<code>
spisok1 = [3, 5, 6, 7, 3]
spisok1 = list(dict.fromkeys(spisok1))
print(spisok1)
</code>


Взять случайные группы столбцов из датафрейма
У меня есть небольшой датайфрем в котором каждые 4 стобца сгруппированы между собой и относятся к одной сущности (это обозначается первой цифрой в названии столбцов).
Всего 60столбоц и 15 общностей: данные.
Мне необходимо случайным образом взять 5 таких общностей и составить из них датафрейм для дальнейшей работы. Эту процедуру я буду выполнять много раз, делать много всевозможных комбинаций.
Пока удалось придумать, как это сделать, только путем случайного вытаскивния строчек: для этого я транспонирую данные, выбираю случайным образом строки и транспонирую обратно:
<code>
df.T
df.sample(n=5)
df.T
</code>
Но придумать, как вытаскивать не 5 рандомных строк, а именно 5 общностей (5 групп по 4 строки, каждая из которых с одинаковым номером в первой цифре), пока не могу. Можете посоветовать что-нибудь, пожалуйста?
Надеюсь, суть вопроса нормально описана..


Добавить сумму трех предшествующих чисел в список
Я в питоне недавно. Нужно, чтобы в конец списка добавлялось значение суммы трех предшествующих чисел, учитывая, что первые 3 числа:1, 1, 2. ошибка в 3 строке:
<code>
def func(b):
    for i in a:
        b.append((i-2)+(i-1)+i)
    return b[::-1]

a = input()
b = [1, 1, 2]
print(func(b))
</code>

Получится примерно так:
<code>
def func(b):
    summ = 0 # Сумма
    count = 0 # Счетчик 3 элемента
    result = []
    for i in b:
        result.append(i)
        summ += i
        count += 1
        if count == 3:
            result.append(summ)
            count = 0
            summ = 0
    return result

# получаем список чисел через запятую
a = input().split(",")
for n, el in enumerate(in_list):
    a[n] = int(el)

print(in_list)
# обьединяем с b
b = [1, 1, 2]
b = b + a
print(func(b))
</code>


Математические операции с матрицами?
Можно ли решать задачи по линейной алгебре с использованием только библиотеки Pandas и её DataFrame? Или для этого всё таки придётся переводить
df в массивы NumPy и дальше работать с ними? И если да, то есть ли какой-нибудь туториал/манул по решению матричных примеров с использованием исключительно Pandas?
Я застопорился в простом примере, как из DataFrame вычленить вектор-столбец и сделать из него вектор-строку (транспонировать).

Туториалы:

Pandas для начинающих (
10 minutes to Pandas)...
Рецепты

Если очень грубо, то Pandas.DataFrame можно рассматривать как словарь, у которого имена столбцов - это ключи, а значениями являются Pandas.Series и значения индекса для всех столбцов / Series совпадают.
Примеры:

In [132]: df = pd.DataFrame({"a": [1,2,3], "b": [20, 30, 40]})

In [133]: df
Out[133]:
   a   b
0  1  20
1  2  30
2  3  40

In [134]: df[["b"]].T
Out[134]:
    0   1   2
b  20  30  40

In [135]: df["b"].to_numpy()
Out[135]: array([20, 30, 40])


Неправильный перевод времени
У меня есть определенное количество секунд, а точнее 625690. Код
<code>
time = datetime.datetime.fromtimestamp(625690)

print(time.strftime('%#d дней'))
</code>
Переводит это время, как 8 дней, хотя 625693 секунд - это 7 дней. Почему такая ошибка?

%d Day of the month as a decimal number [01,31].

То есть формат
%d - это просто день из получившейся даты. Посмотрим что же за дата и почему:

import datetime

time1 = datetime.datetime.fromtimestamp(0)
time2 = datetime.datetime.fromtimestamp(625690)

print(time1)
print(time2)

Вывод:

1970-01-01 00:00:00
1970-01-08 05:48:10 70

Всё просто. Моменту
0 соответствует дата
1970-01-01, поэтому через 7 с лишним дней будет дата
1970-01-08, поэтому
%d и выводит эту дату
8.
Я так понимаю, вам нужна не абсолютная дата, соответствующая вашему числу секунд, а соответствующий этому числу секунд промежуток в днях. Получить его очень легко:

print(datetime.timedelta(seconds=625690).days)

Вывод:

7


Почему метод класса возвращает None? [дубликат]

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

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

                                (2 ответа)

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

При вызове метода
move он выводит в консоль нужный результат и
None. Откуда интерпретатор берет
None?

 class Auto:
    x = 0
    y = 0
    name = ''
    weight = 0
    max_speed = 0

    def __init__(self,x,y,weight,max_speed,name):
        self.x = x
        self.y = y
        self.weight = weight
        self.max_speed = max_speed
        self.name = name

    def __str__(self):
        return 'Автомобиль ' + str(self.name) + ' ' + 'вес авто = ' + str(self.weight) + 'кг  ' + 'макс. скорость = ' + str(self.max_speed) + 'км/ч'

    def move(self,x,y):
        print('Движение автомобиля в точку ', x, y)

renault = Auto(1, 2, 1500, 220, 'renault')

print(renault.move(15, 20))
print(renault)

def move(self,x,y):
    print('Движение автомобиля в точку ',x,y)

print(renault.move(15,20))

Метод
move ничего не возвращает через
return, поэтому
Python считает, что метод возвращает
None. Соответственно,
print(renault.move(15,20)) этот
None и печатает.


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

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


Фласк не видит темплейт (TemplateNotFound), хотя он лежит в нужной папке
Есть кусок кода на python flask, который должен добавлять новую запись в бд. (реализация кривая, делалось на скорую руку). Собственно набросал форму для добавления на сайт, в папке tempates присутствует addbook.html, форма отображалась корректно, однако после прописывания функционала в routes.py стала падать с ошибкой. Собственно хочу узнать причину (помимо криворукости) и как исправить.
<code>
@app.route('/personal', methods=['GET', 'POST']) #панель админа для добавления книг
def personal():
    form = addBookForm()
    if current_user.is_authenticated:
        if current_user.isadmin:
            return render_template(url_for('addbook'))
        else:
            return render_template(url_for('error'))
    else:
            render_template(url_for('login'))

@app.route('/addbook')
def addbook():
    form = addBookForm()
    if current_user.is_authenticated:
        if current_user.isadmin:
            if form.validate_on_submit():
                book = Book(isbn = form.isbn.data, cost = form.cost.data, creationYear = form.creationYear.data,storage = form.storage.data,title = form.title.data,author = form.author.data, publick = form.publick.data, about = form.about.data, genre = form.genre.data)
                conn = connectDB.get_connection()
                curs = conn.cursor() #опечатки которые мне лень везде править creationYear - year, publick - public
                sql = "INSERT INTO books(isbn, cost, year, storage, title, author, public, about, genre) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"
                curs.execute(sql, (book.isbn, book.cost, book.creationYear, book.storage, book.title, book.author, book.publick, book.about, book.genre))
                conn.commit()
                curs.close()
                conn.close()
                flash('Книга успешно добавлена!')
        else:
            return (url_for('error'))
    else:
            return (url_for('error'))
    return render_template("addbook.html", title='title', form=form)

Traceback (most recent call last):
  File "c:\python\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "c:\python\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "c:\python\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "c:\python\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "c:\python\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "c:\python\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "W:\Позимствованно с GiThub\project2020\app\routes.py", line 141, in personal
    return render_template(url_for('map'))
  File "c:\python\lib\site-packages\flask\templating.py", line 138, in render_template
    ctx.app.jinja_env.get_or_select_template(template_name_or_list),
  File "c:\python\lib\site-packages\jinja2\environment.py", line 930, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "c:\python\lib\site-packages\jinja2\environment.py", line 883, in get_template
    return self._load_template(name, self.make_globals(globals))
  File "c:\python\lib\site-packages\jinja2\environment.py", line 857, in _load_template
    template = self.loader.load(self, name, globals)
  File "c:\python\lib\site-packages\jinja2\loaders.py", line 115, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "c:\python\lib\site-packages\flask\templating.py", line 60, in get_source
    return self._get_source_fast(environment, template)
  File "c:\python\lib\site-packages\flask\templating.py", line 89, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound:/addbook
</code>

Данная проблема решается добавлением простого конфига например таким образом
<code>
app = Flask(__name__, template_folder="jinja_templates")
</code>
Либо если проблема возникла на сервере, то перенесите папку с шаблонами в корень или в каталог уровнем выше, чем тот в которым лежит .py файл


ошибка импорта из MSSQL в MySQL
Пытаюсь сделать импорт из базы MSSQL в базу MySQL. Соединился ровно, вижу все поля, но возникает ошибка:

  Traceback (most recent call last):
  File "src\pymssql.pyx", line 450, in pymssql.Cursor.execute
  File "src\_mssql.pyx", line 1070, in _mssql.MSSQLConnection.execute_query
  File "src\_mssql.pyx", line 1101, in _mssql.MSSQLConnection.execute_query
  File "src\_mssql.pyx", line 1234, in _mssql.MSSQLConnection.format_and_run_que
ry
  File "src\_mssql.pyx", line 1646, in _mssql.check_cancel_and_raise
  File "src\_mssql.pyx", line 1690, in _mssql.maybe_raise_MSSQLDatabaseException

_mssql.MSSQLDatabaseException: (207, b"Invalid column name 'store_id_ukm'.DB-Lib
 error message 20018, severity 16:\nGeneral SQL Server error: Check messages fro
m the SQL Server\nDB-Lib error message 20018, severity 16:\nGeneral SQL Server e
rror: Check messages from the SQL Server\nDB-Lib error message 20018, severity 1
6:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error m
essage 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQ
L Server\n")

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 24, in <module>
    cur_ms.execute(q, tmp)
  File "src\pymssql.pyx", line 465, in pymssql.Cursor.execute
pymssql.ProgrammingError: (207, b"Invalid column name 'store_id_ukm'.DB-Lib erro
r message 20018, severity 16:\nGeneral SQL Server error: Check messages from the
 SQL Server\nDB-Lib error message 20018, severity 16:\nGeneral SQL Server error:
 Check messages from the SQL Server\nDB-Lib error message 20018, severity 16:\nG
eneral SQL Server error: Check messages from the SQL Server\nDB-Lib error messag
e 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Ser
ver\n")

Использую pymysql и pymssql. Такой код

cur_my = conn_my.cursor()
cur_ms = conn_ms.cursor()
cur_my.execute("SELECT * FROM `trm_in_users`")
for row in cur_my.fetchall():
    tmp = {'store_id_ukm':row['store_id'],'cashier_id':row['id'],'cashier_name':row['name'],'cashier_role':row['role_id'] }
    q = "INSERT INTO cashier_receipt_copy1 (store_id_ukm,cashier_id,cashier_name,cashier_role) VALUES (store_id_ukm,cashier_id,cashier_name,cashier_role)"
    cur_ms.execute(q, tmp)
conn_ms.commit()

когда делаю так

'store_id_ukm':row['`store_id`']

выходит ошибка Key error

CREATE TABLE `trm_in_users` (
  `store_id` int(11) NOT NULL DEFAULT '0',
  `id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(40) NOT NULL DEFAULT '',
  `user_inn` varchar(20) DEFAULT NULL,
  `password` varchar(48) NOT NULL DEFAULT '',
  `role_id` bigint(20) unsigned DEFAULT NULL,
  `version` int(11) NOT NULL DEFAULT '0',
  `deleted` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`store_id`,`id`),
  KEY `version` (`store_id`,`version`,`deleted`),
  KEY `role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

UPD
Немного в другую сторону ушел, но выходит теперь другая ошибка

cur_my.execute("SELECT * FROM `trm_in_users`")
for row in cur_my.fetchall():
    cur_ms.execute("""INSERT INTO cashier_receipt_copy1 (store_id_ukm, cashier_id, cashier_name, cashier_role) VALUES (%d, %d, %s, %d) """, ('store_id', 'id', 'name', 'role_id'))
conn_ms.commit()

Ошибка

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    cur_ms.execute("""INSERT INTO cashier_receipt_copy1 (store_id_ukm, cashier_i
d, cashier_name, cashier_role) VALUES (%d, %d, %s, %d) """, ('store_id', 'id', '
name', 'role_id'))
  File "src\pymssql.pyx", line 468, in pymssql.Cursor.execute
pymssql.OperationalError: (245, b"Conversion failed when converting the nvarchar
 value 'store_id' to data type int.DB-Lib error message 20018, severity 16:\nGen
eral SQL Server error: Check messages from the SQL Server\n")

в общем через череду ошибок и советов на данном портале сделал)
<code>
cur_my.execute("SELECT * FROM `trm_in_users`")
for row in cur_my.fetchall():
    cur_ms.execute("""INSERT INTO cashier_receipt_copy1 (store_id_ukm, cashier_id, cashier_name, cashier_role) VALUES (%s, %s, %s, %s) """, (row['store_id'], row['id'], row['name'], row['role_id']))
conn_ms.commit()
</code>
может кому полезно будет


При изменении значения одной переменной меняется значение другой, причём ID у них разные
Делал я одну программку и столкнулся с одним неприятным багом. Проблема  возникает в Python v3.9.0.

Есть у меня переменная i, которая принимает с каждой итерацией for значения элементов list1. Также есть переменная foo, которая хранит в себе копию i. Так вот, если изменить переменную foo, то i меняется вместе с ней, как будто имя foo и имя i ссылаются на одно и то же значение.

Мне нужно, чтобы foo не влияла на i, но при этом принимала её значение вначале цикла.

Вот код:

list1 = [                       #проблема возникает вроде только со списками такого типа - [ [[a1, …],[a2, …]], [[b1, …],[b2, …]], …]
    [[1, 2], [3, 4]]
]
for i in list1:
    foo = i[:]                  # имя foo ссылается на копию i
    # print(id(i1), id(foo))
    foo[1].append(9)            # после foo обязательно должен стоять [индекс какого-либо элемента foo], иначе баг не появится
    print(i)

Ожидаемый результат:

>>> [[1, 2], [3, 4]

Фактический результат:

>>> [[1, 2], [3, 4, 9]]

Правильно, у
foo и
i айдишники будут разные. Зато если посмотрите
id(foo[1]) и
id(i[1]) - то эти айдишники будут одинаковыми.
При копировании создаётся новый список, а потом в него вставляются ссылки на элементы оригинала. Если хотите, чтобы и внутренние списки копировались по значению, то нужно использовать
deepcopy

from copy import deepcopy

foo = deepcopy(i)  # вместо foo = i[:]


Как вывести запросом все строки по условию?
Делаю бота. Нужно вывести из БД все запииси, у которых столбец
worker = CorrySoft.
Пробую сделать это как то так:

c.execute("SELECT * FROM ads WHERE wid = %s",(identi))
while info=c.fetchall()[0]:
  bot.send_message(identi,info["title"])

Но так нельзя.
Прошу помочь мне, ибо реально убил много много времени на это.

Попробуйте так:
<code>
from sqlalchemy import create_engine
import pymysql

db_url = 'mysql+pymysql://mysql_user:mysql_password@mysql_host/mysql_db'
conn = create_engine(db_url)

cur = conn.cursor()

qry = "SELECT * FROM ads WHERE wid = %s"
cur.execute(qry, [identi])

for row in cur.fetchall():
    # здесь используем кортежи со строками данных, которые мы прочитали из БД
    print(row)

</code>


Вывод противоположного значения из списка
Есть список с двумя элементами (их всегда два):

any_list = [5, 7]

И значение:

item = 5

Как мне красиво/правильно получить противоположное значение из списка?
В данный момент на ум приходит только функция-хелпер

def get_another_item(any_list, item):
    for i in any_list:
        if item != i:
            return i

Можно использовать результат логического выражения (
0/
1) в качестве индекса.
Пример:

any_list = [5, 7]
item = 5

r = any_list[any_list[0] == item]  # 7


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

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

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

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

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

<code>
def build_array(n):
    m = [[for i in range(n)] for j in range(n)]
    m[i][i] = 1

    return m
</code>
Выдает ошибку по синтаксису. В чем ошибка, не могу понять?

Вот самая настоящая единичная матрица, аналог np.eye() (не путать с матрицей состоящей из единиц np.ones()):
<code>
def build_array(n):
    return [[1 if i==j else 0 for j in range(n)] for i in range(n)]
</code>


Почему выводит None значение?

Imagine you're writing a cash register application. To make
interaction easier on the user, it doesn't have separate areas for
passwords, PIN numbers, or cash totals -instead, it looks at what the
cashier enters and infers whether it's their PIN number, their
password, or the cash total for a transaction. The register makes this
decision with the following rules:

If the cashier entered only digits, then it's a PIN number.

If the cashier entered a decimal number, then it's the transaction amount.

If the cashier entered anything else, then it's theirpassword. Write a function named interpretCashier. interpretCashier should take one
parameter as input, which will always be a string initially.

If the string entered represents a PIN number, return "PIN".

If the string entered represents a transaction amount,  return "Transaction".

If the string entered represents a password, return  "Password".

В общем вот такая задача есть!
Ее легко можно решить используя функции
isdigit или
replace.

    def interpretCashier(as_string):
        if as_string.isdigit() == True:
            return "PIN"
        elif as_string.replace('.', '', 1).isdigit() == True:
            return "Transaction"
        else:
            return "Password"

Однако нужно помощь в решении без этих функций. И вот тут я застрял:

    def interpretCashier(as_string):
        try:
            if int(as_string) == True:
                return "PIN"
            elif  float(as_string) == True:
                return "Transaction"
        except ValueError:
            return "Password"

    print(interpretCashier("24.59"))
    print(interpretCashier("123456"))
    print(interpretCashier("my$up3rs3cur3p4$$w0rd"))

Почему выводит результат None?
И почему
int(as_string) == True эта строка не читается?

Можно реализовать через "каскадный" try-except, и вообще без if
<code>
def interpretCashier(as_string):
    try:
        int(as_string)
        return "PIN"
    except ValueError:
        try:
            float(as_string)
            return "Transaction"
        except ValueError:
            return "Password"

print(interpretCashier("24.59"))
print(interpretCashier("123456"))
print(interpretCashier("my$up3rs3cur3p4$$w0rd"))
</code>


Кастомный канал для сообщений discord.py
<code>
@client.event
async def on_guild_join(guild):
    with open ('logsserver.json', 'r') as f:
        channels = json.load(f)
    channels[int(guild.id)]
    with open('logsserver.json', 'w') as f:
        json.dump(channels, f)

@client.command()
async def set_log_channel(ctx, ids):

    with open ('logsserver.json', 'r') as f:
        channels = json.load(f)
    channels[int(ctx.guild.id)] = ids
    with open('logsserver.json', 'w') as f:
        json.dump(channels, f)
</code>
Код получает канал для логов. Я хочу, чтобы при команде бот отправлял сообщения в тот канал, который содержится в бд.

Так хотите?

@client.command()
async def set_log_channel(ctx, ids):

    with open ('logsserver.json', 'r') as f:
        channels = json.load(f)
    channels[int(ctx.guild.id)] = ids
    with open('logsserver.json', 'w') as f:
        json.dump(channels, f)
    channel = client.get_channel(ids)
    await channel.send(f"Канал {channel.name} в категории {channel.category} был установлен как канал для логов")

Также предлагаю перемене
ids дать тип
int что бы в бд заносился только айди а не какой-то текст который напишет юзер:

async def set_log_channel(ctx, ids: int):


Проверка на нахождение значений из одного списка в другом
У меня есть следующие списки:
<code>
mass_1 = [[7], [4, 5], [13], [11], [1], [6], [2, 4, 11], [12], [3], [6, 10], [4], [0], [8], [9]]
mass_2 = [[4], [5], [2], [4], [11], [6], [10]]
</code>
так вот моя задача проверить, если в списке один есть одинарный список с значением из списка два, то это значение нужно вычеркнуть из списка 2 все значения. Т.е. если есть значение 4 в первом и во втором, то из второго нужно вычеркнуть все четвёрки.
Поправка: Список mass_2 можно представить как монолитный список с данными значениями.


Ускорить обработку списка в Python
У меня есть задача по обработке большого списка, ниже приведу идею работы моей программы.
Кто может подсказать, каким инструментом ускорить работу?
<code>
main_list = [a_0, a_1, a_2, .... a_n]     # Это список, который содержит в себе около 8000 переменных float
main_list.append(a_new)                   # Добавляю новую переменную в список, добавление идет циклом
my_funct(min(main_list), max(main_list))  # Отправляю максимальное и минимальное значение в другию функцию
del (main_list[0])                        # Удаляю 0-й элемент из списка
</code>

определение
min,
max при последовательном добавлении элементов в список для каждого добавления должно исключать просмотр элементов списка

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

min_value, max_value = min(main_list), max(main_list)

while True:
    main_list.append(a_new)
    min_value = min(a_new, min_value)
    max_value = max(a_new, max_value)

удаление 0-го элемента - тут надо смотреть как вообще в питоне устроен список (например в c++ для такой цели вместо
vector лучше использовать
list)

в питоне наверное быстрее среза ничего нет (но не уверен)

main_list = main_list[1:]


KivyMD как задать цвет текста и фона?
KivyMD как задать цвет текста и фона?
Подскажите пожалуйста, гугление не помогает.

Бэкграунд фона:

from kivy.core.window import Window
Window.clearcolor = (1, 1, 1, 1)

Цвет текста(.kv файл):

<RootLayout>:
    rows: 1
    Label:
        text: "text"
        color: 1,0,1,1


Поменять местами два элемента списка [закрыт]

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

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

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

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

Как поменять местами два элемента списка по их номерам, например второй и пятый элементы списка:

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

=>

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


Как получить строки с фильтрацией по нескольким столбцам и условиям?
Имеется DataFrame следующего формата:

AB | CD | FG | GL
12   23  23   67
34   45  45   87
76   87  98   67

Забираю строки из него функцией

def parse_table(value):
    if value is None:
        return df
    pars = df[df.AB.str.contains('|'.join(value))]
    return pars

Возможно ли забирать строки с условием фильтрации по одной или нескольким конкретно заданным колонкам?

Пример:

In [30]: values = [34, 45, 45]

In [31]: d = dict(zip(df.columns[:len(values)], values))

In [32]: qry = " and ".join(f"{k} == {v}" for k,v in d.items())

In [33]: res = df.query(qry)

результат:

In [34]: res
Out[34]:
   AB  CD  FG  GL
1  34  45  45  87

Пошагово:

In [35]: d = dict(zip(df.columns[:len(values)], values))

In [36]: d
Out[36]: {'AB': 34, 'CD': 45, 'FG': 45}

In [37]: qry = " and ".join(f"{k} == {v}" for k,v in d.items())

In [38]: qry
Out[38]: 'AB == 34 and CD == 45 and FG == 45'

In [39]: df.query(qry)
Out[39]:
   AB  CD  FG  GL
1  34  45  45  87


Как найти строку с максимальным значением в одном столбце?
У меня есть фрейм данных по фильмам: название, актёрский состав, жанры, бюджет и т.д. Нужно найти фильм с максимальным бюджетом. Я нашел максимальный бюджет.
Но как мне сопоставить с его с названием фильма?
Текущий код:
<code>
data = pd.read_csv('movie_bd_v5.csv')
top_budget = data['budget'].max()
</code>

Воспользуйтесь методом DataFrame.nlargest():

top_budget_movie = data.nlargest(1, columns=["budget"])["name"]

UPD:
можно сделать менее эффективно (в два шага) - сначала находим максимум и после этого выбираем строки в которых бюджет максимальный:

max_budget = data['budget'].max()
res = df.query("budget == @max_budget")["name"]

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


Как ввести дату?
<code>
while True:
    book = knigi(book=str(input("Создайте книгу с названием \n"))
    name = str(input("Имя автора \n"))
    vypusk = datetime.date(input("Введите дату выпуска \n" year=a, month=b, day=c )))
</code>
У меня класс, где надо создать книгу и инициализировать ее, в остальном участке нет ошибок, я точно понимаю, что я не знаю, как вводить от консоли именно дату для инициализации...

Из
input вводится строка, ее парсите через
DT.datetime.strptime и получаете дату:

import datetime as DT

date_str = input("Введите дату выпуска (dd/mm/yyyy)\n")
vypusk = DT.datetime.strptime(date_str, '%d/%m/%Y').date()
print(vypusk)

Результат:

Введите дату выпуска (dd/mm/yyyy)
10/02/2021
2021-02-10


Вывести четные числа в списке [закрыт]

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

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

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

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

<code>
a = int(3)
c = float(3.4)
b = int(5)
d = float(4.5)

l = [
    (a + d),
    (c - b),
    (b * c),
    (d / a),
    (a ** 2),
    (a // 2),
    (a % 2)]

print("Список", l)
print("Количество элементов в списке", len(l))

l = input().split()
for i in l:
    if int(i) % 2 == 0:
        print(i)
</code>
Как правильно вывести четные числа в списке? У мене ничего не выводит...

чтобы получить числа вместо

l = input().split()

(так вы получаете только список строк)
надо сделать так:

l = list(map(int, input().split()))

или так:

l = [int(obj) for obj in input().split()]

список четных чисел можно получить так:

arr = [i for i in l if i % 2 == 0]


При обращении обращении к функции on_press=self.btn_press весь код крашится
При обращении к функции
on_press=self.btn_press весь код крашится, если эту строку убрать то код будет работать нормально, но эта строка обращается к функции которая отвечает за нажатие кнопки, помогите пожалуйста
строка 46.

from kivy.app import App
from kivy.uix.button import Button
from kivy.config import Config
from kivy.uix.textinput import TextInput

from kivy.uix.scatter import Scatter
from kivy.uix.textinput import TextInput
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window

from pyrogram import Client, filters
from pyrogram.errors import FloodWait

from pyrogram.types import ChatPermissions

Window.clearcolor = (1, 1, 1, 1)    # установка цвета нового фона
#Config.set("graphics", "relizeble", "0")# ---\
#Config.set("graphics", "width", "400")   #    \ высота и ширина экрана, изменять его потом нельзя
#Config.set("graphics", "heigth", "600")#------/

api_hash = "" # переменная для будующих данных
api_id = "" # переменная для будующих данных
class MyApp(App):
        def build(self):

            fl = AnchorLayout() # этот лаяут будет делать ПО динамическим

            bl = BoxLayout(orientation = "vertical", size_hint = (.5, .5))# тоже лаяут но создает боксы

            self.test = TextInput(text = "api_id", font_size=25, background_color=[9, 9, 9, 9])# Этот лаяут как input для получения данных от пользователя
            self.text_input1 = TextInput(text = "api_hash", font_size=25, background_color=[9, 9, 9, 9])# Этот лаяут как input для получения данных от пользователя

            bl.add_widget(self.test)  # создаю Text_input через BoxLayout
            bl.add_widget(self.text_input1)# создаю Text_input через BoxLayout

            bl.add_widget(Button(       # создаю кнопkу через BoxLayout
                text = "подтвердить",
                font_size=25,  # font_size рaзмер шрифта

                on_press=self.btn_press,  # on_press нажата, эта строка подводит весь код

                background_color=[1, 1, 1, 1]  # background_color цвет RGBA в %
                #background_normal="", # background_normal  делает цвет ярче
            ))

            fl.add_widget(bl) # отношу BoxLayout к fl
            #s = Scatter()
            #s.add_widget(fl)
            return fl # возращаю fl

        def btn_press(self):
            global api_id           #глобальная переменная
            global api_hash             #глобальная переменная
            print(self.text_input.text)         #вывожу данные из Text_input
            print(self.text_input1.text)#

            api_id= self.text_input.text1#

            api_hash=self.text_input1.text1#

app = Client("00ef8b3beaab981d8661a5e596123447", api_id = api_id, api_hash= api_hash)#
@app.on_message(filters.text & filters.private)#
def echo(client, message):#
    message.reply_text(message.text)#

if __name__ == "__main__":#
    MyApp().run()#

    #app.run()#

Ошибка:

TypeError: btn_press() takes 1 positional argument but 2 were given
Process finished with exit code 1

Буквальный перевод ошибки:
btn_press() принимает 1 позиционный аргумент, но было передано 2 (аргумента).
Чтобы устранить ошибку, просто добавьте еще один параметр методу
btn_press(), пример:

def btn_press(self, arg):
    ...

Если смотреть в справке, функция-обработчик нажатия должна принимать параметр
instance. Т.к. у вас это не просто функция, а метод, то первым параметром в него придет
self (объект
MyApp, от которого вызван метод), а уже вторым -
instance.


Посчет в списке кортежей элементов из списка
Имеется список кортежей поризвольной длины, сформированный
itertools.combinations.
Как пример:

res = [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
res = [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

Имеется список index, как пример:

index = [1, 2]
index = [1, 2, 4]

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

res = [(1, 2),...
index = [1, 2]

считается как
count += 1
Я написал вот такой костыль:

for turples in combination:
marker = True
index_list = 0
while marker:
    if index[index_list] in turples:
        count += 1
        marker = False
    else:
        index_list += 1
        if index_list >= len(index):
            marker = False

Можно ли сделать это красивее и правильнее?

Если правильно понимаю смысл задачи, то так:
<code>
print(sum(bool(set(t) & set(index)) for t in res))
</code>


Минималистичный поиск по спискам с дальнейшим его определением
Допустим есть два списка:

list_1 = [1, 2, 3]
list_2 = [4, 5, 6]

И значение:

item = 3

Нужно определить в каком списке находится это значение и отправить этот список дальше в метод (напр.
any_method(specific_list=...))
P.s. Вроде вопрос простой, но получается километровый код, интересно посмотреть на решение со стороны

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

arr = [
    [7, 11, 15],
    [1, 2, 3],
    [4, 5, 6],
]
item = 3

any_method(list(filter(lambda obj: item in obj, arr))[0])

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

any_method(next(filter(lambda obj: item in obj, arr), []))

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


Как реализовать мигание
Хочу сделать шахматы, и при нажатии на  какою-либо клетку выделять ее миганием, однако не понимаю как сделать мигающее выделение (как собственно и временное). Тк клетка просто остается обведенной.
<code>
import pygame,time

fpsClock = pygame.time.Clock()

pygame.init()
FPS = 30

gameScreen = pygame.display.set_mode((400, 300))
BLACK = (0, 0, 0)
YELLOW = (255, 255, 150)
RED = (255, 0, 0)
w, h = 8, 8
field = [[0 for x in range(w)] for y in range(h)]

for y in range(0, 8):
    for x in range(0, 8):
        if (x + y) % 2 == 0:
            field[y][x] = 1

print(field)

size = [800, 800]
screen = pygame.display.set_mode(size)
pygame.display.set_caption("TBS")
gameScreen.fill((YELLOW))

for y in range(0, 8):
    for x in range(0, 8):
        if field[y][x] == 1:
            pygame.draw.rect(gameScreen, BLACK,
                             (x * 100, y * 100, 100, 100))

pygame.display.flip()

runGame = True
while runGame:
    fpsClock.tick(FPS)

    for event in pygame.event.get():
        if event.type == pygame.QUIT: runGame = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                x, y = pygame.mouse.get_pos()
                print(x, y)
                pygame.draw.line(gameScreen, RED,
                                 [x // 100 * 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100], 5)
                pygame.draw.line(gameScreen, RED,
                                 [x // 100 * 100, y // 100 * 100], [x // 100 * 100, y // 100 * 100 + 100], 5)
                pygame.draw.line(gameScreen, RED,
                                 [x // 100 * 100, y // 100 * 100 + 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                                 5)
                pygame.draw.line(gameScreen, RED,
                                 [x // 100 * 100 + 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                                 5)

                pygame.display.flip()
            if event.button == 3:
                pass

pygame.quit()
</code>

Так попробуйте
<code>
import time
from threading import Thread
import pygame

class XThread(Thread):
    flag = True
    def __init__(self, function):
        super().__init__()
        self.function = function
    def stop(self):
        self.flag = False
    def run(self):
        while self.flag:
            self.function()

runGame = True

fpsClock = pygame.time.Clock()

pygame.init()
FPS = 30

gameScreen = pygame.display.set_mode((800, 800))
BLACK = (0, 0, 0)
YELLOW = (255, 255, 150)
RED = (255, 0, 0)
w, h = 8, 8

field = [[0 for x in range(w)] for y in range(h)]

for y in range(0, 8):
    for x in range(0, 8):
        if (x + y) % 2 == 0:
            field[y][x] = 1

print(field)

def drawBoard():
    size = [800, 800]
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("TBS")
    gameScreen.fill((YELLOW))

    for y in range(0, 8):
        for x in range(0, 8):
            if field[y][x] == 1:
                pygame.draw.rect(gameScreen, BLACK,
                    (x * 100, y * 100, 100, 100))

    pygame.display.flip()

def drawFlashingSquare():
    while 1:
        pygame.draw.line(gameScreen, RED,
            [x // 100 * 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100], 5)
        pygame.draw.line(gameScreen, RED,
            [x // 100 * 100, y // 100 * 100], [x // 100 * 100, y // 100 * 100 + 100], 5)
        pygame.draw.line(gameScreen, RED,
            [x // 100 * 100, y // 100 * 100 + 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                             5)
        pygame.draw.line(gameScreen, RED,
            [x // 100 * 100 + 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                             5)
        pygame.display.flip()
        pygame.time.wait(300)
        pygame.draw.line(gameScreen, YELLOW,
            [x // 100 * 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100], 5)
        pygame.draw.line(gameScreen, YELLOW,
            [x // 100 * 100, y // 100 * 100], [x // 100 * 100, y // 100 * 100 + 100], 5)
        pygame.draw.line(gameScreen, YELLOW,
            [x // 100 * 100, y // 100 * 100 + 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                             5)
        pygame.draw.line(gameScreen, YELLOW,
            [x // 100 * 100 + 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                             5)
        pygame.display.flip()

drawBoard()

xthread = None

while runGame:
    fpsClock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            runGame = False
            if xthread is None:
                pass
            else:
                xthread.stop()
        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                drawBoard()
                x, y = pygame.mouse.get_pos()
                print(x, y)
                if xthread == None:
                    xthread = XThread(drawFlashingSquare)
                    xthread.start()
                elif xthread.isAlive() == True:
                    xthread.stop()
            if event.button == 3:
                pass
pygame.quit()
</code>


Помогите исправить ошибку 'int' object is not subscriptable
<code>
N = int(input(`Впишите количество чисел`))
ak = []
m = 1
for i in range(N):
      mas = int(input(`Впишите число`))
      ak.append(mas)
      m = i
      if mas[i] > mas[m+1]:
          print(`Да`)
      else:
        print(`Нет`)
</code>

Подозреваю, что должно быть так:
<code>
N = int(input('Впишите количество чисел'))
mas = []
for i in range(N):
    mas.append(int(input('Впишите число')))
    if mas[i] > mas[i-1]:
        print('Да')
    else:
        print('Нет')
</code>


Как правильно записать словарь в файл?
Код:
<code>
    for tr_time in trs:
        time_game = tr_time.find('td', class_='first time')
        if time_game:
            clear_time_game = time_game.text[:5]
            # print(clear_time_game)

            data.append = {'clear_time_game': clear_time_game,
                           '2': 2,
                           '1': 1}

if __name__ == '__main__':
    main()
</code>
Собирается много данных, но в файл записывается только последняя запись, почему?
Возможно переменные, которые хранят данные постоянно переопределяются, помогите разобраться.

Вы перезаписываете данные в
data, в итоге там - последнее значение...

data = {'clear_time_game': clear_time_game,
            'name': name,
            'url_players': url_players}

Сместите write_csv(data) в тело цикла, должно получиться как-то так:

for tr_time in trs:
        time_game = tr_time.find('td', class_='first time')
        if time_game:
            clear_time_game = time_game.text[:5]
            print(clear_time_game)

            data = {
                'clear_time_game': clear_time_game
                'name': name,
                'url_players': url_players}

            write_csv(data)


Ошибка установки библиотек!
У меня ошибка установки очень многих библиотек. код ошибки идентичный для других.
<code>
    C:\Users\Печка>pip3 install pyinstaller
Collecting pyinstaller
  Using cached pyinstaller-4.2.tar.gz (3.6 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... error
    ERROR: Command errored out with exit status 1:
     command: 'C:\Users\Печка\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\python.exe' 'C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.496.0_x64__qbz5n2kfra8p0\lib\site-packages\pip\_vendor\pep517\_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\E898~1\AppData\Local\Temp\tmp5h5ebp4y'
         cwd: C:\Users\Печка\AppData\Local\Temp\pip-install-uvwc84hh\pyinstaller
    Complete output (38 lines):
    Error in sitecustomize; set PYTHONVERBOSE for traceback:
    SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte (sitecustomize.py, line 21)
    running dist_info
    creating C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.egg-info
    writing C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.egg-info\PKG-INFO
    writing dependency_links to C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.egg-info\dependency_links.txt
    writing entry points to C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.egg-info\entry_points.txt
    writing requirements to C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.egg-info\requires.txt
    writing top-level names to C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.egg-info\top_level.txt
    writing manifest file 'C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.egg-info\SOURCES.txt'
    reading manifest file 'C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.egg-info\SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    warning: no files found matching 'pyinstaller-gui.py'
    no previously-included directories found matching 'bootloader\build'
    no previously-included directories found matching 'bootloader\.waf-*'
    no previously-included directories found matching 'bootloader\.waf3-*'
    no previously-included directories found matching 'bootloader\waf-*'
    no previously-included directories found matching 'bootloader\waf3-*'
    no previously-included directories found matching 'bootloader\_sdks'
    no previously-included directories found matching 'bootloader\.vagrant'
    warning: no previously-included files found matching 'bootloader\.lock-waf*'
    no previously-included directories found matching 'doc\source'
    no previously-included directories found matching 'doc\_build'
    warning: no previously-included files matching '*.tmp' found under directory 'doc'
    warning: no files found matching 'news\_template.rst'
    no previously-included directories found matching 'news'
    no previously-included directories found matching 'old'
    no previously-included directories found matching 'scripts'
    no previously-included directories found matching 'tests\scripts'
    no previously-included directories found matching '.github'
    warning: no previously-included files found matching '.*'
    warning: no previously-included files found matching '*.yml'
    warning: no previously-included files found matching '*~'
    warning: no previously-included files found matching '.directory'
    warning: no previously-included files matching '*.py[co]' found anywhere in distribution
    writing manifest file 'C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.egg-info\SOURCES.txt'
    creating 'C:\Users\Печка\AppData\Local\Temp\pip-modern-metadata-3iv43m0g\pyinstaller.dist-info'
    error: invalid command 'bdist_wheel'
    ----------------------------------------
ERROR: Command errored out with exit status 1: 'C:\Users\Печка\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\python.exe' 'C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.496.0_x64__qbz5n2kfra8p0\lib\site-packages\pip\_vendor\pep517\_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\E898~1\AppData\Local\Temp\tmp5h5ebp4y' Check the logs for full command output.
</code>

У вас ругается на отсутствие wheel.
error: invalid command 'bdist_wheel'
Решение - установить его:

pip install wheel

После этого уже пробуйте устанавливать необходимые пакеты.


Как выбрать элементы списка в цикле с интервалом
У меня имеется список, в котором есть числа: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Также у меня имеется пустой список, в который я должен добавить выбранные числа из первого.
Каким образом мне в цикле выбрать числа с интервалом для присвоения?
Это моя первая программа на питоне и я профан в данном ЯП.
К примеру в C# я сделал бы это следующим образом:
<code>
int j = 0;
for(int i = 0; i < array1.Length; i += 2) {
    array2[j] = array1[i];
    j++
}
</code>
Подобным кодом я бы получил интервал в одно значение списка между числами. Как я могу организовать нечто подобное в python?

Если хотите именно "По-питонски", а не "с помощью Python но на C#":
<code>
lt1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
lt2 = lt1[::2]
print(lt2)

[1, 3, 5, 7, 9]
</code>


Как объявить массив numpy с заданным размером?
Мне надо создать массив типа
(3, 3, 1). Когда я объявляю
data = np.array([[[]]]), то размер массива
(1, 1, 0).
Нормально, задать размер массиву можно только, если сразу при создании записать в него значения, но мне это не подходит, т. к. массив я заполняю дальше в коде. При попытке изменить параметр
shape студия выдает ошибку:

cannot reshape array of size 0 into shape (3,3,1)

Как объявить массив numpy размером
(3,3,1) без заполнения сразу при создании?

Вариант 1: неинициализированные значения

a = np.empty((3,3,1))

Вариант 2: нули

a = np.zeros((3,3,1))

Вариант 3: заполняем значением (параметр:
fill_value )

a = np.full((3,3,1), fill_value=np.nan)

PS в первом варианте значения матрицы могут иметь случайные (неинициализированные) значения.


Парсер забирает текст, но не выводит его в консоль
Код:

def g():
    r = requests.get()

def get_page_data(html):
    soup = BeautifulSoup(html)
    trs = soup.find_all('tr')

    for tr2 in trs:     # Попытка забрать время
        try:
            tds2 = tr2.find_all('td', class_='first time')
            name = tds2[0].find('td').text
        except:
            name = ''

        print(name)

Менял теги поиска, обращался к разным записям в списке
trs, все равно в консоли пусто...
Тогда возникает вопрос этот текст присутсвует или нет?
Можно текст дальше использовать в работе или нет?

Что-то вы намудрили там ;)
Моя "Попытка забрать время":

for tr in trs:     # Попытка забрать время
    tr_time = tr.find('td', class_='first time')
    if tr_time:
        print(tr_time.text[:5])

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

--:--
03:10
03:10

...

16:00
16:00

PS периодически проскакивают такие:
16:00Live streamsbet365bwin, нужно найти откуда и скорректировать код
UPD формат часы:минуты везде одинаковый, поэтому просто [:5], чтоб оставить только нужное


Ошибка “EOF when reading a line”
При запуске кода выдает ошибку EOF when reading a line...
Вероятно, что-то не так с 4-й строкой, но не понимаю, что именно?

a = int(input())
b = 0
i = 0

while i <= a+1:
    s = input()

    if "rat" in s:
        b = 1
        i = i + 1
        print(i)

    if b == 0:
        print("-1")

Ввод:

3
baby will cry without a rattle
rodents mutated because of radiation
rotten eggs smell bad

Просто количество
s = input() больше, чем нужно, вот оно и ругается...
Попробуйте так:

rows_total = int(input())
row_current = 1
is_rat = False

while row_current <= rows_total:
    s = input()
    if "rat" in s:
        is_rat = True
        print(row_current)
    row_current += 1

if not is_rat:
    print("-1")


ошибка Traceback в python
Мой код:

def f(n):

    if n == 1:
        return 1
    if n == 2:
        return 2
    elif n > 2 and n % 2 != 0:
        return 7 * n + f(n - 3) / 9
    elif n > 1 and n % 2 == 0:
        return 5 * n + f(n - 1) + f(n - 2) / 9

print(f(50))

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

Traceback (most recent call last):
  File "<input>", line 12, in <module>
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
  File "<input>", line 10, in f
  File "<input>", line 10, in f
  File "<input>", line 8, in f
TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'

В чем проблема?

А что будет, если вызвать
f(0). Функция вернет
None и тогда в рекурсии происходит вот что:
None/9. Вам нужно определить поведение функции при входящем
n меньше единицы, например так:

def f(n):
    if n < 1:
        return 0
    if n == 1:
        return 1
    if n == 2:
        return 2
    elif n > 2 and n % 2 != 0:
        return 7 * n + f(n - 3) / 9
    elif n > 1 and n % 2 == 0:
        return 5 * n + f(n - 1) + f(n - 2) / 9

print(f(50))

Так же непонятно для чего вам
elif. Так же для чего вот эти сравнения (
n > 2,
n > 1, если код туда и так не должен дойти при невыполнении этих условий.

def f(n):
    if n < 1:
        return 0
    if n == 1:
        return 1
    if n == 2:
        return 2
    if n % 2 != 0:
        return 7 * n + f(n - 3) / 9
    if n % 2 == 0:
        return 5 * n + f(n - 1) + f(n - 2) / 9

print(f(50))

И рубрика, ставшая для меня любимой:

def f(n):
    return 0 if n<1 else 1 if n==1 else 2 if n==2 else 7*n+f(n-3)/9 if n%2 else 5*n+f(n-1)+f(n-2)/9

Или так:

def f(n):
    return 0 if n<1 else n if n in (1, 2) else 7*n+f(n-3)/9 if n%2 else 5*n+f(n-1)+f(n-2)/9

UPD:
Если вкратце, то функция, в которой не выполнился ни один
return, делает его "сама" -
return None. Для простоты представляете функции в своей голове так:

def f(x):
    # ваш код с ветвлениями, циклами и еще, бог весь чем
    return None # функция "сама добавляет" эту строку в конец себя.


Я решл задачку с ACMP на питоне вот сама задача https://acmp.ru/index.asp?main=task&id_task=38 [закрыт]

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

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

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

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

<code>
a=int(input())
d=input().split()
d1=d
i1=0
i2=0
Flag=1
#Flag=-1 это ход второго игрока
for i in range(len(d1)):
    if Flag==1:
        i1=i1+max(int(d1[0]),int(d1[len(d1)-1]))
        if int(d1[0])>int(d1[0]):
            d1.pop(d1[0])
        else:
            d1.pop([0])
    if Flag==-1:
        i2=i2+max(int(d1[0]),int(d1[len(d1)-1]))
        if int(d1[0])>int(d1[0]):
            d1.pop([0])
        else:
            d1.pop([0])
    Flag=Flag*-1
print(i1,',',i2)
if i1>i2:
    print(1)
if i1<i2:
    print(2)
if i1==i2:
    print(0)
</code>
Она не проходит скажите в чём проблема и если можно скиньте готовый код

если бы вы сделали так:

d = list(map(int, input().split()))

вам не пришлось бы по всему коду потом писать
int(d1) и т.п. нарываясь на возможную ошибку если забудете преобразовать данные
ошибки:

d1.pop([0])

вот это у вас что такое?

arr = [1, 2, 3, 4]

arr.pop([0])

print(arr)

TypeError: 'list' object cannot be interpreted as an integer


Завершить программу считывания скорости двигателя гироскопом, когда скорость двигателя будет равна ~ 0
Решил задачу следующим способом: программа считывает значение первые несколько секунд. Пока двигатель разгоняться, проверка значения скорости не работает. Через пару секунд после разгона срабатывает таймер, который изменяет флаг переменной TimeEND и после это уже начинает работу функция которая проверяет равна ли скорость нулю. Если больше нуля, то программа продолжает работать, а если равна нулю, следовательно двигатель остановился и можно прекращать работу программы.
Как мне кажется программа слишком запутана и нерациональна. Как можно её упростить и сделать более pythonic?
<code>
import random
import time
from threading import Timer

m = 0  # Число при котором цикл завершится
TimeEND = False  # Флаг начального времени для разгона двигателя
MotorStop = False  # Флаг остановки двигателя
StartTime = time.time()  # Время запуска

def randoms(min, max):
    x = random.randint(min, max)
    return x

def foo(x):
    global MotorStop
    if x == m:
        MotorStop = True
    return MotorStop

def timeout_handler():  # Функция остановки цикла
    global TimeEND
    StepTime = time.time()  # Время окончания
    TotalTime = StepTime - StartTime  # Вычисляем затраченное время
    print("Время, затраченное на выполнение данного кода = ", TotalTime)
    TimeEND = True  # Меняем флаг времени на разгон

try:
    timer = Timer(2.05, timeout_handler)  # Инициализация таймера
    timer.start()  # Запуск таймера
    while MotorStop == False:  # Проверяем флаг остановки двигателя
        x = randoms(0, 10)  # Эмуляция данных гироскопа
        print(x)
        if TimeEND:  # Если начальное время на разгон истекло, начинается проверка условия скорости
            MotorStop = foo(x)

finally:
    StepTime = time.time()
    TotalTime = StepTime - StartTime
    print(
        f"Завершение работы. Двигатель Остановился через {TotalTime} секунды")
</code>

Непонятно для чего вы используете
global в функции
foo, если значение все равно отдаете через
return

def foo(x):
    MotorStop = False
    if x == m:
        MotorStop = True
    return MotorStop

Однако тогда лучше сделать так:

def foo(x):
    return x == m

Тогда для чего выносить это в отдельную функцию ?:

try:
    timer = Timer(2.05, timeout_handler)  # Инициализация таймера
    timer.start()  # Запуск таймера
    while MotorStop == False:  # Проверяем флаг остановки двигателя
        x = randoms(0, 10)  # Эмуляция данных гироскопа
        print(x)
        if TimeEND:  # Если начальное время на разгон истекло, начинается проверка условия скорости
            MotorStop = x==m
...

Можно сделать так:

Timer(2.05, timeout_handler).start()

вместо ваших

timer = Timer(2.05, timeout_handler)  # Инициализация таймера
timer.start()  # Запуск таймера

Цикл
while можно сделать таким, избавившись от переменной
MotorStop:

while True:  # Проверяем флаг остановки двигателя
    x = randoms(0, 10)  # Эмуляция данных гироскопа
    print(x)
    if TimeEND and x==m:
        break

Пожалуй, финал: названия переменных лучше делать "нормальными".
m - что за переменная такая. Лучше -
stop_speed


Как сделать меню на питоне?
Как сделать, чтобы я мог переходить по 4-м пунктам:

Георгий гарас
Правила
Язык
Выход

если перехожу по 1 то выбивает ищё 3 пункта 1.Орнамент 2.Биография 3.Назад
если перехожу по 2 то выбивает Сами правила(сам впишу) и 1 пункт Назад
если перехожу по 3 попробую сам как нибудь сделать
и есмли перехожу по 4 то выхожу из программы
Код:

<code>
from colorama import init, Fore

text1 = """
    nn  z  nn    x    nn  z  nn    x    nn  z
x   n  zzz  n   xyx   n  zzz  n   xyx   n  zz
yx  n zzizz n  xyyyx  n zzizz n  xyyyx  n zzi
yyx nzziiizzn xyyyyyx nzziiizzn xyyyyyx nzzii
 yyx nzzizzn xyy z yyx nzzizzn xyy z yyx nzzi
z yyx nzzzn xyy zzz yyx nzzzn xyy zzz yyx nzz
 yyxyx nzn xyxyy z yyxyx nzn xyxyy z yyxyx nz
yyxzxyx n xyxzxyy yyxzxyx n xyxzxyy yyxzxyx n
yxzzzxyx xyxzzzxyyyxzzzxyx xyxzzzxyyyxzzzxyx
xxxzxxxyxyxxxzxxxyxxxzxxxyxyxxxzxxxyxxxzxxxyx"""

text2 = """
x xxx yzzz   zzzxzxyz   zyxzxzzz   zzzy xxx x
x xxx zyzz xxx  yxzxyz zyxzxy  xxx zzyz xxx x
  xxx zzyz xxx  yyxzxyzyxzxyy  xxx zyzz xxx
x     zzzy xxx  yyyxzxxxzxyyy  xxx yzzz     x
x      xxx yyyy      zxz      yyyy xxx      x
x      xxx yyyy xxx  zxz  xxx yyyy xxx      x
x      xxx yyyy xxx  zbz  xxx yyyy xxx      x
           yyyy xxx  zbz  xxx yyyy
x              y      b      y         xz   x
x    zx     xxx yzzz  b  zzzy xxx     xzx   x
  x  xzx    xxx zyzz  b  zzyz xxx    xzx  x
x yx  xzx   xxx zzyz  b  zyzz xxx   xzx  xy x
x zyx  xzxz     zzzxxxxxxxzzz      xzx  xzy x
   zyx  xzxz       x  b  x        xzx  xyz
x   zyx  xzxzzz    x  b  x    zzzxzx  xyz   x
x    zyx  xxxbbbbbbxbbbbbxbbbbbbxxx  xyz    x
x   zyx  xzxzzz    x  b  x    zzzxzx  xyz   x
   zyx  xzxz       x  b  x        xzx  xyz
x zyx  xzxz     zzzxxxxxxxzzz      xzx  xzy x
x yx  xzx   xxx zzyz  b  zyzz xxx   xzx  xy x
  x  xzx    xxx zyzz  b  zzyz xxx    xzx  x
x    zx     xxx yzzz  b  zzzy xxx     xzx   x
x              y      b      y         xz   x
           yyyy xxx  zbz  xxx yyyy
x      xxx yyyy xxx  zbz  xxx yyyy xxx      x
x      xxx yyyy xxx  zxz  xxx yyyy xxx      x
       xxx yyyy     zxxxz     yyyy xxx
x         y        zxzxzxz        y         x
x     zzzy xxx  yyyxzxxxzxyyy  xxx yzzz     x
  xxx zzyz xxx  yyxzxyzyxzxyy  xxx zyzz xxx
x xxx zyzz xxx  yxzxyz zyxzxy  xxx zzyz xxx x
x xxx yzzz   zzzxzxyz   zyxzxzzz   zzzy xxx x"""

colors = {
    'z': Fore.RED,
    'x': Fore.BLACK,
    'y': Fore.GREEN,
    'n': Fore.LIGHTGREEN_EX,
    'i': Fore.YELLOW,
    'b': Fore.BLUE
}
inputData = input("1.Георгий гарас\n2.Правила\n3.Язык\n4.Выход")

init()
print("\t\t\t\tОРНАМЕНТ №1")
for c in text1:
    print(colors.get(c, '') + c, end='')
print(Fore.WHITE)
print("\n\n\n")
print("\t\t\t\tОРНАМЕНТ №2")

for c in text2:
    print(colors.get(c, '') + c, end='')

print(Fore.WHITE)
</code>

Вот так, к примеру:

def menu():
    def first():
        while True:
            ch = input('1. Биография\n2.Назад\n')
            if ch == '2':
                return
            if ch == '1':
                print('Биография Георгия.....')

    def second():
        while True:
            ch = input('1.Правила\n2.Назад\n')
            if ch == '2':
                return
            if ch == '1':
                print('Правила: ....')

    while True:
        ch = input("1.Георгий гарас\n2.Правила\n3.Язык\n4.Выход\n")
        if ch == '4':
            return
        if ch == '1':
            first()
        elif ch == '2':
            second()

# ваш код

menu()

Python 3.9:

def menu():
    def first():
        while ch := input('1.Биография\n2.Назад\n') != '2':
            if ch == '1':
                print('Биография Георгия.....')

    def second():
        while ch := input('1.Правила\n2.Назад\n') != '2':
            if ch == '1':
                print('Правила: ....')

    while ch := input("1.Георгий гарас\n2.Правила\n3.Язык\n4.Выход\n") != '4':
        if ch == '1':
            first()
        elif ch == '2':
            second()


Подскажите, как закончить цикл? [закрыт]

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

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

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

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

<code>
while True:
    name = input("да или нет?")
    if name == "да":
        print("Погнали!")
    elif name == "нет":
        print("Как хочешь.Пока.")
    else:
        print("выберите одно из перечисленных действий.")
</code>

Можно цикл не делать бесконечным:
<code>
name = ''
while name not in ['да', 'нет']:
    name = input('Введите "да" или "нет"?')
    if name == 'да':
        print('Погнали!')
    elif name == 'нет':
        print('Как хочешь... Пока!')
</code>


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

import numpy as np
arr = np.array([18, 4, 15, 14, 6, 7, 11, 12, 8, 5, 7, 0, 12, 0, 2, 18])

Ожидаемый результат:

[nan nan nan nan  4.  4.  6.  6.  6.  5.  5.  0.  0.  0.  0.  0.]

Решение с циклом:

period = 5
lowest = np.full_like(arr, np.nan, dtype=float)

for i in range(period-1, len(arr)):
    lowest[i] = np.min(arr[i-(period-1) : i+1])

Можно ли получить векторизированным способом, без цикла?

решение в Pandas - воспользуйтесь Series.rolling(...):

import pandas as pd

s = pd.Series(arr)
res = s.rolling(5).min()

результат:

In [316]: res
Out[316]:
0     NaN
1     NaN
2     NaN
3     NaN
4     4.0
5     4.0
6     6.0
7     6.0
8     6.0
9     5.0
10    5.0
11    0.0
12    0.0
13    0.0
14    0.0
15    0.0
dtype: float64

или в виде
numpy.NDArray:

In [317]: res.to_numpy()
Out[317]:
array([nan, nan, nan, nan,  4.,  4.,  6.,  6.,  6.,  5.,  5.,  0.,  0., 0.,  0.,  0.])


Как сравнить два файла .csv и записать похожие значения в третий файл?
Есть 2 CSV файла: visit_log.csv и dict.csv. В первом файле колонки
user_id, source, во втором
user_id, category.
Необходимо найти общее значение
user_id в обоих файлах и записать в третий файл funnel.csv с указанием категории.
Через мой код происходит перезапись, но мне кажется, что funnel.csv дублирует dict.csv:

import csv

with open('funnel.csv', 'w') as response_file:
   with open('visit_log.csv', 'r') as f:
       with open('dict.csv', 'r') as s:
              for line in f.readlines():
                   for line in s.readlines():
                       if "user_id" == "user_id":
                           response_file.write(line)

я бы решал эту задачу используя модуль Pandas:

import pandas as pd

fn1 = r"/path/to/visit_log.csv"
fn2 = r"/path/to/dict.csv"
output_fn = r"/path/to/funnel.csv"

df1 = pd.read_csv(fn1)
df2 = pd.read_csv(fn2)
res = df1.merge(df2)
res.to_csv(output_fn, index=False)

вариант для извращенцев любителей однострочников:

(pd
 .read_csv(fn1)
 .merge(pd.read_csv(fn2))
 .to_csv(output_fn, index=False))
)


Как собрать все теги на странице?
Код:

def g():
    r = requests.get()

def write_csv(data):
    with open('cmc.csv') as f:
        writer = csv.writer(f)

def get_page_data():
    soup = BeautifulSoup(html)

Как собрать все теги
tr на странице?
Возвращает только 45.
Конретизировал критерии поиска, возвращет 0 или 45.

У вас на странице - несколько таблиц, а код

trs = soup.find('div', id='center').find('tbody').find_all('tr')

из-за
.find('tbody') берет только первую из них...
Попробуйте брать просто все-все строки:

trs = soup.find('div', id='center').find_all('tr')


Как записать значение в текстовый файл?
Как записать значение в текстовый файл, в конец определённой строки?
Есть файл с n-ым количеством строк, как мне добавить значение в 2 строку что бы оно было в конце этой строки. Этот код добавляет значение в начало строки:
<code>
f = open("example.TXT", "r", encoding='utf-8')
contents = f.readlines()
f.close()

contents.insert(1, 'bla-bla-bla')

f = open("example.TXT", "w", encoding='utf-8')
contents = "".join(contents)
f.write(contents)
f.close()
</code>
Как сделать так что бы он добавлял это значение в конец определённой строки строки?

считать весь файл в список через
readlines()

изменить элемент списка с нужным индексом (позиция строки)

 lines = file.readline();

 lines[index] = lines[index][:-1] + my_text + "\n"

вначале главное у нужной строки отрезать
\n в конце

перезаписать файл (записать новый список) через
writelines()


Выдает ошибку TypeError: warn_the_sheep_begin() missing 2 required positional arguments: 'herd' [закрыт]

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

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

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

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

<code>

herd =['sheep', 'sheep', 'sheep', 'sheep', 'sheep', 'wolf', 'sheep', 'sheep']
def where_wolf():
    for i in range (0,len(herd)):
        if herd[i]=='wolf':
            return i
i = where_wolf()

def warn_the_sheep_begin(herd):
    i = i+1
    while herd[i]=='sheep':
        herd.remove(i)
        i = i+1
        return herd
print(warn_the_sheep_begin())

</code>

у вас функция требует входной параметр

def warn_the_sheep_begin(herd)

но вы вызываете ее без параметра

print(warn_the_sheep_begin())

когда вы это исправите, то получите ошибку в строке

def warn_the_sheep_begin(herd):
    i = i+1 # <- ошибка тут

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

    herd.remove(i)
    i = i+1

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

i = where_wolf()

ведь если волк не найден, то функция
where_wolf ничего не возвращает, т.е. будет возвращено
None, а вы это никак не обрабатываете, считая что в
i всегда число
далее у вас ошибка в цикле
while

while herd[i]=='sheep':
    herd.remove(i)
    i = i+1
    return herd

в чем смысл цикла, если вы его сразу прерываете через
return
кроме того в функции
warn_the_sheep_begin у вас опять нет общего
return из-за чего функция будет возвращать
None если волки идут один за другим
P.S.
это вообще ваш код или вы пытаетесь что-то наваять на чужом, но с нулевыми знаниями в питоне?
P.P.S.
как я понимаю, ваш? код должен был делать только это:

herd = ['sheep', 'sheep', 'sheep', 'sheep', 'sheep', 'wolf', 'sheep', 'sheep', 'wolf']

def warn_the_sheep_begin(herd):
    start = herd.index('wolf') if 'wolf' in herd else -1

    if start == -1:
        return herd

    finish = herd.index('wolf', start + 1) if 'wolf' in herd[start + 1:] else -1

    return herd[:start + 1] + (herd[finish:] if finish != -1 else [])

print(warn_the_sheep_begin(herd))

P.P.P.S.
вот так функция даже попонятнее и побыстрее будет

def warn_the_sheep_begin(herd):
    try:
        start = herd.index('wolf')
    except ValueError:
        return herd

    try:
        finish = herd.index('wolf', start + 1)
    except ValueError:
        return herd[:start + 1]

    return herd[:start + 1] + herd[finish:]


Как сделать объект класса с встроенным отсчётом?
Допустим есть объект человек:

class Human(Alive):
    def __init__(self, name, age):  # и еще куча полей...

Есть число 832200. Из этого числа делается отсчёт, по его истечению поля будут перенесены в другой класс.
Я понимаю что можно сделать:

self.age = 832200  # понимаю что тут должно быть time_to_death

while self.age >= 0:
    self.age = self.age - 1

Так вот вопросы:

Как привязать такой цикл к каждому объекту?
Наверняка есть метод по лучше, учитывая что объектов будет 500-1000
Как еще можно про инициировать старение в классе человек?

P.S объекты не должны удалятся...

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

import random

class Life():

    def __init__(self, age, max_age):
        self.age = age
        self.max_age = max_age

    def add_year(self):
        self.age += 1

    def is_alive(self):
        return self.age <= self.max_age

class Human(Life):

    def __init__(self, name, age):  # и еще куча полей...
        super().__init__(age, 100)
        self.name = name

    def __repr__(self):
        return f"Человек по имени {self.name}, возраст {self.age}"

    def get_being(self):
        return self if self.is_alive() else Soul(self.name)

class Soul():

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return f"Душа по имени {self.name}"

    def get_being(self):
        return self

    def add_year(self):
        pass

class Planet():

    def __init__(self, name, population):
         self.name = name
         self.beings = []
         for i in range(population):
             name = random.choice(["Вася", "Петя", "Света", "Надя"])
             age = random.randint(0, 100)
             self.beings.append(Human(name, age))

    def __repr__(self):
        return f'Текущее население планеты {self.name}\n' + '\n'.join([repr(b) for b in self.beings])

    def add_year(self):
        for b in self.beings:
            b.add_year()
        self.beings = [b.get_being() for b in self.beings]

e = Planet("Земля", 4)
print(e)
for i in range(30):
    e.add_year()
print(e)

Вывод:

Текущее население планеты Земля
Человек по имени Света, возраст 12
Человек по имени Вася, возраст 54
Человек по имени Надя, возраст 73
Человек по имени Вася, возраст 80

Текущее население планеты Земля
Человек по имени Света, возраст 42
Человек по имени Вася, возраст 84
Душа по имени Надя
Душа по имени Вася


Dataframe перебор значений в for
Открываю dataframe, в нем столбцы:

Data, type, rotor

type - значения от 1 до 15 повторяющиеся, rotor просто значения разные.
Хочу сделать много новых столбов df['rotor_'+str...], в которых будет копия df['rotor'], но без некоторых комбинаций по type: например, не будет 4, 8, 9, 11, 12 значений из всех.
Делаю такой цикл, но, может, возможно сделать это более красиво и компактно, а главное - быстрее по скорости исполнения, Все-таки это пока что медленно: пока переберутся все значения, проходит много времени, а кололичкство строк измеряется миллионами:

for i in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]:
    for a in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]:
        for b in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]:
            for c in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]:

                df['a'] = df['rotor']

                df.loc[df['type'] == i, 'a'] = 0
                df.loc[df['type'] == a, 'a'] = 0
                df.loc[df['type'] == b, 'a'] = 0

                df['rotor_'+str(i)+'.'+str(a)+'.'+str(b)+'.'+str(c)] = df['a']

                print(i,a,b,c)
                df['a'] = 0

import itertools

for el in itertools.product(range(1, 16), repeat=7):
    for i in el:
        df['a'] = df['rotor']
        df.loc[df['type'] == i, 'a'] = 0
        df['rotor_'+"".join(map(str, el))] = df['a']
    print(*el)


Изменить фоновое изображение Python Moviepy
Есть видео .mp4 и картинка в произвольном формате.
Как заменить все кадры видео на данную картинку, причем с сохранением аудиоряда?

Даже проверил - работает:
<code>
vi = VideoFileClip('видео.mp4')

im = ImageClip('картинка.jpg', duration=vi.duration)
im = im.resize(vi.size)
im = im.set_audio(vi.audio)

im.write_videofile("результат.mp4",fps=1, codec='libx264')
</code>


TypeError: unsupported operand type(s) for +: 'function' and 'int' [закрыт]

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

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

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

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

Создаю игру и когда хочу вызвать переменную вызывается функция.
Код ошибки:

Traceback (most recent call last):
  File "C:\Game\main.py", line 60, in <module>
    game_loop(score)
  File "C:\Game\main.py", line 7, in game_loop
    score = score + 1
TypeError: unsupported operand type(s) for +: 'function' and 'int'

Код игры:

    import random
from colorama import init
from colorama import Fore, Style
def game_score():
    score = 0
def game_loop(score):
    score = score + 1
    init()
    r = random.randint(1, 10)
    r2 = random.randint(1, 10)
    rn = random.randint(1, 3)
    if rn == 1:
        znak = "+"
    if rn == 2:
        znak = "-"
    if rn == 3:
        znak = "*"
    if znak == "*":
        print(Fore.BLUE+"Сколько будет " + str(r) + znak + str(r2))
        ans1 = input(Fore.YELLOW+"Ведите правильный ответ:")
        right1 = r * r2
        if str(ans1) == str(right1):
            print(Fore.GREEN+"Правильно!")
            print(Style.RESET_ALL)
            print("У вас очков " + str(score))
            game_loop(game_score)

        else:
            print(Fore.RED+"Ответ не правильный")
            print(Fore.CYAN+"Игра началась заново")
            print(Style.RESET_ALL)
            game_score()
    if znak == "-":
        print(Fore.BLUE+"Сколько будет " + str(r) + znak + str(r2))
        ans2 = input(Fore.YELLOW+"Ведите правильный ответ:")
        right2 = r - r2
        if str(ans2) == str(right2):
            print(Fore.GREEN+"Правильно!")
            print(Style.RESET_ALL)
            print("У вас очков " + str(score))
            game_loop(game_score)
        else:
            print(Fore.RED+"Ответ не правильный")
            print(Fore.CYAN+"Игра началась заново")
            print(Style.RESET_ALL)
            game_score()
    if znak == "+":
        print(Fore.BLUE+"Сколько будет " + str(r) + znak + str(r2))
        ans3 = input(Fore.YELLOW+"Ведите правильный ответ:")
        right3 = r + r2
        if str(ans3) == str(right3):
            print(Fore.GREEN+"Правильно!")
            print(Style.RESET_ALL)
            game_loop(game_score)
        else:
            print(Fore.RED+"Ответ не правильный")
            print(Fore.CYAN+"Игра началась заново")
            print(Style.RESET_ALL)
            game_score()
game_loop(game_score)

Я подизменил ваш код, вкратце вы забили написать
return в функции
game_score

from colorama import init
from colorama import Fore, Style
def game_score():
    score = 0
    return score
def game_loop(score):
    score = int(score()) + 1
    init()
    r = random.randint(1, 10)
    r2 = random.randint(1, 10)
    rn = random.randint(1, 3)
    if rn == 1:
        znak = "+"
    if rn == 2:
        znak = "-"
    if rn == 3:
        znak = "*"
    if znak == "*":
        print(Fore.BLUE+"Сколько будет " + str(r) + znak + str(r2))
        ans1 = input(Fore.YELLOW+"Ведите правильный ответ:")
        right1 = r * r2
        if str(ans1) == str(right1):
            print(Fore.GREEN+"Правильно!")
            print(Style.RESET_ALL)
            print("У вас очков " + str(score))
            game_loop(game_score())

        else:
            print(Fore.RED+"Ответ не правильный")
            print(Fore.CYAN+"Игра началась заново")
            print(Style.RESET_ALL)
            game_score()
    if znak == "-":
        print(Fore.BLUE+"Сколько будет " + str(r) + znak + str(r2))
        ans2 = input(Fore.YELLOW+"Ведите правильный ответ:")
        right2 = r - r2
        if str(ans2) == str(right2):
            print(Fore.GREEN+"Правильно!")
            print(Style.RESET_ALL)
            print("У вас очков " + str(score))
            game_loop(game_score())
        else:
            print(Fore.RED+"Ответ не правильный")
            print(Fore.CYAN+"Игра началась заново")
            print(Style.RESET_ALL)
            game_score()
    if znak == "+":
        print(Fore.BLUE+"Сколько будет " + str(r) + znak + str(r2))
        ans3 = input(Fore.YELLOW+"Ведите правильный ответ:")
        right3 = r + r2
        if str(ans3) == str(right3):
            print(Fore.GREEN+"Правильно!")
            print(Style.RESET_ALL)
            game_loop(game_score())
        else:
            print(Fore.RED+"Ответ не правильный")
            print(Fore.CYAN+"Игра началась заново")
            print(Style.RESET_ALL)
            game_score()
game_loop(game_score)


Изменение элемента в нескольких списках по его индексу в Python
У меня есть список со списками. Нужно в каждом из подcписков заменить одно значение по индексу на другое значение. Покажу на примере:

list = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]

for podlist in list:
    for i in podlist:
        if podlist.index(i) == 0:
            i = 2
print(list)

Что я получаю:

[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]

Желаемый результат:

[[2, 2, 3, 4, 5, 6, 7, 8, 9, 10], [2, 2, 3, 4, 5, 6, 7, 8, 9, 10], [2, 2, 3, 4, 5, 6, 7, 8, 9, 10]]


Сравнение ключ словаря dict с регулярным выражением
У меня есть словарь, в котором перечислены люди и их дни рождения в формате:

dni_ludi = {"Дата рождения":"ФИО", "Дата рождения":"ФИО"}

А также регулярное выражение, в котором вписаны нужные мне даты. Например, только те люди, которые родились с марта по апрельм(регулярка составлена правильно, проверял на онлайн интерпретаторе):

regular = r'(?<!\d)(?:0?|[1-3][0-9]|).(?:0?[0-9]|1[0-2]).(?:19[0-9][0-9]|20[01][0-9])(?!\d)'

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

Вот так можно:
<code>
for key in dni_ludi:
    if re.findall(regular, key):
        print('Дата подходит: ', dni_ludi[key])
</code>