Помогите обратиться к елементу списка Python
У меня есть код, в котором в окне Tkinter`а цикл выводит название всех файлов в папке в фрейм.
Но я хотел также добавить кнопки удаления и открытия этих файлов.
Но я не знаю как обратиться к конкретному елементу, ведь каждый созданый фрейм - это отдельная итерация цикла For.
код цикла:

        self.arrcount =0
        self.blocksCounter = 0
        self.Height = 0.05
        for i in range(self.file_count):
            self.videoBlock = tk.Frame(self.mainFrame1, bg=self.darkColour)
            self.videoBlock.place(relx=0.01, rely=self.Height, relwidth=0.95, relheight=0.2)
            self.vTitle = tk.Label(self.videoBlock, bg = self.darkColour, fg = self.whitecolour, text = self.count[2][self.arrcount], anchor = tk.W, font = ('Helvetica', 14) )
            self.vTitle.place(relx = 0.3, rely = 0.1, relwidth = 0.7, relheight = 0.2)
            self.openBtn = tk.Button(self.videoBlock, fg = self.darkColour, bg = self.cactive,bd = 0, text = "Open" ,command=self.openfile)
            self.openBtn.place(relx = 0.3, rely = 0.4, relwidth = 0.1, relheight = 0.25)
            self.deleteBtn = tk.Button(self.videoBlock, bg= 'red', fg = self.whitecolour, text = "X", command = self.removeFile)
            self.deleteBtn.place(relx = 0.94, rely = 0.65, relwidth = 0.05, relheight = 0.3)
            self.Height += 0.22
            self.blocksCounter += 1
            self.arrcount +=1

self.file_count - Переменная которая хранит в себе количество файлов в папке
self.count[][] - это список с названием файлов.
Сам список:

('C:/Users/HP/Desktop/Empty Folder', [], ['Duke Dumont - Ocean Drive (Official Music Video).mp4', 'Joji - SLOW DANCING IN THE DARK.mp4', 'Lana Del Rey - Summertime Sadness (Official Music Video).mp4', 'masquerade.mp4', 'The Weeknd - Call Out My Name (Official Video).mp4'])

Сами фреймы и названия он выводит хорошо, как и все кнопки, но как допустим привязять функционал?
Если попробовать такую функцию:

 def removeFile(self):
    self.mes = tk.messagebox.askquestion(title="Warning",icon='warning',message='Do you want to delete this fie?')
    if self.mes == 'yes':
        os.remove(self.count[2][self.arrcount])
        print('File deleted')
    else:
        print('Deleting Canceled')

То код выдает ошибку:

IndexError: list index out of range

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

 def removeFile(self, filename):
    self.mes = tk.messagebox.askquestion(title="Warning", icon='warning',
                             message=f'Do you want to delete file "{filename}" ?')
    if self.mes == 'yes':
        os.remove(filename)
        print('File deleted')
    else:
        print('Deleting Canceled')

        self.arrcount =0
        self.blocksCounter = 0
        self.Height = 0.05
        for i in range(self.file_count):
            self.videoBlock = tk.Frame(self.mainFrame1, bg=self.darkColour)
            self.videoBlock.place(relx=0.01, rely=self.Height, relwidth=0.95, relheight=0.2)
            self.vTitle = tk.Label(self.videoBlock, bg = self.darkColour, fg = self.whitecolour, text = self.count[2][self.arrcount], anchor = tk.W, font = ('Helvetica', 14) )
            self.vTitle.place(relx = 0.3, rely = 0.1, relwidth = 0.7, relheight = 0.2)
            self.openBtn = tk.Button(self.videoBlock, fg = self.darkColour,
                                     bg = self.cactive,bd = 0, text = "Open",
                                     command=lambda: self.openfile(self.count[2][self.arrcount]))
            self.openBtn.place(relx = 0.3, rely = 0.4, relwidth = 0.1, relheight = 0.25)
            self.deleteBtn = tk.Button(self.videoBlock, bg= 'red',
                                       fg = self.whitecolour, text = "X",
                                       command = lambda: self.removeFile(self.count[2][self.arrcount]))
            self.deleteBtn.place(relx = 0.94, rely = 0.65, relwidth = 0.05, relheight = 0.3)
            self.Height += 0.22
            self.blocksCounter += 1
            self.arrcount +=1

Или, если хотите, можете передавать только индекс в списке (
self.arrcount), раз уж сам список всё равно хранится.
(Правда я не понимаю зачем делать атрибутами класса локальные счётчики
self.blocksCounter и
self.arrcount, и чем они отличаются от переменной
i)


Джейден Смит цитаты
проходил задание на сайте codewars.com про Джейдена Смитта
Jaden Smith, the son of Will Smith, is the star of films such as The Karate Kid (2010) and After Earth (2013). Jaden is also known for some of his philosophy that he delivers via Twitter. When writing on Twitter, he is known for almost always capitalizing every word. For simplicity, you'll have to capitalize each word, check out how contractions are expected to be in the example below.
Your task is to convert strings to how they would be written by Jaden Smith. The strings are actual quotes from Jaden Smith, but they are not capitalized in the same way he originally typed them.
Example:
Not Jaden-Cased: "How can mirrors be real if our eyes aren't real"
Jaden-Cased:     "How Can Mirrors Be Real If Our Eyes Aren't Real"
написал вот такой код
<code>
def to_jaden_case(string):
    lst=[]
    x=string.split()
    for i in x:
        y=i.capitalize()
        lst.append(y)
        str="\""+(' '.join(lst))+"\""
    return print(str)
</code>
а сайт говорит что у меня что то не так.
что я сделал не так?

Функция print возвращает None, а вы зачем-то пытаетесь возвращать print. Сделайте так.
<code>
return str
</code>


Python. Numpy. Название столбцов
Допустим есть numpy массив:

a = np.array([[1.2, -3.5, 0., -10.],
              [0.4, 2.1, -0.1, 0.5],
              [0., 1.1, 1., 1.5]])

Как дать названия столбцам 1,2,3,4? Я использовал

a = np.insert(a, 0, [1, 2, 3, 4], 0)

[[  1.    2.    3.    4. ]
 [  1.2  -3.5   0.  -10. ]
 [  0.4   2.1  -0.1   0.5]
 [  0.    1.1   1.    1.5]]

После я хочу сделать какую-нибудь операцию со столбцами, например сложить 1 и 3 столбцы

    [[  [1,3]   2.   4. ]
     [  1.2  -3.5   -10.]
     [  0.3   2.1    0.5]
     [  1.    1.1   1.5]]

Далее сделать так:

    [[  [1,3,4]   2. ]
     [  -8.8   -3.5  ]
     [  0.8     2.1  ]
     [  2.5     1.1  ]]

Т.е я хочу видеть какие столбцы объединил. Добавлять лист как я хочу numpy не дает. Как это можно реализовать? Может быть какие другие библиотеки. Задавать dtype мне кажется не подходит для этого или я в нем плохо разобрался. Но я бы хотел использовать numpy массив из-за удобных функций

Модуль Pandas создан для работы с табличными данными (2D и 1D массивами). 2D таблицы в Pandas называются
DataFrame и представляют из себя набор проиндексированных и именованных столбцов. Каждый столбец под капотом - это 1D Numpy вектор, у которого есть наименование и индексы. В Pandas эти объекты-столбцы называются
Series.
Пример:

In [129]: a = np.array([[1.2, -3.5, 0., -10.],
     ...:               [0.4, 2.1, -0.1, 0.5],
     ...:               [0., 1.1, 1., 1.5]])

In [130]: df = pd.DataFrame(a, columns=[1,2,3,4])

In [131]: df
Out[131]:
     1    2    3     4
0  1.2 -3.5  0.0 -10.0
1  0.4  2.1 -0.1   0.5
2  0.0  1.1  1.0   1.5

In [133]: res = pd.DataFrame({"sum_1_3_4": df[[1,3,4]].sum(axis=1), 2: df[2]})

In [134]: res
Out[134]:
   sum_1_3_4    2
0       -8.8 -3.5
1        0.8  2.1
2        2.5  1.1


Как получить список объектов класса?
У меня есть класс в котором имеются объекты, есть ли возможность получить список этих объектов, не считая способа когда я сам создаю список и добавляю объекты в него?
Пример
<code>
class Example(ExampleAbstract):
    obj1 = '1000321'
    obj2 = 10
    obj3 = SomethingClass.something_method
</code>

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

print(
    {k: v for k, v in Example.__dict__.items()
     if not (k.startswith('__') and k.endswith('__'))
})

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

value = getattr(Example, k)
print(value)

так и заменить его на новое значение:

setattr(Example, k, new_value_obj)


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

import numpy as np
from PIL import Image

rd = int(input())
gd = int(input())
bd = int(input())

img1 = np.copy(Image.open("./Images_processing/image.jpg"))
img = img1.copy()
img[..., 0] += rd
img[..., 1] += gd
img[..., 2] += bd
a = np.where(img <= 255, img, 255)
b = np.where(a >= 0, a, 0)
img = Image.fromarray(b)
img.save("./Images_processing/image1.jpg")

Вот тут я пытаюсь изменить цвет пикселей так, чтобы если он был больше 255, то оставался 255, а если меньше 0, то оставался 0. Но numpy меняет эти значения (если > 255 - то на 0, если < 0, то на 255). Как можно было бы это исправить?
Пример:

import numpy as np
from PIL import Image

rd = 255
gd = 0
bd = 0

img1 = np.copy(Image.open("frame.jpg"))
img = np.clip(img1, 0, 255)
print(img[-1], 'img')
img[..., 0] += rd
img[..., 1] += gd
img[..., 2] += bd
print(img[-1], 'img')
img = Image.fromarray(img)
img.save("image1.jpg")
print(b[-1], 'b')
img = Image.fromarray(b)
img.save("image1.jpg")

Вывод:

[[70 64 64]
 [67 61 61]
 [67 61 61]
 ...
 [49 38 42]
 [52 41 45]
 [44 33 37]] img1

[[69 64 64]
 [66 61 61]
 [66 61 61]
 ...
 [48 38 42]
 [51 41 45]
 [43 33 37]] img2

Process finished with exit code 0

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

import numpy as np

a = np.array([256, -1])
res = np.clip(a, 0, 255) # первый аргумент - массив, второй - минимальное,
                         # третий - максимальное значение в массиве
print(res)

[255   0]


verbose_name для вычислимого поля модели Django
Есть следующая модель. В полях, которые я указываю собственноручно verbose_name прописывается понятным образом. А как прописать verbose_name для поля которое является вычислимым? В данном случае days_worked.
<code>
class Employee(models.Model):
name = models.CharField(max_length=50, verbose_name="ФИО")
date_of_start = models.DateField(verbose_name="Дата оформления")
position = models.ForeignKey("Position", on_delete=models.PROTECT, verbose_name="Должность")
department = models.ForeignKey("Department", on_delete=models.PROTECT, verbose_name="Подразделение")

def __str__(self):
    return self.name

@property
def days_worked(self):
    days_worked = datetime.now().date() - self.date_of_start
    return days_worked.days
</code>

Судя по всему verbose_name для @property не может быть установлено, но вместо него можно использовать short_description:
<code>
days_worked.fget.short_description = 'блаблабла'
</code>


Как переводить пользователя на следующий шаг без ожидания ввода текста?
Как в пошаговой функции работы бота переводить пользователя напрямую к следующему шагу?
У меня один пошаговый цикл в находится в одном файле, а меню Reply клавиатурой в другом. Хочется, чтобы при нажатии клавиши, бот сразу же переходил к выполнению цикла, а не ждал пользовательского ввода через register_next_step_handler.
Приведу пример:
Main.py

def menu_step(message):
    markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
    markup.add('Анкета 1', 'Анкета 2')
    markup.add('Обратная связь')
    bot.send_message(message.chat.id, 'Выбери ниже', reply_markup=markup)

@bot.message_handler(content_types=['text'])
def statistics_step(message):
    if message.text.lower() == 'анкета 1':
        msg = bot.send_message(message.chat.id, 'КАК УБРАТЬ ЭТОТ ТЕКСТ И СРАЗУ ПЕРЕЙТИ К СЛЕДУЮЩЕМУ ШАГУ?')
        bot.register_next_step_handler(msg, Cycle.null_step)

Cycle.py

def null_step(message):
        msg = bot.send_message(message.chat.id, "Введите данные 1")
        bot.register_next_step_handler(msg, one_step)
        # Ну и далее

Можно, конечно, сместить анкету на один шаг и просить ввести данные сразу в Main.py, но не очень красиво. Хотелось бы другой вариант решения.
Хотелось бы именно Reply клавиатуру.

Не нужно использовать
bot.register_next_step_handler(msg, Cycle.null_step) (получение, собственно, 'пользовательского ввода'), а необходимо сразу вызвать необходимую вам функцию:

@bot.message_handler(content_types=['text'])
def statistics_step(message):
    if message.text.lower() == 'анкета 1':
        Cycle.null_step(message)


Print в одну строку
Как объеденить строки print?
<code>
print(*[((alph.index(i)+1)**5 % 91) for i in a])
print(*[(alph.index(i)+1) for i in a])
</code>

способ 1:

print(*[((alph.index(i)+1)**5 % 91) for i in a], end='')
print(*[(alph.index(i)+1) for i in a])

способ 2:

print(*[((alph.index(i)+1)**5 % 91) for i in a], *[(alph.index(i)+1) for i in a])

способ 3:

print(*([((alph.index(i)+1)**5 % 91) for i in a] + [(alph.index(i)+1) for i in a]))


НОД чисел Фибоначчи
Помогите, пожалуйста, понять в чём ошибка.
Как известно, последовательность Фибоначчи определяется следующим образом:
F(0) = 0, F(1) = 1, F(n) = F(n-1)+F(n-2) (для всех n > 1).
По заданным n и m вычислить самый общий делитель чисел F(n) и F(m).
Вводимые данные данные:
Каждая строка является отдельным тестом и содержит два целых числа n и m (1 ≤ n, m ≤ 10^18). Число тестов не превышает 1000
Исходные данные:
Для каждого теста в отдельной строке вывести значение НОД(F(n),F(m)), вычисленное по модулю 10^8.

Вводимые данные :                                        Исходные данные:
2 3                                                      1
1 1                                                      1
100 200                                                  61915075

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

import math
def fibonacci(n):
    fib1 = 1 #0 1 1 2 3 5 8 13 21 34
    fib2 = 1
    i = 0
    while i < n - 2:
        fib_sum = fib1 + fib2
        fib1 = fib2
        fib2 = fib_sum
        i = i + 1
    return fib2
cou=0
while True:
    m, k = map(int, input().split())
    print(math.gcd(fibonacci(m), fibonacci(k)) % 10**8)

Ввод без счётчика можно сделать так:

import sys

for line in sys.stdin:
    n, m = map(int, line.split())
    ...

Других ошибок в коде я не вижу. Трудность только со временем работы. Долго ли будет вычисляться
fibonacci(10 ** 18)? Если ваш компьютер делает один миллиард итераций цикла в секунду (а он работает медленнее, но всё же), то вам нужно
10^18 / 10^9 секунд = 32.5 года.
Даже если вы готовы ждать 33 года (33000 лет для тысячи тестов), у вас нет достаточно памяти чтобы хранить
fibonacci(10 ** 18). По формуле Бине оценим число бит для этого числа:
10**18 * log2((1 + sqrt(5)) / 2) = 6.9e+17 бит = 80820396 Gb.
Плохие новости кончились.
В ответе Sunny Cove есть ключевая идея решения:
НОД(fib(n), fib(m)) = fib(НОД(n, m)). Смотрите свойства чисел Фибоначчи.
Нам нужно посчитать
fib(n) для числа
n <= 10^18. Хотя НОД уже вычислен, он может быть равен большему из чисел. В этом смысле задача проще не стала. В уже упомянутых свойствах есть интересное матричное равенство:

/ 1 1 \ n   / fib(n+1) fib(n)   \
|     |   = |                   |
\ 1 0 /     \ fib(n)   fib(n-1) /

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

import math
import sys

# a     = F[n     - 1], F[n    ], F[n     + 1]
# b     = F[    m - 1], F[    m], F[    m + 1]
# a * b = F[n + m - 1], F[n + m], F[n + m + 1]
def mul_mod(a, b, m):
    return (
        (a[0] * b[0] + a[1] * b[1]) % m,
        (a[0] * b[1] + a[1] * b[2]) % m,
        (a[1] * b[1] + a[2] * b[2]) % m
    )

def pow_mod(a, b, m):
    if b == 0:
        return 1, 0, 1
    if b % 2 == 0:
        q = pow_mod(a, b // 2, m)
        return mul_mod(q, q, m)
    return mul_mod(a, pow_mod(a, b - 1, m), m)

def fib_mod(n, m):
    return 0 if n == 0 else pow_mod((0, 1, 1), n - 1, m)[-1]

for line in sys.stdin:
    n, m = map(int, line.split())
    g = math.gcd(n, m)
    print(fib_mod(g, 10 ** 8))

P.S. Эта программа прошла все тесты на
e-olymp. Худшее время теста - 173ms. Покопавшись можно найти решение на Питоне в пять раз (!) быстрее - 36ms. Есть куда стремиться, если учесть что программа читающая и пишущая тысячу строк работает около 26ms. 10ms на вычисления! Вычислительная часть работает быстрее чем моя в 15 раз!


Как вести счетчик времени от даты в таблице? PytelegramBotApi, Python, SQLite
Всех приветствую!
Возник вопрос при написании Telegram bot'а на библиотеке PyTelegramBotAPI с базой данных SQLite.
Есть задача. Пользователь вызывает команду /remont (условно) -> Отвечает на вопрос "Что именно?" ->  Отвечает на вопрос "Какая неисправность?".
Далее это все заносится в базу данных SQLite в строки: user_id, what_broke, defect, date
user_id и date получаю таким образом:

tconv = lambda x: time.strftime("%H:%M:%S %d.%m.%Y", time.localtime(x))

id = message.from_user.id
date = tconv(message.date)

Собственно вопрос:
Какие существуют способы реализовать счетчик или таймер, который смотрел дату занесения неисправности в таблицу пользователем и каждые два дня оповещал в группе (в которую он добавлен), что заявка "такая-то" не исправлена?
Или по умолчанию заявке даётся 7 дней срока и каждый день отнимается единица и приходит оповещение(но в данном случае при перезапуске бота будет все стираться, а это не хотелось бы)
На сколько я понял также необходима асинхронность, чтобы бот не только считал и вроде для этого существует:

bot = telebot.AsyncTeleBot('<Token>')

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

Я думаю, что как первичное решение вы могли бы реализовать что-то общее для всех пользователей:
Написать скрипт, который будет раз в сутки циклично проходиться по всем записям в базе данных и сравнивать текущие дату и время с указанными в заявке, а затем отправлять уведомления с информацией необходимым пользователям.
В будущем вы могли бы поработать с CRON, чтобы сервер самостоятельно отвечал за активацию скрипта.
Если вы не хотите, чтобы все пользователи получали уведомление в одно время, то скрипт мог бы запускаться периодически и смотреть прошли ли ровно сутки с момента указания на неисправность, но для этого вам может понадобится создание дополнительной таблицы, чтобы вести учет уже отправленных уведомлений.
Начальный скрипт мог бы выглядеть подобным образом:
<code>
import time
import sqlite3
from sqlite3 import Error

# Функция для отправки сообщения через Telebot
def send_message(chat_id, text):
    import telebot
    bot = telebot.TeleBot('1234')
    bot.send_message(chat_id, text)

# Функция для проверки прохождения суток от полученной даты
def check_date(date):
    import datetime
    # получаем текущую дату
    now = datetime.datetime.now()
    # преобразуем дату из строки в дату
    date_from_sql = datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S')
    # получаем время в секундах между датами
    delta = now - date_from_sql
    # преобразуем время в секундах в часы, минуты и секунды
    delta_hours = delta.seconds // 3600
    delta_minutes = (delta.seconds // 60) % 60
    delta_seconds = delta.seconds % 60
    # выводим время в часах, минутах и секундах
    print(f'С записи прошло {delta.days} дней {delta_hours} часов, {delta_minutes} минут и {delta_seconds} секунд')
    # проверяем прошли ли сутки от записи в sqlite
    if delta.days > 0:
        print ('прошли сутки')

# Функция для подключения к БД
def create_connection(db_file):

    conn = None
    try:
        conn = sqlite3.connect(db_file)
    except Error as e:
        print(e)

    return conn

# Основная функция для сравнения дат и отправки уведомлений
def select_yesterday_tasks(conn):

    cur = conn.cursor()

    # Первый вариант (тогда доп. проверки через check_date не нужны):
    # Получаем все записи из таблицы record где дата записи больше текущей даты на день
    # cur.execute("SELECT * FROM record WHERE date > date('now', '-1 day')")

    # Второй вариант: с использованием свой проверки даты
    # Получаем все записи из таблицы record
    cur.execute("SELECT * FROM record")

    rows = cur.fetchall()

    for row in rows:
        date = row[1] # находим значение колонки даты для конкретной записи
        if check_date(date): # Если прошли сутки, то отправляем уведомление:
            send_message(row[0], 'Прошли сутки!') # Отправляем сообщение через Telebot

def main():
    # Здесь указываете местоположение вашей БД
    database = r"C:\sqlite\db\pythonsqlite.db"

    # Подключаемся к БД
    conn = create_connection(database)
    with conn:
        while True:
        # Указываем время ожидания в секундах (1 день)
            time.sleep(86400)
            # Вызываем функцию получения записей и отправки уведомлений
            select_yesterday_tasks(conn, 1)

if __name__ == '__main__':
    main()
</code>


ValueError: cannot handle a non-unique multi-index!
Пытаюсь объединить несколько DataFrame следующем путем, df получаю из
csv файлов

df1 = pd.read_csv('/Users/04.csv', sep='\t')
df1

# col1 col2 col3 col4 col5
# er    tr    rt  ty  rf
# df   gh   yh  ju    jk

df2 = pd.read_csv('/Users/05.csv', sep='\t')
df2

# col1 col2 col3 col4 col5
# rf   gb    th  yn   lk
# lk   pl   vb   sd   gb

load_df = [df1, df2]
index_columns = ['col1', 'col2']
res = pd.concat([df.set_index(index_columns) for df in load_df], axis=1)
print(res)

на выходе получаю ошибку:

ValueError: cannot handle a non-unique multi-index!

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

Судя по ошибке, похоже, что сочетание столбцов
['col1', 'col2'] содержит не уникальные (повторяющиеся) значения и поэтому не может быть установлено в качестве индекса. Поменяйте данные или добавьте ещё какие-то столбцы в индекс, которые позволят ему стать уникальным.


Как менять текст, если изменился ввод?
Я хочу сделать так, чтобы пользователь вводил свой текст, а программа подсчитывала сколько у него символов, но у меня, если повторно нажать на принять, печатается текст внизу, а мне надо, чтобы сам текст изменялся и не печатался повторно
<code>
import tkinter as tk
from tkinter import *

win = Tk()
win.geometry("490x205")
win.resizable(0,0)
win.title("Длина текста")

def textlen():
    def showtextlen(event=None):
        win.geometry("490x250")
        res = len(Input1.get()) - Input1.get().count(' ')
        myLabel1 = Label(win, text=f"Длина: {len(Input1.get())} символов.\nБез пробелов - {len(Input1.get())} - {Input1.get().count(' ')} = {res} символов", font=("Montserrat", 15))
        myLabel1.pack()

    Input1 = StringVar()

    myLabel2 = Label(win, text="Длина текста", font=("Montserrat", 20), highlightbackground='black', highlightthickness=2)
    myLabel2.pack()
    myLabel3 = Label(win, text="Введите ваш текст", font=("Montserrat", 18))
    myLabel3.pack()
    myInput1 = Entry(win, font=("Montserrat", 15), textvariable=Input1)
    myInput1.pack()
    myInput1.bind('<Return>', showtextlen)
    myButton1 = Button(win, text="Принять", font=("Montserrat", 15), command=showtextlen)
    myButton1.pack(ipady=2, pady=12)

textlen()

win.mainloop()
</code>

Метку для вывода текста создать заранее и один раз. Ей указать из какой переменной брать текст. Когда надо обновить содержимое которое отображается в метке - просто поменять текст в этой переменной.
<code>
import tkinter as tk
from tkinter import *

win = Tk()
win.geometry("490x205")
win.resizable(0,0)
win.title("Длина текста")

def textlen():
    def showtextlen(event=None):
        win.geometry("490x250")
        res = len(Input1.get()) - Input1.get().count(' ')
        Output1.set(f"Длина: {len(Input1.get())} символов.\nБез пробелов: {len(Input1.get())} - {Input1.get().count(' ')} = {res} символов")

    Input1 = StringVar()
    Output1 = StringVar()

    myLabel2 = Label(win, text="Длина текста", font=("Montserrat", 20), highlightbackground='black', highlightthickness=2)
    myLabel2.pack()
    myLabel3 = Label(win, text="Введите ваш текст", font=("Montserrat", 18))
    myLabel3.pack()
    myInput1 = Entry(win, font=("Montserrat", 15), textvariable=Input1)
    myInput1.pack()
    myInput1.bind('<Return>', showtextlen)
    myButton1 = Button(win, text="Принять", font=("Montserrat", 15), command=showtextlen)
    myButton1.pack(ipady=2, pady=12)
    myLabel1 = Label(win, textvariable=Output1, font=("Montserrat", 15))
    myLabel1.pack()

textlen()

win.mainloop()
</code>


Выдает такую ошибку: ValueError: not enough values to unpack (expected 2, got 0)
Я только начал изучать программирование и вот тут такая проблема, начал решать задачи в acmp, вроде все идет норм но когда хочу посмотреть как это работает не в сайте, а в самом IDLE то ничего не выходить кроме этой проблемы:
ValueError: not enough values to unpack (expected 2, got 0)
сам код:
<code>
fin  = open("input.txt")
fout = open("output.txt","w")

a,b = map(int, fin.readline().split())
fout.write(str(a+b))

fin.close()
fout.close()
</code>
хз почему не работает. В файле Input.txt находить 4 и 5. Помогите школьнику

a,b = map(int, fin.readline().split())

зависит от того, что содержится в строке, которая извлекается чрез
fin.readline()
например, если в строке только 1 число или вообще нет чисел, тогда будет ошибка, потому что ничего не может быть записано в переменную
b или в обе переменные
a, b соответственно

a, b = map(int, "".split()) # ошибка ValueError: not enough values to unpack (expected 2, got 0)
a, b = map(int, "10".split()) # ошибка ValueError: not enough values to unpack (expected 2, got 1)
a, b = map(int, "10 20".split()) # OK, все корректно
a, b = map(int, "10 20 30".split()) # ошибка ValueError: too many values to unpack (expected 2)

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

data = list(int, fin.readline().split())


Как сделать кнопку назад?
Как в этом коде сделать кнопку назад и где мне сделать def back(), чтобы оно видело все виджеты, которые находятся в коде и чтобы все виджеты видели эту функцию и могли её выполнить
<code>
import tkinter as tk
from tkinter import *
from tkinter import messagebox
from pythonping import ping
import string
import secrets

win = Tk()
win.geometry("375x250")
win.resizable(0,0)
win.title("All-in-one")

# defs
Input1 = StringVar()
def default():
    def sitep():
        def showping(event=None):
            try:
                win.geometry("450x210")
                myLabel4 = Label(win, text="Ожидайте...", font=("Montserrat", 11))
                myLabel4.pack()
                win.update()
                myLabel4.destroy()
                win.geometry("450x190")
                tk.messagebox.showinfo("Пинг", "- Результаты пинга:\n" + str(ping(Input1.get(), verbose=True, count=5)) + "\n\nПримечание: возможно, создатель сайта закрыл доступ для отправки пакетов на его сайт, поэтому некоторые рабочие сайты могут не пинговаться")
            except:
                myLabel4.destroy()
                tk.messagebox.showerror("Ошибка", "- Произошла ошибка, проверьте правильность написания IP-адреса или ссылки")
        win.geometry("450x190")
        myLabel1.destroy()
        myButton1.destroy()
        myButton2.destroy()
        myButton3.destroy()
        myLabel2 = Label(win, text="Пинг", font=("Montserrat", 20), highlightbackground='black', highlightthickness=2, width=5)
        myLabel2.pack()
        myLabel3 = Label(win, text="Введите ссылку или IP-адрес", font=("Montserrat", 18))
        myLabel3.pack()
        myInput1 = Entry(win, font=("Montserrat", 15), textvariable=Input1, justify=LEFT, width=30, highlightbackground='black', highlightthickness=2)
        myInput1.pack(ipady=2)
        myInput1.bind('<Return>', showping)
        myButton4 = Button(win, text="Принять", font=("Montserrat", 15), command=showping)
        myButton4.pack(ipady=2, pady=5)
        myButton6 = Button(win, text="Назад", font=("Montserrat", 15), command=back)
    myLabel1 = Label(win, text="Способы", font=("Montserrat", 20))
    myLabel1.pack()
    myButton1 = Button(win, text="Пинг", font=("Montserrat", 16), width=17, command=sitep)
    myButton1.pack(pady=6)
    myButton2 = Button(win, text="Длина текста", font=("Montserrat", 16), width=17)
    myButton2.pack(pady=6)
    myButton3 = Button(win, text="Генератор паролей", font=("Montserrat", 16), width=17)
    myButton3.pack(pady=6)

# widgets
default()

win.mainloop()
</code>

Предлагаю использовать отдельные окна для отдельных действий. Тогда не придётся персобирать элементы окна каждый раз.
<code>
import tkinter as tk
from tkinter import *
from tkinter import messagebox
from pythonping import ping
import string
import secrets

def back(current, parent):
    current.destroy()   # уничтожаем текущее окно
    parent.deiconify()  # показываем родительское окно

def win_ping(parent):
    def showping(event=None):
        try:
            win.geometry("450x210")
            myLabel4 = Label(win, text="Ожидайте...", font=("Montserrat", 11))
            myLabel4.pack()
            win.update()
            myLabel4.destroy()
            win.geometry("450x190")
            tk.messagebox.showinfo("Пинг", "- Результаты пинга:\n" + str(ping(Input1.get(), verbose=True, count=5)) + "\n\nПримечание: возможно, создатель сайта закрыл доступ для отправки пакетов на его сайт, поэтому некоторые рабочие сайты могут не пинговаться")
        except:
            myLabel4.destroy()
            tk.messagebox.showerror("Ошибка", "- Произошла ошибка, проверьте правильность написания IP-адреса или ссылки")

    Input1 = StringVar()

    parent.withdraw()   # прячем родительское окно
    win = tk.Toplevel() # создаём новое окно
    win.geometry("450x190")
    win.resizable(0,0)
    myLabel2 = Label(win, text="Пинг", font=("Montserrat", 20), highlightbackground='black', highlightthickness=2, width=5)
    myLabel2.pack()
    myLabel3 = Label(win, text="Введите ссылку или IP-адрес", font=("Montserrat", 18))
    myLabel3.pack()
    myInput1 = Entry(win, font=("Montserrat", 15), textvariable=Input1, justify=LEFT, width=30, highlightbackground='black', highlightthickness=2)
    myInput1.pack(ipady=2)
    myInput1.bind('<Return>', showping)

    myFrame = Frame(win)
    myFrame.pack(ipady=2, pady=5)
    myButton4 = Button(myFrame, text="Принять", font=("Montserrat", 15), command=showping)
    myButton4.pack(side=LEFT, padx=15)
    myButton6 = Button(myFrame, text="Назад", font=("Montserrat", 15), command=lambda: back(win, parent))
    myButton6.pack(side=LEFT, padx=15)
    win.protocol("WM_DELETE_WINDOW", lambda: back(win, parent))  # обработчик закрытия окна по стандартной кнопке в правом верхнем углу

def main():
    win = Tk()
    win.geometry("375x250")
    win.resizable(0,0)
    win.title("All-in-one")
    myLabel1 = Label(win, text="Способы", font=("Montserrat", 20))
    myLabel1.pack()
    myButton1 = Button(win, text="Пинг", font=("Montserrat", 16), width=17, command=lambda: win_ping(win))
    myButton1.pack(pady=6)
    myButton2 = Button(win, text="Длина текста", font=("Montserrat", 16), width=17)
    myButton2.pack(pady=6)
    myButton3 = Button(win, text="Генератор паролей", font=("Montserrat", 16), width=17)
    myButton3.pack(pady=6)
    win.mainloop()

main()
</code>


Python Пропускает следующие совпадения Шифрование
Есть код который шифрует фамилию, но если есть несколько одинаковых букв то код пропускает их, не могу найти в чем проблема
<code>
a = str(input('Введите Фамилию: '))
a = a.lower()
alph = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
name = {}
for i in a:
    name.update({i:alph.find(i)+1})
for letter, key in name.items():
   print ('Буква: {}, Код: {}, Шифрограмма: {}'.format(letter, key, key**5 % 91))
print (a)
</code>

Не совсем понял задачу
Вам требуется вот это произвести?

a = 'пушкин'
alph = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
print(*[(alph.index(i)**5 % 91) for i in a]) # выведется 74 76 51 72 81 14

т.е. для каждой буквы получаем ее индекс, для индекса вычисляет
i**5 % 91
дальше в буквы перевести нельзя поскольку
i**5 % 91 предполагает 91 символ, а в словаре 33 буквы или нужен какой-то расширенный словарь, содержащий 91 символ
или нужно это?

a = 'пушкин'
alph = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
encoded = ''.join(alph[alph.index(i)**5 % len(alph)] for i in a)

print(encoded) # выведется бцбклц


Указать вероятность в python
Есть воин, а так же метод attack, в котором воин с вероятностью 1/3 нанесет 5 урона, с вероятностью 1/3 нанесет 7 урона, и с вероятностью 1/3 не нанесет урона вовсе. Как это реализовать?

в таком примитивном виде (когда вероятности равны) так:
<code>
import random

damages = [0, 5, 7]
damage = random.choice(damages)
</code>


Почему не пингуется сайт?
Почему у меня не пингуется сайт в этом коде с помощью pythonping? В чём здесь проблема
<code>
import tkinter as tk
from tkinter import *
from tkinter import messagebox
from pythonping import ping
import string
import secrets

win = Tk()
win.geometry("375x250")
win.resizable(0,0)
win.title("All-in-one")

# defs
def default():
    def ping():
        def showping():
            try:
                win.geometry("450x200")
                myLabel4 = Label(win, text="Ожидайте...", font=("Montserrat", 11))
                myLabel4.pack()
                win.update()
                myLabel4.destroy()
                win.geometry("450x190")
                tk.messagebox.showinfo("Пинг", "- Результаты пинга:\n" + str(ping(Input1.get(), verbose=True, count=5)))
            except:
                myLabel4.destroy()
                tk.messagebox.showerror("Ошибка", "- Произошла ошибка, проверьте правильность написания IP-адреса или ссылки")
        myLabel1.destroy()
        myButton1.destroy()
        myButton2.destroy()
        myButton3.destroy()
        Input1 = StringVar()
        myLabel2 = Label(win, text="Пинг", font=("Montserrat", 20))
        myLabel2.pack()
        myLabel3 = Label(win, text="Введите ссылку или IP-адрес", font=("Montserrat", 18))
        myLabel3.pack()
        myInput1 = Entry(win, font=("Montserrat", 15), textvariable=Input1, justify=LEFT, width=30, highlightbackground='black', highlightthickness=2)
        myInput1.pack(ipady=2)
        myButton4 = Button(win, text="Принять", font=("Montserrat", 15), command=showping)
        myButton4.pack(ipady=2, pady=12)
        win.geometry("450x190")
    myLabel1 = Label(win, text="Способы", font=("Montserrat", 20))
    myLabel1.pack()
    myButton1 = Button(win, text="Пинг", font=("Montserrat", 16), width=17, command=ping)
    myButton1.pack(pady=6)
    myButton2 = Button(win, text="Длина текста", font=("Montserrat", 16), width=17)
    myButton2.pack(pady=6)
    myButton3 = Button(win, text="Генератор паролей", font=("Montserrat", 16), width=17)
    myButton3.pack(pady=6)

# widgets
default()

win.mainloop()
</code>
Я хочу чтобы программа выводила в MessageBox 5 результатов пинга того сайта, который ввёл пользователь в Entry (myInput1)

Во-первых, если вывести Exception:

ping() got an unexpected keyword argument 'verbose'

Отсюда можно будет догадаться, что в
ping(Input1.get(),...) позвалось явно что-то не то, и заметить, что у вас есть 2 разные функции под одним именем:
from pythonping import ping и
def ping():.
Но даже если это поправить, то я получаю другую ошибку:

[WinError 10013] Сделана попытка доступа к сокету методом, запрещенным правами доступа

Хм... Отправка ICMP пакетов требует права администратора?


Почему не работает метод .lower()?
Почему метод .lower() не работает в этом коде, когда я ввожу слова Да с заглавной, он не делает все буквы в нижний регистр
<code>
        while True:
            choice = input(f'{name} хотите открыть калькулятор(введите: да/нет):')
            choice.lower()
            if choice == 'да':
                print(get_calculator_kbju(set_data()))
                break
            elif choice == 'нет':
                print(f'{name} Welcome')
                break
            else:
                print('Введите да/нет')
        break
</code>

потому что надо так
<code>
choice = choice.lower()
</code>
возвращаемое значение в нижнем регистре, а не исходное

Возвращает копию исходной строки с символами приведёнными к нижнему
регистру.
str.lower() -> str


Столбец со словарем переписать в отдельные столбцы
У меня есть столбец:

all_rel

{'Иван': 0.358, 'Михаил':0.25, 'Илья': 0.456}

{'Иван': 0.698, 'Михаил':0.125, 'Илья': 0.426}

{'Иван': 0.568, 'Михаил':0.145, 'Илья': 0.464}

{'Иван': 0.698, 'Михаил':0.125, 'Илья': 0.426}

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

all_rel
Иван
Михаил
Илья

{'Иван': 0.358, 'Михаил':0.25, 'Илья': 0.456}
0.358
0.25
0.456

{'Иван': 0.698, 'Михаил':0.125, 'Илья': 0.426}
0.698
0.125
0.426

{'Иван': 0.568, 'Михаил':0.145, 'Илья': 0.464}
0.568
0.145
0.464

{'Иван': 0.698, 'Михаил':0.125, 'Илья': 0.426}
0.698
0.125
0.426

При этом я не знаю точное значение ключей словаря и их количество, только есть словарь со всеми возможными именами

name_dict = {'Иван': 0, 'Михаил':0, 'Илья': 0,'Алексей': 0, 'Андрей': 0}
мой код:

for i in range(srt.shape[0]):
    name_dict.update(ast.literal_eval(srt.all_rel[i]))
    srt.rel_dict[i] = name_dict.copy()

    for key in srt.rel_dict[i]:
        srt[key] = ' '

for i in range(srt.shape[0]):
    for key in srt.rel_dict[i]:
        srt[key][i] = srt.rel_dict[i][key]

srt - имя датафрейма.
Итоговый столбец может содержать и столбцы с другими именами исходного словаря и значением 0 в каждой строке для них.
Есть ли способ это сделать как-то иначе?

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

import pandas as pd

df = pd.DataFrame({'all_rel':[
{'Иван': 0.358, 'Михаил':0.25, 'Илья': 0.456},
{'Иван': 0.698, 'Михаил':0.125, 'Илья': 0.426},
{'Иван': 0.568, 'Михаил':0.145, 'Илья': 0.464},
{'Иван': 0.698, 'Михаил':0.125, 'Илья': 0.426},
]})

pd.json_normalize(df['all_rel'])

Вывод:

    Иван    Михаил  Илья
0   0.358   0.250   0.456
1   0.698   0.125   0.426
2   0.568   0.145   0.464
3   0.698   0.125   0.426

В том вопросе по ссылке есть и другие интересные варианты, но этот вроде самый быстрый и простой.
Объединить преобразованные данные с основным датафреймом можно так по индексу:

df = df.drop(columns='all_rel') \
       .join(pd.json_normalize(df['all_rel']))

Или так, ещё короче, как советует уважаемый MaxU:

df = df.join(pd.json_normalize(df.pop('all_rel')))


Произведение аргументов, расположенных между минимальным и максимальным аргументами
Условие задачи: Напишите функцию, принимающую произвольное количество аргументов, и возвращающую произведение аргументов, расположенных между минимальным и максимальным аргументами. Если функции передается пустой список аргументов, то она должна возвращать значение
None. В процессе решения не использовать преобразования конструкции
*args в список или иную структуру данных.

def min_max(*args):
    composition = 1
    max_arg = args[0]
    max_ind = 0
    min_arg = args[0]
    min_ind = 0
    # Проходит по списку и вычисляет max и min
    for i, item in enumerate(args):
        if item > max_arg:
            max_arg = item
            max_ind = i
        if item < min_arg:
            min_arg = item
            min_ind = i
    for i in args[min_ind:max_ind]:
        composition *= i
    return composition

if __name__ == '__main__':
    arg = list(map(float, input('Введите список аргументов: ').split()))
    print("Произведение аргументов, расположенных"
          " между минимальным и максимальным аргументами:  ",
          min_max(*arg))

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

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

def min_max(*args):
    if not args:
        return None

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


Как сделать, чтобы через определённое время ожидания input() компьютер высылал ещё одно письмо?
У меня есть игра с личными кабинетами, и мне бы хотелось, чтобы, когда пользователь при регистрации не вводит код из письма 1 минуту, ему отсылалось 2-е письмо.
P. S. письма знаю как отправлять

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


Бот Телеграм должен отправлять текст из документа пользователю
Нужно, чтобы бот отправлял текст из документа какого-либо формата пользователю одним сообщением.
Библиотека: pyTelegramBotAPI

import telebot

bot = telebot.TeleBot("ВАШ_ТОКЕН")

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message): # получаем от пользователя сообщение start или help
    with open("filename.txt", "rb") as f: # открываем документ
      contents = f.read().decode("UTF-8") # считываем все строки
      bot.reply_to(message, contents) # отправляем содержимое документа

bot.infinity_polling()


Проставление рейтинга строчкам в pandas dataframe с изменяемым шагом
Имеется датафрейм(пример):

import pandas as pd
d = {'stores': ['AG21', 'AG41', 'AG85', 'AG45',
'AG31', 'AS25', 'AR81', 'AA43',
'AG21', 'AD83', 'AA36', 'AG55',
'AT58', 'AD11', 'AH32', 'AE17'],
'linear': [430, 145 , 120, 180,
250, 250, 250, 320,
376, 390, 420, 580,
350, 190, 125, 390]}
df = pd.DataFrame(data=d)
df = df.sort_values(by='linear')
df

В колонку linear заходят значения от расчетов из другого кода и сортируются по возрастанию.
Затем, вручную, строчкам проставляются рейтинги от 1 до 6.
К примеру, к датафрейму выше(к колонке linear), вручную бы проставились примерно такие рейтинги(раскиданы на глаз)

import pandas as pd
d = {'stores': ['AG21', 'AG41', 'AG85', 'AG45',
'AG31', 'AS25', 'AR81', 'AA43',
'AG21', 'AD83', 'AA36', 'AG55',
'AT58', 'AD11', 'AH32', 'AE17'],
'linear': [430, 145 , 120, 180,
250, 250, 250, 320,
376, 390, 420, 580,
350, 190, 125, 390]}
df = pd.DataFrame(data=d)
df = df.sort_values(by='linear')
df['ratings'] = 1,1,1,2,2,3,3,3,4,4,4,5,5,5,5,6
df

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

import pandas as pd
d = {'stores': ['AG21', 'AG41', 'AG85', 'AG45',
'AG31', 'AS25', 'AR81', 'AA43'],
'linear': [330, 145 , 120, 180,
250, 150, 185, 320]}
df = pd.DataFrame(data=d)
df = df.sort_values(by='linear')
df['ratings'] = 1,2,2,3,3,4,5,5
df

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

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

df["cat"] = pd.qcut(df["linear"], 6, labels=False).values+1

df:

   stores  linear  cat
2    AG85     120    1
14   AH32     125    1
1    AG41     145    1
3    AG45     180    2
13   AD11     190    2
4    AG31     250    2
5    AS25     250    2
6    AR81     250    2
7    AA43     320    4
12   AT58     350    4
8    AG21     376    4
9    AD83     390    5
15   AE17     390    5
10   AA36     420    6
0    AG21     430    6
11   AG55     580    6

Если у вас нет каких-то категорий (как 3 в данном примере), значит ни одно из значений при данных условиях не попадает в третью секстиль. Если вам нужно железно получить 6 категорий, то тогда предлагаю сначала самостоятельно определить интервалы, а потом восользоваться методом
pd.cut:

intervals = np.linspace(df["linear"].min(), df["linear"].max(), endpoint=True, num=7)
print(intervals) # [120. 196.66666667 273.33333333 350. 426.66666667 503.33333333 580. ]
df["cat"] = pd.cut(df["linear"], intervals, labels=False, include_lowest=True)+1

df:

   stores  linear  cat
2    AG85     120    1
14   AH32     125    1
1    AG41     145    1
3    AG45     180    1
13   AD11     190    1
4    AG31     250    2
5    AS25     250    2
6    AR81     250    2
7    AA43     320    3
12   AT58     350    3
8    AG21     376    4
9    AD83     390    4
15   AE17     390    4
10   AA36     420    4
0    AG21     430    5
11   AG55     580    6

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

d = {'stores': ['AG21', 'AG41', 'AG85', 'AG45', 'AG31', 'AS25', 'AR81', 'AA43'], 'linear': [330, 145 , 120, 180, 250, 150, 185, 320]}
df = pd.DataFrame(data=d)
df = df.sort_values(by='linear')
chunks = 6
df["cat"] = df.groupby(np.arange(len(df))//(len(df)/chunks)).ngroup()+1
print(df)

df:

  stores  linear  cat
2   AG85     120    1
1   AG41     145    1
5   AS25     150    2
3   AG45     180    3
6   AR81     185    4
4   AG31     250    4
7   AA43     320    5
0   AG21     330    6


Моделирование комнаты, нужно сдать в среду
[]Нужно создать программу, которая спрашивает у пользователя длину и ширину стены, а также цветовую палитру, которую будет использоваться для того, что раскрасить стену. Стену нужно раскрасить случайными цветами из цветовой палитры (цвета берутся из файла) и случайно выбранными фигурами. Хотела использовать черепаху, но она заходит за границы. В идеале это надо сделать 4 раза и потом смоделировать комнату.
Должно получится примерно так, но оно должно рисовать только в границах прямоугольника.

from turtle import *
from turtle import Screen
from random import randint
import random
seinalaius=float(input("Введите длину стены (500-1500): "))
seinapikkus=float(input("Введите ширину стены (500-900): "))
värvipalett=input("Какую цветовую палитру вы хотите использовать? (Valik: mustvalge(чёрно-белый), roosa(розовый), punane(красный), lilla(фиолетовый), sinine(синий), kollane(жёлтый), roheline(зелёный), beež(бежевый), oranž(оранжевый)): ")
fail=open(värvipalett + '.txt', encoding='UTF-8')
värvid=[]
for rida in fail:
    rida=rida.strip()
    värvid.append(rida)
up()
right(150)
forward(900)
down()
left(150)
for i in range(2):
    forward(seinalaius)
    left(90)
    forward(seinapikkus)
    left(90)
import math
up()
left(30)
a = math.sqrt((seinalaius**2) + (seinapikkus**2))
forward(a/2)
down()
while True:
    pöörded=randint(4,8)
    begin_fill()
    color(random.choice(värvid))
    for i in range(pöörded):
        pikkus=randint(0,150)
        forward(pikkus)
        lr=randint(1,2)
        if lr==1:
            left(90)
        else:
            right(90)
    end_fill()
    up()
    down()

Пример файла с синим цветом:

aliceblue
aquamanne
aquamarine1
aquamarine2
aquamarine3
aquamarine4
blue
blue1
blue2
blue3
blue4
CadetBlue
CadetBlue1
CadetBlue2
CadetBlue3
CadetBlue4
CornflowerBlue
cyan
cyan1
cyan2
cyan3
cyan4
DarkBlue
DarkCyan
DarkSlateBlue
DarkSlateGray
DarkSlateGray
DarkSlateGray2
DarkSlateGray3
DarkSlateGray4
DarkSlateGrey
DarkTurquoise
DeepSkyBlue
DeepSkyBlue2
DeepSkyBlue3
DeepSkyBlue4
DodgerBlue
DodgerBlue1
DodgerBlue2
DodgerBlue3
DodgerBlue4
LightBlue
LightBlue1
LightBlue2
LightBlue3
LightBlue4
LightSeaGreen
LightSkyBlue
LightSkyBlue1
LightSkyBlue2
LightSkyBlue3
LightSkyBlue4
LightSlateGray
LightSlateGrey
LightSteelBlue
LightSteelBlue1
LightSteelBlue2
LightSteelBlue3
LightSteelBlue4
MediumAquamarine
MediumBlue
MediumSlateBlue
MediumTurquoise
midnightblue
MidnightBlue
navy
NavyBlue
PaleTurquoise
PaleTurquoise1
PaleTurquoise2
PaleTurquoise3
PaleTurquoise4
PaleVioletRed
PowderBlue
RoyalBlue
RoyalBlue1
RoyalBlue2
RoyalBlue3
RoyalBlue4
SkyBlue
SkyBlue1
SkyBlue2
SkyBlue3
SkyBlue4
SlateGray
SlateGray1
SlateGray2
SlateGray3
SlateGray4
SteelBlue
SteelBlue1
SteelBlue2
SteelBlue3
SteelBlue4
turquoise
turquoise1
turquoise2
turquoise3
turquoise4

<code>
from turtle import *
from random import randint
import random

seinalaius = float(input("Введите длину стены (500-1500): "))
seinapikkus = float(input("Введите ширину стены (500-900): "))
värvipalett = input("Какую цветовую палитру вы хотите использовать? (Valik: mustvalge(чёрно-белый), roosa(розовый), punane(красный), lilla(фиолетовый), sinine(синий), kollane(жёлтый), roheline(зелёный), beež(бежевый), oranž(оранжевый)): ")
fail = open(värvipalett + '.txt', encoding='UTF-8')
värvid = []
for rida in fail:
    rida = rida.strip()
    värvid.append(rida)

up()
goto(-seinalaius / 2, -seinapikkus / 2)
down()

for i in range(2):
    forward(seinalaius)
    left(90)
    forward(seinapikkus)
    left(90)

up()
goto(0, 0)
down()

while True:
    pöörded = randint(4, 8)
    begin_fill()
    color(random.choice(värvid))
    for i in range(pöörded):
        pikkus = randint(0, 150)

        up()
        forward(pikkus)
        if not -seinalaius / 2 <= xcor() <= seinalaius / 2 or not -seinapikkus / 2 <= ycor() <= seinapikkus / 2:
            backward(pikkus)
        backward(pikkus)
        down()

        forward(pikkus)
        lr = randint(1, 2)
        if lr == 1:
            left(90)
        else:
            right(90)
    end_fill()
    up()
    down()
</code>
результат

и ещё на цвет aquamanne выдавалась ошибка и после удаления из файла проверял в течении 10 минут рисовалось пока не надоело.


Как сделать в цикле исключение, продолжение работы скрипта?
подскажите , как сделать в цикле исключения.
Пример:

user_json = json.loads(req.text)

for acc in user_json['result']['per']:
        try:
            if user_json['result']['per'] is not None:
                        account.append(str(acc['name']))
            else:
                        account.append("mail.ru")
        except:
            account.append("mail.ru")

Такие решения не работаю, так как если в результате запросы в json нет значения result, скрипт падает

    for acc in user_json['result']['per']:
KeyError: 'result'

, а мне надо что бы если даже значения не было, он добавил значение по умолчанию в данном случае mail.ru
p.s. иногда в итерациях не приходят значениях , те что в result, их нет, так вот на этом моменте скрипт падает, а мне надо что бы итерации дальше продолжались

В одну строчку:
<code>
account = [acc.get('name', "mail.ru") for acc in (user_json['result']['per'] if 'result' in user_json and 'per' in user_json['result'] else [{}])]
</code>


Как ограничить Бота? Python Telegram bot
У меня назрел вопрос: как ограничить бота (пишу на языке Python)? То есть, как сделать ТАК, чтобы Telegram БОТ работал ТОЛЬКО В МОЕЙ группе?
То есть, если ЧЕЛОВЕК захочет написать БОТУ, то БОТ его проигнуорирует и даже не будет никак реагировать.
Или если ЧЕЛОВЕК обнаглеет и захочет добавить МОЕГО БОТА в свою группу, то у него ничего не выйдет.

Думаю, что вы можете проверять идентификатор группы при получении сообщения ботом, если группа ваша, то давать ответ, иначе не реагировать. Вы не указали какую библиотеку используете, поэтому дам пример с использованием pyTelegramBotAPI:
<code>
import telebot

bot = telebot.TeleBot('ВАШ_ТОКЕН"')

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    cid = message.chat.id # Получаем ID группы (чата)
    if cid == 'ВАШ_ИДЕНТИФИКАТОР_ГРУППЫ':
        bot.reply_to(message, 'Привет, как ты?')

    bot.infinity_polling()
</code>


Я создал два множества. Скачиваю с пользователя фамилии. В x имеются Петров, Сидоров, Иванов, вводится же еще потом Петров,Петров, Иванов
<code>
n = int(input())
x = set()
y = set()
for i in range(n):
    surname = input()
    x.add(surname)
    if surname not in x:
        y.add(surname)
</code>

Если прямо-таки на множествах, то вот:

x = set()   # все фамилии по одному разу
y = set()   # фамилии которые встретились 2 и более раза
count = 0

n = int(input())
for i in range(n):
    surname = input()
    if surname in x:
        y.add(surname)
        count += 1
    else:
        x.add(surname)

count += len(y)
print(count)

Т.е. в
y собираются фамилии, если они уже встречались (и, соответственно, были до этого занесены в
x). И заодно в переменной
count ведётся подсчёт сколько фамилий было помещено в
y. Но т.к. при первом обнаружении фамилии её не учитывали, то к результату надо добавить количество элементов множества
y (как бы если бы их все учитывали при первом обнаружении).


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

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

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

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

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

Даны тексты:

text1 = "Шла Саша по шоссе"
text2 = "Ехал Грека через реку"
text3 = "Где труд там и счастье"
text4 = "Доброта и труд рядом живут"
text5 = "Без труда не выловишь и рыбку из пруда"

Необходимо создать список из словарей следующего вида:

result = [{"word": "труд",    "count": 3, "id": [2, 3, 4]},
          {"word": "доброта", "count": 1, "id": [3]},
          .....
         ]

Подскажите, как посчитать количество повторений слова и в каких текстах оно используется, учитывая, что в конечном списке словарей слова должны быть в начальной форме (т.е. не "труда", а "труд").
Есть пример функции:

def f(texts, word):
    res = {"word":word, "count":0, "id":[]}

    for key, value in texts.items():
        n = value.count(word)
        if n:
            res["count"] += n
            res["id"].append(key)
    return res

Но тут подсчет слов идет только слово в слово, то есть для слова "труд" будут созданы два словаря с двумя формами этого слова.

такой вариант устроит (специально не стал сокращать):

texts = [
    "Шла Саша по шоссе",
    "Ехал Грека через реку",
    "Где труд там и счастье",
    "Доброта и труд рядом живут",
    "Без труда не выловишь и рыбку из пруда",
]

tmp = dict()

for text in enumerate(texts):
    for word in text[1].split():
        if word not in tmp:
            tmp[word] = {"word": word, "count": 1, "id": [text[0]]}
        else:
            tmp[word]["count"] += 1
            tmp[word]["id"] += [text[0]]

res = []
for key in tmp:
    tmp[key]["id"].sort()
    res.append(tmp[key])

print(res)

можно чуть-чуть покороче

tmp = dict()

for text in enumerate(texts):
    for word in text[1].split():
        if word not in tmp:
            tmp[word] = {"word": word, "count": 1, "id": [text[0]]}
        else:
            tmp[word]["count"] += 1
            tmp[word]["id"] = sorted(tmp[word]["id"] + [text[0]])

res = list(tmp.values())

print(res)

Если нужна сортировка по кол-ву попаданий, то можно такой код использовать:

res = sorted(list(tmp.values()), key=lambda obj: -obj['count'])


Как реализовать Telegram bot в несколько файлов?
Всех приветствую, делаю Telegram Bot'а на Python с библиотекой telebot.
Код постепенно становится длинным и не особо удобным.
Поставил для себя задачу разделить его на несколько модулей.
Есть главный файл main.py и побочный cycle.py.
В главном файле лежит /start с вызовом нескольких Reply кнопок. Каждая кнопка предполагает после нажатия запуск определенного процесса (пока сделан только один процесс и лежит в cycle.py)
По отдельности все работает, но не знаю как это все совместить (недостаточно знаний в программировании).
В связи с этим вопросы:

Как или через что реализовать переход с нажатия Reply кнопки на запуск небольшого опросника в Cycle.py и последующем возвращением в меню в Main.py?
Более простой и побочный вопрос, но все равно еще до конца с этим не разобрался. Как реализовать config.py в котором будет лежать токен, пароль и словарь с фразами для ответов?
Огромная просьба, если кого-то заинтересует мой вопрос, можно более подробный ответ на 1 пункт. Что куда импортировать? Как обратиться к блоку? Какие нужны в конце основного и побочного файла функции, чтобы бот работал? Имею в виду :

bot.polling(none_stop=True)
или

if __name__=='__main__':  bot.polling(none_stop=True)
или

bot.enable_save_next_step_handlers(delay=2)
bot.load_next_step_handlers()
if name=='main':
bot.polling(none_stop=True)
p.s. Если это важно, в main.py есть SQLite для добавления пользователей, а в cycle.py есть Class для сбора данных опросника и дальнейшего занесения (в этой же функции) в таблицу SQLite.
Буду рад любому ответу или примеру)
Пример кода main.py:

    import telebot
    from telebot import types
    import sqlite3

    bot = telebot.TeleBot("<Token>")

    @bot.message_handler(commands=['start'])
    def menu_step(message):
    markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
        markup.add('Анкета 1', 'Анкета 2')
        markup.add('Обратная связь')
        bot.send_message(message.chat.id, 'Выбери ниже', reply_markup=markup)

        bot.polling(none_stop=True)

Пример кода Cycle.py

import telebot
from telebot import types
import sqlite3

bot = telebot.TeleBot("<Token>")

user_data = {}

class User:
    def __init__(self, datas):
        self.datas = datas
        self.datass = ''

conn = sqlite3.connect('DataBase.db', check_same_thread=False)
cursor = conn.cursor()

def db_table_val(user_id: int, dataone: str, datatwo: str):
    cursor.execute('INSERT INTO datatable (user_id, dataone, datatwo) VALUES (?, ?, ?)', (user_id, dataone, datatwo))
    conn.commit()

@bot.message_handler(commands=['anketaone'])
def send_welcome(message):
        msg = bot.send_message(message.chat.id, "Введите данные №1")
        bot.register_next_step_handler(msg, process_one_step)

def process_one_step(message):
    try:
        user_id = message.from_user.id
        user_data[user_id] = User(message.text)
        msg = bot.send_message(message.chat.id, 'Введите данные №2')
        bot.register_next_step_handler(msg, process_two_step)
    except Exception as e:
        bot.send_message(message.chat.id, 'Ошибка')

def process_two_step(message):
    try:
        user_id = message.from_user.id
        user = user_data[user_id]
        user_data[user_id] = User(message.text)
        db_table_val(user_id=user_id, dataone=user.datas, datatwo=user.datass)
        bot.send_message(message.chat.id, 'Вы успешно ввели все данные')
    except Exception as e:
        bot.send_message(message.chat.id, 'Ошибка')

bot.enable_save_next_step_handlers(delay=2)

bot.load_next_step_handlers()

if __name__=='__main__':
    bot.polling(none_stop=True)

ДОПОЛНЕНИЕ
C Config все вышло достаточно просто.
А вызывать def из другого файла через bot.register_next_step_handler у меня не получается. Код запускается без ошибок, но бот перестает отвечать и пока не удалю pycache и блок с перенаправлением на другой файл ничего не работает.
Что я делал?

Импортировал побочный файл в главный через import

Дописал часть кода

 def statistics_step(message):
     if message.text.lower() == 'анкета 1: #т.к. нижний регистр
         msg = bot.send_message(message.chat.id, 'Анкета')
         bot.register_next_step_handler(msg, cycle.send_welcome)

В конце кода Cycle.py оставил     bot.polling()

А в главном в конце написал:

 if __name__=='__main__':
     bot.polling(none_stop=True)

Попробовал разные варианты с концовкой кода, но все никак (

p.s. если убрать bot.polling(none_stop=True) или просто bot.polling() в побочном файле, все запускается, но цикл в нём не работает соответственно.

По поводу импорта config.py всё просто:

Создаёте в корне проекта config.py
В config.py укажите переменную и присвойте ей ваш токен -
token = "ваш токен"
В main.py в начале прописываете
import config
В main.py обратитесь к вашему токену -
bot = telebot.TeleBot(config.token)

Что насчёт первого вопроса, то можете попробовать так же.


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

[{'word': 'житель', 'count': 2, 'id': [1, 3]}, {'word': 'житель', 'count': 1, 'id': [2]}, {'word': 'зачинщик', 'count': 1, 'id': [0]}]

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

[{'word': 'житель', 'count': 3, 'id': [1, 2, 3]}, {'word': 'зачинщик', 'count': 1, 'id': [0]}]

Пыталась использовать такой код:

for i in range(0, len(a)-1):
    if a[i]["word"] == a[i+1]["word"]:
        a[i]["count"] = a[i]["count"] + a[i+1]["count"]
        a[i]["id"] = a[i]["id"] + a[i+1]["id"]
        a[i+1].clear
print(a)

Но второй словарь не удаляется.
Есть ли более короткая форма выполнения данных операций?

такой код устроит?

data = [{'word': 'житель', 'count': 2, 'id': [1, 3]}, {'word': 'житель', 'count': 1, 'id': [2]}, {'word': 'животное', 'count': 1, 'id': [111]}]
res = dict()

for obj in data:
    if obj['word'] not in res:
        res[obj['word']] = obj
    else:
        res[obj['word']]['count'] += obj['count']
        res[obj['word']]['id'] += obj['id']

print(res)

он также позволяет анализировать когда
word разные, или нужно и по другим ключам независимо соединять записи?
P.S.
поле
id получается неотсортированное, если требуется сортировка, то можно далать

    if obj['word'] not in res:
        res[obj['word']] = obj
    else:
        res[obj['word']]['count'] += obj['count']
        res[obj['word']]['id'] += obj['id']
        res[obj['word']]['id'].sort()


Что необходимо изучить для реализации считывания информации с сервера?
небольшое отступление:

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

Долгое время программировал на Swift, выпустил несколько приложений, и вот появилась возможность сделать что-то стоящее, директору необходим магазин-приложение. Встал вопрос на чём писать, и что использовать, что бы сделать одну работу выпустить и на IOS & Android, выбор пал на Flutter, изучил, сверстал, всё супер. Для считывания информации о продуктах, изучил необходимое в Python, сделал обработчик xml в json, запарсил всю информацию. Теперь встал вопрос реализации сервера, решил создавать его на Python Django.
Вопрос такой:
Дорогие форумчане, пожалуйста, поделитесь ресурсами, откуда достать информацию, как правильно привязать выходящий json в базу данных? Как правильно вносить туда изменения? Простыми словами, что мне необходимо изучить, что бы реализовать задуманное?
Я себе представляю это так

Приложение запустилось
Подключилось к серверу
Сервер отправил определенный json, допустим с выбранными админом
товарами или брендами
Пользователь тыкнул на продукт
Артикул/штрихкод/наименование отправилось на сервер
Сервер ответил json-ом товара

За любую информацию буду премного благодарен!

Для реализации Вашей задачи помимо Django прекрасно подойдет Django REST Framework или Django Ninja
Уроки по использованию фрэймворка можно найти на Ютюбе, например REST Framework и Django Ninja
Но учтите что Django позволяет реализовать как слабо нагруженные так и сильно нагруженные системы одними и тем же способом не предупреждая что выбранный Вами стиль (например) не подходит для сильно нагруженных систем. Будьте внимательны и не забывайте отправлять свой код на код ревью.
Удачи.


Как задать размеры изображения tksvg в pix?
Простой пример:
<code>
import tkinter as tk
import tksvg

window = tk.Tk()
svg_image = tksvg.SvgImage(master=window, file="128.svg", scale=1)
label = tk.Label(bg='#CCCCCC', image=svg_image, borderwidth=0, relief="solid")
print(label.winfo_reqwidth(), label.winfo_reqheight())
label.pack()
window.mainloop()
</code>
128.svg - 128х128 pix.
Вопрос: Как задать размеры изображения tksvg в pix?

Размер в пикселях можно указать через параметр
scaletowidth (или
scaletoheight).
Из мануала Tk 8.7:

svg -dpi dpiValue -scale scaleValue -scaletowidth width -scaletoheight height

dpiValue is used in conversion between given coordinates and
screen resolution. The value must be greater than
0 and the default
value is
96.

scaleValue is used to scale the resulting image. The value must
be greater than
0 and the default value is
1.

width and
height are the width or height that the image
will be adjusted to.

Only one parameter among
-scale,
-scaletowidth and
-scaletoheight can be given at a time
and the aspect ratio of the original image is always preserved.


ошибки 502, 504 при парсинге
При парсинге ресурса я иногда получаю ошибки 502 и 504.
Если просто открыть их с браузера, страницы работают.

так же, иногда мне несколько раз подряд отдаётся пустое тело в ответе(тоесть после запроса с пустым телом я делаю sleep на минуту, и опять получаю пустое тело)

инструменты парсинга: php + guzzle

P.S вопрос задался потому что на 1000 корректно распаршеных страниц приходится дюжина 502/504/empty.
Это интернет магазин, они не могут просто так отдать 504, иначе клиенты бы сьели с потрохами
Соответственно, что-то не так, но я не знаю что

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

При парсинге ресурса я иногда получаю ошибки 502 и 504.

Если просто открыть их с браузера, страницы работают.

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

так же, иногда мне несколько раз подряд отдаётся пустое тело в ответе(тоесть после запроса с пустым телом я делаю sleep на минуту, и опять получаю пустое тело)

Пустое тело может отдаваться, когда мы работаем c динамическими страницами, которые формируются непосредственно в браузере, надо изучить сайт перед парсингом и определить как формируется контент(на сервере или на клиенте). Если html формируется на клиенте, попробуйте использовать selenium, который будет запускать js и формировать страницу.

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

Да, возможно есть проверка на сервере например на определения браузера, если вы например отправляете запрос без user agent то сервер может его просто не обрабатывать. Нужно детальнее изучить сайт, чтоб понять в чем причина. Или может стоять ограничение на количество запросов в минуту/час/месяц. При превышении лимита ваш ip могут просто блочить и не отвечать на ваши запросы определенное время


Как создать рандомную точку с двумя значениями координат?
Как создать рандомную точку с координатами с 2 значениями на промежутке (−5,5)×(−5,5) ?
Нужна рандомная точка при поиске минимума с помощью градиентного спуска. Python

Если можно использовать библиотеки, то чуть короче если взять
numpy:

import numpy as np

x, y = (np.random.rand(2) - 0.5) * 10
print(x, y)
# -3.2738632035969104 4.162504209779479

Правда, тут нижняя граница может попасть, а верхняя нет, т.е. результат будет в диапазоне
[-5,5) x [-5,5).


Почему не задается значение None в sqlite3 python
Пытаюсь задать значение None в колонку с название USERNAME через команду UPDATE

cur.execute(f"UPDATE users SET USERNAME = {None} WHERE ID = {1829785381}")

Нужно задать именно занчение
NoneType, не строку со значением
'None', выдает ошибку

sqlite3.OperationalError: no such column: None
Подскажите может не правильно оформляю команду вплане синтаксиса?

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

UPDATE users SET USERNAME = None WHERE ID = 1829785381

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

cur.execute(f"UPDATE users SET USERNAME = ? WHERE ID = ?", (None, 1829785381))

P.S.
Вообще, в SQL вместо питоничьего
None используется
null, драйвер базы данных сам это сконвертирует, если использовать биндинги, но вы можете это сделать и сами, указав
null в запросе:

cur.execute(f"UPDATE users SET USERNAME = null WHERE ID = {1829785381}")

Или:

cur.execute(f"UPDATE users SET USERNAME = null WHERE ID = ?", (1829785381,))


Как записать excel файл в нормальном виде на python?
Как записать
excel файл на
python в нормальном для просмотра виде? Чтобы как минимум можно было настроить ширину столбцов и перенос содержимого в случае если оно не вмещается. В идеале конечно с возможностью стилизации и авто-форматированием ширины по содержимому, но просмотрев все возможные варианты в интернете, я поняла, что это что-то из мира фантастики, однозначных ответов нету, а отдельные предложенные фрагменты кода громоздкие и к тому же у меня они не работают. Также в основном все примеры с
pandas, но как сделать вышеперечисленные пункты на этом самом
pandas я не нашла, задала отдельный вопрос со всеми примерами, что я пробовала, уже более 2-х недель ответа нету. Поэтому я хочу спросить, возможно есть альтернативы, где это реально сделать? Как именно это сделать мне не принципиально.
Это не дубликат вышеуказанного вопроса, он об конкретной проблеме с pandas, а данный вопрос обобщённый, о записи в excel файл на python.

Я использую openxlsx, возможно вам также подойдет это решение, например:
<code>
from openpyxl.reader.excel import load_workbook
from openpyxl.styles import Font
from openpyxl.styles.fills import PatternFill

# Загружаем документ
book = load_workbook('foo.xlsx')

# Определяем рабочий лист
ws = book.worksheets[0]

# Определяем необходимую ячейку на листе
_cell = ws['C1']

# Задаем стиль для ячейки
_cell.font = Font(size=10, underline='single', color='FFFFFF', bold=True, italic=True)
_cell.value = 'hello world'

# Задаем цвет фона
_cell.fill = PatternFill(bgColor="FFC7CE", fill_type = "solid")

# Указываем ширину для колонки
ws.column_dimensions["C"].width = 60.0

# Сохраняем документ
book.save('foo.xlsx')
</code>
Может быть полезным: Работа со стилями в openxlsx


Дан массив А(n,m). Возвести в квадрат каждый четный элемент, у которого номер строки нечетный. Python
Дан массив А(n,m). Возвести в квадрат каждый четный элемент, у которого номер строки нечетный
<code>
a = [1, 2, 3], [4, 5, 6], [7, 8, 9]
c = [0, 0, 0], [0, 0, 0], [0, 0, 0]
n = 3

def select():
    for i in range(n, 2):
        for j in range(n):
            global a
            if int(a[i][j]) % 2 == 0:
                c[i][j] = a[i][j] * a[i][j]
            else:
                continue

select()
print(c)
</code>

"смешались вместе люди, кони" :)
у вас не работает функция, потому что

for i in range(n, 2):

означает

for i in range(3, 2):

т.е. 0 циклов - от 3 до 2 с шагом 1 не дойти
кстати

else:
    continue

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

int(a[i][j])

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

a = [1, 2, 3], [4, 5, 6], [7, 8, 9]
c = [0, 0, 0], [0, 0, 0], [0, 0, 0]

for i in range(len(a)):
    for j in range(len(a[i])):
        if i % 2 == 1 and j % 2 == 0:
            c[i][j] = a[i][j] * a[i][j]
        else:
            c[i][j] = a[i][j]

print(c)

или, если предпочитаете однострочные решения:

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

c = [[a[i][j]**2 if i % 2 == 1 and j % 2 == 0 else a[i][j] for j in range(len(a[i]))] for i in range(len(a))]

print(c)

или так:

c = [[j[1]**2 if i[0] % 2 == 1 and j[0] % 2 == 0 else j[1] for j in enumerate(i[1])] for i in enumerate(a)]

или так (чуть покороче):

c = [[j[1]**2 if i[0] % 2 and not j[0] % 2 else j[1] for j in enumerate(i[1])] for i in enumerate(a)]

или так (для любителей более короткого изврата):

c = [[j[1]**(1 + (i[0] % 2 and not j[0] % 2)) for j in enumerate(i[1])] for i in enumerate(a)]


Умножение двух матриц 100х100 (многопоточность)
Столкнулся с такой задачей: нужно умножить две матрицы размером 100х100, при этом используя метод синхронизации потоков - СЕМАФОР. Не до конца понял как нужно работать с семафором.
Смог переделать свой код для умножения матриц. Но вопрос остается открытый: как к этому добавить многопоточность.
<code>
import numpy as np

a = np.arange(0, 10000).reshape(100, 100)
b = np.arange(10000, 20000).reshape(100, 100)
print(np.dot(a, b))
</code>
Прошу, подскажите, как можно реализовать такое?

Вот так можно распаралелить первый цикл на каноничном алгоритме:
<code>
import numpy as np
import multiprocessing as mp
import os

a = np.arange(0, 10000).reshape(100, 100)
b = np.arange(10000, 20000).reshape(100, 100)

N = 100
c = np.zeros((N,N))

def forcolumn(i):
    row = np.zeros((1,N))
    for j in range(N):
        row[0,j] = sum(a[i, k] * b[k, j] for k in range(N))
    return i,row

pool = mp.Pool()

for i,row in pool.imap_unordered(forcolumn, range(N), N//os.cpu_count()//2):
   c[i,:] = row[0,:]

print(c)
</code>
Семафор воткнуть некуда.


24 теста из 25 проходят. 1 не проходит по времени (3 секунды). Как ускорить программу?
В этой задаче от вас потребуется написать программу для составления расписания сеансов связи со спутником. Каждый сеанс заключается в обмене короткими сообщениями, поэтому мы считаем, что он происходит мгновенно. Поскольку ресурсы оборудования ограничены, следует стремиться к минимизации количества сеансов. Вместе с тем, интервал времени между сеансами не должен превышать
d миллисекунд. Кроме того, существуют промежутки времени, в течении которых связь  невозможна. При этом на границах промежутка мгновенный сеанс связи возможен. Расписание составляется на
t миллисекунд. Первый сеанс должен обязательно состояться в момент 0, а последний —  в момент
t.
В первой строке через пробел записаны три натуральных числа
a,
d и
t — количество интервалов недоступности связи, максимальный интервал между между сеансами и время, на которое составляется расписание. Далее в
a строках заданы по два целых неотрицательных числа
n и
k — начало и конец каждого интервала недоступности связи.

Пример ввода:
3 20 100
5 25
27 40
75 90

Пример вывода:
8

Мой код:

a, d, t = map(int, input().split())
kol = 0
mil = 0
for i in range(a):
    n, k = map(int, input().split())
    while mil <= n:
        kol += 1
        mil += d
    if mil >= k:
        continue
    else:
        kol += 1
        mil = n + d
while mil < t:
    kol += 1
    mil += d
kol += 1
print(kol)

зачем вы делаете циклы?

while mil < t:
    kol += 1
    mil += d

когда это делается в 1 деление:

kol += 1 if t < mil else (1 + (t - mil) // d)
mil += 0 if t < mil else d * ((t - mil) // d)

это же быстрее
и в коде выше тоже самое
P.S.
правильность логики я не смотрел, только отмечаю, что не надо гонять циклы там где им не место


Одна переменная для 4 чисел [закрыт]

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

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

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

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

Питон. Если среди чисел отрицательные? для решения задания нужно использовать только одну переменную (а). Чисел всего должно быть 4. И потом вывести ответ: правда или ложь. Нельзя использовать массив и другие циклы (кроме if)

[НОВЬЕ]
раз автор добавил дополнительное условие:

Нельзя использовать массив и другие циклы (кроме if)

res = int(input('Введите число #1: ')) > 0
res &= int(input('Введите число #2: ')) > 0
res &= int(input('Введите число #3: ')) > 0
res &= int(input('Введите число #4: ')) > 0
print('ПРАВДА' if res else 'ЛОЖЬ')

впрочем тут в явном виде даже
if не используется :)
[СТАРЬЕ]
можно так:

data = list(map(int, input('Введите числа через пробел: ').split()))

print('Все числа положительные' if all(i > 0 for i in data) else 'Не все числа положительные')

правда в задаче информация про ввод именно 4 чисел, тогда можно так:

data = []
for i in range(4):
    data.append(int(input(f'Введите число №{i}')))

print('Все числа положительные' if all(i > 0 for i in data) else 'Не все числа положительные')


Как ускорить программу? Есть решение, но 5 тестов из 10 не проходят по времени (3 секунды)
Нумерация
Власти города Байтленда решили построить новый микрорайон, который будет состоять из одной длинной улицы. Процесс постройки домов будет выглядеть следующим образом. Сначала будет построен  самый первый дом, который получит номер 0. (Разумеется, в Байтленде все нумерации начинаются с нуля.) Далее все дома будут пристраиваться слева или справа  от существующей застройки. Дома будут получать номера в порядке их ввода в эксплуатацию.
Рассмотрим пример. Пусть, дом номер 1 был построен слева от дома номер 0. Тогда нумерация домов слева направо будет выглядеть как 1 0. Далее был построен дом номер 2 слева от существующих. Теперь дома на улице будут иметь номера 2 1 0. Далее был построен дом номер 3 справа от существующих. Теперь на улице будут стоять дома с номерами 2 1 0 3. Наконец, если дом номер 4 будет построен слева, а дома с номерами 5 и 6 справа, то последовательность номеров домов превратится в 4 2 1 0 3 5 6.
На улице построили n домов с номерами от 0 до n-1. Для каждого дома с ненулевым номером нам стало известно с какой стороны от существующих он был построен. Теперь ваша задача — написать программу, которая перечислит номера домов в порядке движения по улице слева направо.
Формат входных данных
В первой строке на вход подается число n — количество построенных домов. 2 ≤ n ≤ 400000. Во второй строке записана последовательность из n−1 символов "L" или "R" (без кавычек). Символ "L" в i-той позиции означает, что дом с номером i был построен слева от предыдущих, а символ "R" — справа.
Формат выходных данных
Вывести через пробел в одной строке последовательность из n чисел — нумерацию домов после завершения строительства.
Методика проверки и описание тестов
Программа проверяется на 10 тестах. Прохождение каждого теста оценивается в 2 балла.  Тест из условия задачи при проверке не используется.
В первых пяти тестах n ≤ 100.

Sample Input:
7
LLRLRR

Sample Output:
4 2 1 0 3 5 6

Мое решение:

dom = int(input())
a = input()
spisok = [0]
k = 0
while k < dom - 1:
    if a[k] == 'L':
        spisok.insert(0, k + 1)
    if a[k] == 'R':
        spisok.append(k + 1)
    k += 1
print(*spisok)

Складывайте левые и правые дома в отдельные списки аппендом.
Потом переверните левый список, выведите его, потом правый.
(инсерт в начало списка вызывает постоянные перераспределения памяти)
<code>
dom = int(input())
a = input()
spisokL = []
spisokR = [0]
k = 0
while k < dom - 1:
    if a[k] == 'L':
        spisokL.append(k + 1)
    if a[k] == 'R':
        spisokR.append(k + 1)
    k += 1
spisokL.reverse()
print(*spisokL, *spisokR)
</code>


Почему Python выводит ошибку [закрыт]

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

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

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

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

Я тренируюсь решать разные задачи на python, решаю такую задачу "Написать функцию date, принимающую 3 аргумента — день, месяц и год. Вернуть True, если такая дата есть в нашем календаре, и False иначе".
Я хочу реализовать эту задачу так ( код ) :
<code>
def date(day, month, year):
if year % 2 == 1: # Проверяем год, на високосность
    if month <= 12: # Проверяем месяц, правильное ли количество месяцев
        if month != 2:
            if month % 2 == 0: # Проверяем месяц, (30 или 31 дней)
                if day <= 30: # Проверяем день на правильность их количества в месяце
                    return True
        elif month == 2:
            elif:
                else:
                    return False

    else:
        return False

elif year % 2 == 0:
    elif month <= 12:
        elif month == 2:
            elif month % 2 == 0:
                elif day <= 29:
                    return True
        else:
            return False
                else:
                    return False

date(10, 5, 2021)
</code>
Выдаёт ошибку : "File "МОЙ ПУТЬ", line 7
return True
TabError: inconsistent use of tabs and spaces in indentation". Ошибок табуляции я не нашёл. Поэтому и не могу решить задачу

Предлагаю посмотреть в сторону решения с использованием модуля datetime:
<code>
from datetime import date

def check_date(y, m, d):
  try:
    date(y, m, d) # Проверяем получается ли дата из наших значений
    return True
  except:
    return False

print(check_date(2018, 2, 28)) # True, есть в календаре
print(check_date(2018, 2, 29)) # False, нет в календаре
</code>


Как по ключу вложенного словаря вернуть значение основного?
Прошу немного помощи при работе со словарями.
Есть словарь.

{'B': {'old': 60691.96, 'now': 61928.03, 'change': 2.04}, 'E': {'old': 4418.98, 'now': 4605.43, 'change': 4.22}, 'D': {'old': 188.5, 'now': 192.49, 'change': 2.12}}
max_percent = 4.22

for xer in global_dict.values():
    if xer['change'] == max_percent:
        print(xer)
        break
    else:
        continue

Вывод

{'old': 4418.98, 'now': 4605.43, 'change': 4.22}

Мне нужно, чтобы ключ возвращался вместе с вложенным словарем. То есть.

{'E': {'old': 4418.98, 'now': 4605.43, 'change': 4.22}}

Проблема в том, что для поиска ключа, нужно сначала обратиться к элементам значения, сравнить с 4.22, а потом по этому значению вложенного ключа в 'change', вернуть значение словаря, в котором такое значение.

в цикле вместо
values() используйте
items(), который содержит информацию и о ключе и о значении, а не только о значении

global_dict = {'B': {'old': 60691.96, 'now': 61928.03, 'change': 2.04}, 'E': {'old': 4418.98, 'now': 4605.43, 'change': 4.22}, 'D': {'old': 188.5, 'now': 192.49, 'change': 2.12}}
max_percent = 4.22

for xer in global_dict.items():
    if xer[1]['change'] == max_percent:
        print(xer)
        break


Помогите понять что означает ошибка и как ее исправить
Traceback (most recent call last):
File "C:\Users\Admin\source\repos\PythonApplication8\PythonApplication8.py", line 158, in
main()
File "C:\Users\Admin\source\repos\PythonApplication8\PythonApplication8.py", line 152, in main
move = computer_move(board, computer, human)
TypeError: computer_move() takes 0 positional arguments but 3 were given
Для продолжения нажмите любую клавишу . . .
<code>
    #глобальные константы
X = "X"
O = "O"
EMPTY = " "
TIE = "Ничья"
NUM_SQUARES = 9

def display_instruct():
    """Выводит инструкцию для игрока"""
    print(
    """
    Добро пожаловать.
    Чтобы сделать ход, введи число от 0 до 8. Числа соответствуют полям доски - так, как показано ниже:
    0 1 2
    3 4 5
    6 7 8
    \n"""
    )

def ask_yes_no(question):
    """Задает вопрос с овтетом да или нет"""
    response = None
    while response not in ("y", "n"):
        response = input(question).lower()
    return response

def ask_number(question, low, high):
    """Просит ввести число из диапазона"""
    response = None
    while response not in (question, low, high):
        response = int(input(question))
    return response

def pieces():
    """Определяет принадлежность первоо хода"""
    go_first = ask_yes_no("Хочешь оставить за собой первый ход? (y/n): ")
    if go_first == "y":
        print("\nДаю тебе фору, играй крестиками")
        human = X
        computer = O
    else:
        print("Начинать будет комп")
        human = X
        computer = O
    return computer, human

def new_board():
    """Создает новую доску"""
    board = []
    for sqare in range(NUM_SQUARES):
        board.append(EMPTY)
    return board

def display_board(board):
    """Отображает игровую доску на экране"""
    print("\n\t", board[0], "|", board[1], "|", board[2])
    print("\t___________")
    print("\n\t", board[3], "|", board[4], "|", board[5])
    print("\t___________")
    print("\n\t", board[6], "|", board[7], "|", board[8],   "\n")

def legal_moves(board):
    """Создает список доступных ходов"""
    moves = []
    for sqare in range(NUM_SQUARES):
        if board[sqare] == EMPTY:
            moves.append(sqare)
    return moves

def winner(board):
    """Определяет победителя в игре"""
    WAYS_TO_WIN = ((0, 1, 2),
                    (3, 4, 5),
                    (6, 7, 8),
                    (0, 3, 6),
                    (1, 4, 7),
                    (2, 5, 8),
                    (0, 4, 8),
                    (2, 4, 6))
    for row in WAYS_TO_WIN:
        if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
            winner = board[row[0]]
            return winner
        if EMPTY not in board:
            return TIE
    return None

def human_move(board, human):
    """Получает ход человека"""
    legal = legal_moves(board)
    move = None
    while move not in legal:
        move = ask_number("Твой ход. Выбери одно из полей (0 - 8):", 0, NUM_SQUARES)
        if move not in legal:
            print("\nВыбери другое")
    print("Ладно")
    return move

def computer_move():
    """Делает ход за компьютерного противника"""
    board = board[:]
    BEST_MOVES = (4, 0, 2, 6, 8, 1, 3, 5, 7)
    print("Я выберу номер", end=" ")
    for move in legal_moves(board):
        board[move] = computer
        if winner(board) == computer:
            print(move)
            return move
        board[move] = EMPTY
    for move in legal_moves(board):
        board[move] = human
        if winner(board) == human:
            print(move)
            return move
        board[move] = EMPTY
    for move in BEST_MOVES:
        if move in legal_moves(board):
            print(move)
            return move

def next_turn(turn):
    """Осуществляет переход хода"""
    if turn == X:
        return 0
    else:
        return X

def congratat_winner(the_winner, computer, human):
    """Поздравляем победителя игры"""
    if the_winner != TIE:
        print("Три", the_winner, "В ряд\n")
    else:
        print("Ничья!\n")
    if the_winner == computer:
        print("Победа за мной")
    elif the_winner == human:
        print("Человек победил")
    elif the_winner == TIE:
        print("Ничья")

def main():
    display_instruct()
    computer, human = pieces()
    turn = X
    board = new_board()
    display_board(board)
    while not winner(board):
        if turn == human:
            move = human_move(board, human)
            board[move] = human
        else:
            move = computer_move(board, computer, human)
            board[move] = computer
        display_board(board)
        turn = next_turn(turn)
    the_winner = winner(board)
    congrat_winner(the_winner, computer, human)
main()
</code>

вот ваш код, в котором вызывается функция
computer_move:

    if turn == human:
        move = human_move(board, human)
        board[move] = human
    else:
        move = computer_move(board, computer, human)
        print(move)
        board[move] = computer

а вот описание самой функции:

def computer_move():

Вы передаете 3 параметра и не используйте ни одного!
И сама ошибка вам про это же пишет!

TypeError: computer_move() takes 0 positional arguments but 3 were given


Как быстро рассчитать медиану фрейма данных на скользящем окне данных?
Генерирую случайный датасет и на скользящем окне в 1000 значений считаю медиану:
<code>
%%time
sr = pd.Series(np.random.randint(0,100, size=20000))
for i in range(10):
    sr.rolling(1000).apply(lambda x: np.median(x))
</code>
Результат:

Wall time: 28.8 s

Целых 3 секунды на 1 проход. Подобных вычислений нужно много. Да и реальный датасет 0.5М строк, а не 20к.
Как считать скользящую медиану быстрее?

Воспользуйтесь встроенными методами Pandas:
<code>
In [265]: %timeit sr.rolling(1000).median()
14.4 ms ± 513 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [266]: %timeit sr.rolling(1000).apply(lambda x: np.median(x))
1.72 s ± 88.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
</code>
на моем ноуте разница в 119 раз...
PS также возникает вопрос - зачем делать это много раз? Если речь идет о медианных значениях разных столбцов в одном скользящем окне, то это тоже делается векторизированными методами Pandas без циклов.


Tkinter, Python, CheckBox, помогите решить как проверить true или false?
Я не могу понять как делается проверка, вот код:
<code>
def show():
    print('флажок 18', setonstart_value.get())
    if (setonstart_value.get()):
        print('No')

window = tk.Tk()
setonstart_value = tk.StringVar()
setonstart = tk.Checkbutton(window, text='SetOnStart',
                                    variable=setonstart_value,
                                    offvalue='No',
                                    onvalue='yes'
                                    )
setonstart.pack()
tk.Button(window, text='show', command=show).pack()
window.mainloop()
</code>

У вас значение флажка - строка (
'yes' или
'No'). Непустая строка считается истиной, поэтому условие в
if (setonstart_value.get()): всегда выполняется.
Сделайте переменную
setonstart_value логической переменной (
BooleanVar()) вместо строковой (
StringVar()), и уберите
onvalue и
offvalue, тогда при отключенной галке там будет
False, при включенной -
True:

import tkinter as tk

def show():
    print('флажок 18', setonstart_value.get())
    if (setonstart_value.get()):
        print('Yes')
    else:
        print('No')

window = tk.Tk()
setonstart_value = tk.BooleanVar()
setonstart = tk.Checkbutton(window, text='SetOnStart', variable=setonstart_value)
setonstart.pack()
tk.Button(window, text='show', command=show).pack()
window.mainloop()

Ну или оставить
StringVar, но тогда нужно при проверке сравнивать с конкретным значением строки, например:

if (setonstart_value.get() == 'yes'):
    print('Yes')
else:
    print('No')


Как разрешить доступ к команде только людям с определённым id?
Я пишу discord бота(discord.py) на python, и мне нужна функция, которая будет прибавляет к полю xp пользователя указанное число xp, если id того, кто её вызвал, находится в списке admins. Вот то что я сделал:
<code>
@bot.command()
async def add_xp(ctx, member: discord.Member=None, xp=None):
    """Функция add_xp прибавляет к полю xp пользователя указанное число xp.
    (только для админов).
    """
    if member is None:
        emb = discord.Embed(title="Укажите пользователя!", colour=discord.Colour.red())
        await ctx.send(embed=emb)
    else:
        if xp is None:
            emb = discord.Embed(title="Укажите количество XP!", colour=discord.Colour.red())
            await ctx.send(embed=emb)
        else:
            emb = discord.Embed(title=f"Пользователю {member} добавлено {xp}XP", colour=discord.Colour.green())
            cursor.execute(f"UPDATE users SET xp = xp + {xp} WHERE id = {member.id}")
            await ctx.send(embed=emb)
    await ctx.message.delete()
</code>
Как реализовать проверку id пользователя? Желательно чтобы не внутри функции, а в декораторе каком-нибудь.

Вы можете использовать специальные декораторы:

@commands.is_owner()

@commands.has_role('Admin')

@commands.has_any_role('Admin', 'Administrator')

@commands.has_permissions(administrator=True, ban_members=True)

from discord.ext import commands
import discord as ds
import config

bot = commands.Bot(commands.when_mentioned_or(config.bot_prefix), owner_ids=config.owner_ids)

@commands.is_owner()
async def test1(ctx):
    await ctx.reply('You\'re owner! In owner_ids!')

@commands.has_role('Admin')
async def test2(ctx):
    await ctx.reply('You have role "Admin"!')

@commands.has_role(11432413241)
async def test3(ctx):
    await ctx.reply('You have role by id 11432413241!')

@commands.has_any_role('Admin', 'Administrator')
async def test4(ctx):
    await ctx.reply('You have role "Admin" or "Administrator"!')

@commands.has_permissions(administrator=True, ban_members=True)
async def test5(ctx):
    await ctx.reply('You can administer the server and ban members!')

bot.run(config.ds_token, reconnect=True)

config.py

ds_token = '<token>'
guild_ids = {<guild_id>}
owner_ids = {<your_id>}
bot_prefix = '<command_prefix>'


Python. Как "стукнуть" декоратором, то что функция должна запуститься?
<code>
message = ""

def new_message(func):
    def notif():
        func(message)
    return notif

def create():
    message = "hi"
    new_message()

@new_message
def print(message):
    print(message)

create() #hi
</code>
Можно ли реализовать такой код на Python? Если нет, то есть ли какие нибудь альтернативы?

Не понял по вопросу что хотели, но думаю, если посмотрите всю поднаготную декоратора(без синтаксического сахара), то поймете, как он работает (убрал в комммент часть Вашего кода и прокинул аргументы):
<code>
# message = ""

def func(mes):
    print('Я функция, которую хотят стукнуть =(')
    print('И хотят, чтобы я сказзала - ', mes)

def new_message(_func_, _message_):
    def notif(arg):
        _func_(mes=arg)
    return notif(arg=_message_)

def create():
    message = "hi"
    new_message(_func_=func,
                _message_=message)

# @new_message
# def print(message__):
#     print(message__)

print = create() #hi

print
</code>


Запутался в решении [закрыт]

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

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

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

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

Напишите программу, которая считывает три строки по очереди, а затем выводит их в той же последовательности, каждую на отдельной строчке.
Формат входных данных
На вход программе подаются три строки, каждая на отдельной строке.
Формат выходных данных
Программа должна вывести введенные строки в той же последовательности, каждую на отдельной строке.
Примечание. Для считывания текста используйте команду input(), для печати текста на экране используйте команду print().
Моё решение:
<code>
a = input()
print("I was")
print("born")
print("this way")
b = input()
print("I love")
print("Python")
print("so much")`
</code>

где у вас в приведённом коде 3 считанных строчки (по сути 3
input)?
где у вас в коде вывод считанных строк (которые вы записали в переменные)?
почему вы выводите какие-то левые тексты, а не то, что получено с помощью команд
input?

пример:

text1 = input('введите первую строку: ')
#какой-то код
print(text1) # вывод первой строки


Как сделать проверку сообщения на совпадение в файле Вк бот (vkbottle)?
Пишу вк бота используя vkbottle, хочу сделать проверку приходящего сообщения на соответствие в файле hello.txt
Файл имеет построчное содержимое:
Привет
Здрасти
Здравствуйте
и т.д
Например если пользователь написал "Здрасти", бот проверил этот файл и если есть совпадение ответил ему "И тебе привет"
В данный момент бот отвечает так:
<code>
@bot.on.message(text=["Привет", "Здравствуйте"])
async def message_handler(message: Message):
user = await bot.api.users.get(message.from_id)
await message.answer(f"И тебе привет, {user[0].first_name}")
</code>
Благодарю заранее за помощь, если кто поможет.

Если правильно понял вопрос, то вам нужно расширить список допустимых сообщений от пользователей, чтобы не ограничиваться "Привет и здравствуйте", тогда вам стоит сначала прочитать значения из текстового файла, а затем подставить их вместо "Привет и здравствуйте", что-нибудь подобное:
<code>
hello_messages = [] # пустой список допустимых значений

with open('file.txt', encoding="utf-8" ) as f: # открываем файл
    hello_messages = f.read().split("\n") # записываем в список значения из текстового файла

@bot.on.message(text=hello_messages) # Подставляем найденные значения
async def message_handler(message: Message):
    user = await bot.api.users.get(message.from_id)
    await message.answer(f"И тебе привет, {user[0].first_name}")

</code>
Дополнительно, я бы предложил посмотреть в сторону интеграции с базой данных, чтобы не оперировать текстовыми, например с PostgreSQL, в таблицах которой бы хранились шаблоны возможных сообщений от пользователей и ответы на них, а также иная важная для вашего проекта информация.


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

Технически можно, согласно TOS запрещено. Так что если что, enjoy your ban ;)
Как сделать технически -- очень просто. Тебе нужен токен своего аккаунта, ты можешь его найти в local storage в хроме (в firefox так и не понял как, его там нету). Дальше пишешь его вместо токена бота и прописываешь в
run
bot=False:

bot.run(token, bot=False) # токен из local storage, а не бота

Готово!


Что делать, если не понятна логика работы кода (что происходит "под капотом")?
Объясните, пожалуйста, логику кода. Мне не понятно то, что происходит "под капотом":
<code>
def F(n):
    if n > 2:
        return F(n-1)+ G(n-2)
    else: return 1
def G(n):
    if n > 2:
        return G(n-1) + F(n-2)
    else: return 1
print(F(7))
</code>
Если возможно, распишите пожалуйста поэтапно.

А что тут объяснять? Берёте и смотрите, что происходит в функции
F если её вызвать с аргументом
n = 7. Какие она при этом вызовет функции и с какими аргументами. И т.д. В конце-концов придёте к вызовам функций
F и
G с аргументом
n = 1, при этом сработает
return 1, эта единица вернётся в места вызова
F(1) и
G(1), в этом месте тоже что-то посчитается и вернётся и т.д. пока не дойдёте обратно до вызова
F(7) и узнаете, что там вернулось. Просто берёте ручку и всё расписываете - и всё станет понятно.


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

Решение с испольованием модуля Pandas:

читаем Excel файл в Pandas DataFrame
сортируем фрейм по датам
группируем отсортированный фрейм по наименованию
выбираем из каждой группы только одну последнюю строку
сохраняем результат в новый Excel файл

Пример:

import pandas as pd

df = pd.read_excel("filename.xlsx")
res = df.sort_values("date").groupby("name", as_index=False).last(1)
res.to_excel("result.xlsx", index=False)

Пример данных:

  name        date
0  aaa  2021-10-10
1  bbb  2020-01-01
2  aaa  2021-09-09
3  bbb  2020-02-02
4  ccc  2000-12-31

результат:

In [223]: df.sort_values("date").groupby("name", as_index=False).last(1)
Out[223]:
  name        date
0  aaa  2021-10-10
1  bbb  2020-02-02
2  ccc  2000-12-31

пример решения для опубликованного файла:

import pandas as pd

df = pd.read_excel("test2.xlsx", parse_dates=["Время договора"])
res = df.groupby("Наименование инструмента", as_index=False).apply(lambda x: x.nlargest(1, "Время договора"))
res.to_excel("result.xlsx", index=False)


Как удалить элемент двумерного массива?
Есть фиксированный массив.
Для примера:

cards = [[0, 1], [2, 3]]

Каким образом удалить, например,
1 в этом массиве?
В интернете искал, однако там более сложные для понимания примеры, а мне нужен просто метод удаления элементов многомерного массива.

Можно через
del - введите эту команду:

del cards[1]

А если удалить элемент 2 в элементе 1 (в данном случае цифру 1, как у вас в примере), введите:

del cards[0][1]

Меньше места занимает))