Как выводить все элементы из Бд?
У меня в бд есть колонка TEXT, в которой хранится словарь. Вопрос такой - как вытащить оттуда все элементы?
<code>
cur.execute("""CREATE TABLE IF NOT EXISTS info (
    id INT,
    cards TEXT,
    wins INT,
    defeat INT,
    duel TEXT
)""")
con.commit()
...
cur.execute(f"""INSERT INTO info (id, cards, wins, defeat, duel) VALUES ({member.id}, '[]', 0, 0, Null)""")
...
test = cur.execute(f"""SELECT cards FROM info WHERE id = {ctx.author.id}""").fetchone()[0]
print(test) #["", "", ""]
</code>

Вам следует сначала выполнить запрос

test = cur.execute(f"""SELECT cards FROM info WHERE id = {ctx.author.id}""")

затем уже работать с данными

print(test.fetchone()[0])

В качестве примера:

cur.execute(f"""INSERT INTO info (id, cards, wins, defeat, duel) \
    VALUES (1, '["test1", "Тест"]', 0, 0, Null)""")
test = cur.execute(f"""SELECT cards FROM info WHERE id = 1""")
print(test.fetchone()[0])

["test1", "Тест"]

Данные, полученные с помощью
fetchone()[0], будут иметь тип данных
str, поэтому для удобства работы с ними их можно привести к соответствующему виду с помощью библиотеки
ast

print(type(test.fetchone()[0]))
>> <class 'str'>

data = ast.literal_eval(test.fetchone()[0]))
print(type(data), data)
>> <class 'list'> ['test1', 'Тест']

Теперь с данными можно работать как с обычным списком.


Как изменить размер цифр у графика
Использую font для изменения шрифта у подписей на осях графиков:
<code>
font =  {'family': 'serif',
         'color': 'darkred',
         'weight': 'normal',
         'size': 16,
         }
x = np.linspace(0.0, 5.0, 100)
y = np.cos(2*np.pi*x) * np.exp(-x)
plt.plot(x, y, 'k')
plt.title('Dampled exponential decay', fontdict=font)
</code>
А что в него добавить, чтоб шрифт цифр тоже можно менять?

Судя по коду, вы не используете ООП-подход для работы с графиками, поэтогу вам должно подойти

plt.xticks(fontsize=16)

Если бы использовали ООП-подход (через axes), то нужно было бы сделать так:

ax.tick_params(axis='both', which='major', labelsize=16)
ax.tick_params(axis='both', which='minor', labelsize=16)


ValueError: setting an array element with a sequence. The requested array would exceed the maximum number of dimension of 2
Программа должна разделить элементы каждого столбца на его сумму. Затем сложить элементы строки и разделить на их кол-во.
В онлайн компиляторе она работает, но в PyCharm выдаёт вышеуказанную ошибку. Жалуется на A[:,i] не понимаю в чём проблема.
<code>
A = np.matrix([[1,5,6,7],[1/5,1,4,6],[1/6,1/4,1,4],[1/7,1/6,1/4,1]])
print(np.around(A,decimals = 3,))
b=[0,0,0,0]
for i in range(A.shape[0]):
    column = A[:,i]
    s = sum(column)
    print()
    column = [divide / s for divide in column]
    A[:,i] = column #ошибка здесь
print('Нормализованные столбцы:\n', np.around(A,decimals = 2,))
for i in range(A.shape[0]):
    for j in range(A.shape[1]):
        b[i]+=A[i,j]/4
print('Сумма элементов строк: ',np.around(b,decimals = 3,))````
</code>

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

A = np.matrix([[1,5,6,7],[1/5,1,4,6],[1/6,1/4,1,4],[1/7,1/6,1/4,1]])

Программа должна разделить элементы каждого столбца на его сумму.

A = A / A.sum(axis=0)

Затем сложить элементы строки и разделить на их кол-во.

print(A.sum(axis=1) / A.shape[1])

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

column = column / s

если я чего не пропустил, в остальном он рабочий


Упростить код без использования условий и циклов
<code>
def is_valid_pin_codes(pin_codes):
    verification = set(pin_codes)
    if len(verification) == len(pin_codes):
        for i in verification:
            try:
                if len(i) != 4:
                    return False
                else:
                    if i.isdigit():
                        break
            except TypeError:
                return False
    else:
        return False
    return True

pin_codes = ['1101', '9034', '00112', '001a', '1101']
is_valid_pin_codes(pin_codes)
</code>
Передаём в функцию список из пин-кодов. Возвращаем True если пин-коды в виде строки, не больше и не меньше 4 элементов, не повторяются и хранят в себе только цифры. Если хотя бы 1 условие не выполняется - возвращаем False.
Хочу для себя знать альтернативные варианты, чтобы все работало быстрее, или, может, узнать новые методы для себя, которые мог бы использовать здесь.

С точки зрения читаемость-количество строк такой вариант оптимальный:

def is_valid_pin_codes(pin_codes):
    if len(set(pin_codes)) != len(pin_codes):
        return False
    correct_pin_codes = [code for code in pin_codes
                         if type(code) is str
                         and len(code) == 4
                         and code.isdigit()]
    return len(correct_pin_codes) == len(pin_codes)

pin_codes = ['1101', '9034', '00112', '001']
print(is_valid_pin_codes(pin_codes)) # False

pin_codes = ['1101', '9034', '0112', '0041']
print(is_valid_pin_codes(pin_codes)) # True

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

def is_valid_pin_codes(pin_codes):
    return len(set(pin_codes)) == len(pin_codes) and len([code for code in pin_codes if type(code) is str and len(code) == 4 and code.isdigit()]) == len(pin_codes)

Также я рекомендую почитать вам про list comprehenshions, это пригодится в дальнейшем для решения подобных (и не только) задач.


Как взять элементы списка попарно?
У меня есть список из координат [0, 1, 2, 3, 1], как мне взять элементы из списка и попарно иx присвоить x и y?
Чтобы в первом шаге x == 0, y == 1, потом x == 1, y == 2 и так далее.
Какие методы использовать?

Через индексы:

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

for i in range(len(a) - 1):
    x, y = a[i], a[i + 1]
    print(x, y)

Результат:

0 1
1 2
2 3
3 1


Как создать inline кнопку инициирующую нажатие команды в телеграм боте?
Написал небольшой код по многоуровневому списку. Сделал кнопку назад(в приведенном коде ее нет, взял немного старую версию кода потому что под рукой она), чтобы кидала на уровень назад(кроме как на первый, т.к. кнопка назад привязана к значениям предыдущих кнопок, а начальная менюшка вызывается командой старт). Так вот, как сделать кнопку "В начало", чтобы она меняла содержимое текущего сообщения на первоначальное состояние(после нажатия кнопки start)?

import telebot
from telebot import types
bot = telebot.TeleBot('')

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup(row_width=3)
    l1_1 = types.InlineKeyboardButton('1', callback_data='level1_1')
    l1_2 = types.InlineKeyboardButton('2', callback_data='level1_2')
    l1_3 = types.InlineKeyboardButton('3', callback_data='level1_3')
    l1_4 = types.InlineKeyboardButton('4', callback_data='level1_4')
    l1_5 = types.InlineKeyboardButton('5', callback_data='level1_5')
    l1_6 = types.InlineKeyboardButton('6', callback_data='level1_6')
    markup.add(l1_1, l1_2, l1_3, l1_4, l1_5, l1_6)
    bot.send_message(message.chat.id, 'Чем я могу вам помочь? \n '
                                      '1. Узнать о ….\n '
                                      '2. Получить …. \n '
                                      '3. Ответы на часто задаваемые вопросы. \n '
                                      '4. Вызвать оператора. \n '
                                      '5. О нашем ….. \n '
                                      '6. Оставить отзыв.', parse_mode='HTML', reply_markup=markup)

@bot.callback_query_handler(func=lambda callback: callback.data)
def check_callback_data(callback):
    if callback.data == 'level1_1':
            markup = types.InlineKeyboardMarkup(row_width=5)
            l2_1 = types.InlineKeyboardButton(text='1', callback_data='level2_1')
            l2_2 = types.InlineKeyboardButton(text='2', callback_data='level2_2')
            l2_3 = types.InlineKeyboardButton(text='3', callback_data='level2_3')
            l2_4 = types.InlineKeyboardButton(text='4', callback_data='level2_4')
            l2_5 = types.InlineKeyboardButton(text='5', callback_data='level2_5')
            l2_6 = types.InlineKeyboardButton(text='6', callback_data='level2_6')
            l2_7 = types.InlineKeyboardButton(text='7', callback_data='level2_7')
            l2_8 = types.InlineKeyboardButton(text='8', callback_data='level2_8')
            l2_9 = types.InlineKeyboardButton(text='9', callback_data='level2_9')
            l2_10 = types.InlineKeyboardButton(text='10', callback_data='level2_10')
            markup.add(l2_1, l2_2, l2_3, l2_4, l2_5, l2_6, l2_7, l2_8, l2_9, l2_10)
            bot.edit_message_text(chat_id=callback.message.chat.id, message_id=callback.message.id,
                                  text='1. Категории …., имеющие право ….. \n'
                                       '2. Перечень …., необходимых для …...\n'
                                       '3. Срок предоставления …. \n'
                                       '4. Основания для …. \n'
                                       '5. Основания для …. \n'
                                       '6. Возобновление …\n'
                                       '7. Максимальное время … \n'
                                       '8. Срок … ... \n'
                                       '9. Стоимость ... \n'
                                       '10.Начисление …Способы ', parse_mode='HTML', reply_markup=markup)

@bot.callback_query_handler(func=lambda callback: callback.data)
def check_callback_data(callback):
    if callback.data == 'level2_1':
            markup = types.InlineKeyboardMarkup(row_width=5)
            l3_1 = types.InlineKeyboardButton(text='Назад', callback_data='level1_1')
            l3_2 = types.InlineKeyboardButton(text='В начало', callback_data='Start_2')

            markup.add(l3_1, l3_2)
            bot.edit_message_text(chat_id=callback.message.chat.id, message_id=callback.message.id,
                                  text='Категории, \n'
                                       '1. ррррр:\n'
                                       '        рррр; \n'
                                       '        ррррр; \n'
                                       '        рррр; \n'
                                       '        рррр. \n'
                                       '2. рррррр. \n'
                                       '3. ррррр  \n'
                                       '4. рррр  \n', parse_mode='HTML', reply_markup=markup)

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

import telebot
from telebot import types
bot = telebot.TeleBot(token)

def start_message(message, edit=False):
    markup = types.InlineKeyboardMarkup(row_width=3)
    markup.add(*(types.InlineKeyboardButton(str(i), callback_data='level1_'+str(i)) for i in range(1,7)))
    if edit:
        bot.edit_message_text(chat_id=message.chat.id, message_id=message.id,
                              text=messages[0], parse_mode='HTML', reply_markup=markup)
    else:
        bot.send_message(message.chat.id, messages[0], parse_mode='HTML', reply_markup=markup)

@bot.message_handler(commands=['start'])
def start(message):
    start_message(message)

@bot.callback_query_handler(func=lambda callback: callback.data)
def check_callback_data(callback):
    if callback.data == 'level1_1':
        markup = types.InlineKeyboardMarkup(row_width=5)
        markup.add(*(types.InlineKeyboardButton(str(i), callback_data='level2_'+str(i)) for i in range(1,11)))
        bot.edit_message_text(chat_id=callback.message.chat.id, message_id=callback.message.id,
                              text=messages[1], parse_mode='HTML', reply_markup=markup)
    if callback.data == 'level2_1':
        markup = types.InlineKeyboardMarkup(row_width=5)
        markup.add(
            types.InlineKeyboardButton(text='Назад', callback_data='level1_1'),
            types.InlineKeyboardButton(text='В начало', callback_data='start')
        )
        bot.edit_message_text(chat_id=callback.message.chat.id, message_id=callback.message.id,
                              text=messages[2], parse_mode='HTML', reply_markup=markup)
    if callback.data == 'start':
        start_message(callback.message, True)

Я тут текст сообщений убрал в переменную
messages ну и немного сократил код генераторами.
Ещё у тебя ошибка, что ты несколько раз объявляешь
callback_query_handler, т.е. далее одного уровня программа не выполнится, тоже поправил.


Как убрать последний символ при print?
Мой ответ буквально не принимают из-за последнего невидимого пробела. Каким способом его можно удалить?
<code>
    def __init__(self,stroka):
        date = stroka.split()
        self.__kol = dict(zip(date[::2],[int(i) for i in date[1::2]]))

    def __del__(self):
        pass

    def getval(self, namebook):
        return self.__kol[namebook]

    def takebook(self,namebook,val):
        self.__kol[namebook] = self.__kol[namebook] - int(val)
        return self.__kol[namebook]

    def addbook(self, namebook, val):
        self.__kol[namebook] = self.__kol[namebook] + int(val)
        return self.__kol[namebook]

date_book = 'Boogeyman 66 Battleground 50'
a = Book(date_book)
for book in date_book.split()[::2]:
    print(book,a.getval(book),a.takebook(book,1), a.addbook(book,1), sep=' ', end=' ', flush=True) ```
</code>

тогда не будет пробела между ответами

Чтобы сохранить все пробелы

print(' '.join([' '.join([str(book),str(a.getval(book)),str(a.takebook(book,1)),str(a.addbook(book,1))]) for book in date_book.split()[::2]]))

Запускать без цикла
for book in date_book.split()[::2]:

Или более читаемый вариант с объявлением
list переменной:

date_book = 'Boogeyman 66 Battleground 50'
a = Book(date_book)
output = []
for book in date_book.split()[::2]:
    output.append(book)
    output.append(a.getval(book))
    output.append(a.takebook(book,1))
    output.append(a.addbook(book,1))
print(' '.join(str(i) for i in output))


Как перевести цикл из с++ в Python
Перевожу код из с++ в Python, встретил следующий цикл:

for (unsigned int j = x; j; j = fail[j])

Не очень понимаю, как его можно интерпретировать на Python, моя попытка:

for j in fail:
    if j:


найти количество элементов столбца не привышающих заданное число
нужно найти количество элементов каждого столбца которое не превышает число R
есть такой код, но работает не корректно:
<code>
import numpy as np
print('Input R: '); R = float(input()); res = 0;
a=np.array ([[0, 2.4, -6, 5, 0.8],
             [1.5, 0, 0, -4.3, -3.5],
             [0, 1.8, 3.2, -1.2, -1.3],
             [0, 0, -2.3, 0, -7.2],
             [3.3, -0.8, 0, 3.5, 8]])
print (a);
print('---------------------------')
b = a*5.13
print(b)
for i in range (5):
    if len(b)<R:
        res+=1
print('Result: ', res)
</code>

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

a = np.array([[0, 2.4, -6, 5, 0.8],
              [1.5, 0, 0, -4.3, -3.5],
              [0, 1.8, 3.2, -1.2, -1.3],
              [0, 0, -2.3, 0, -7.2],
              [3.3, -0.8, 0, 3.5, 8]])

print(np.sum(a <= R)) # 17


Как из всего текста выбрать только нужное?
Из текста:
<code>
{"result":  [{"spa_id":153048737,"mmr":354.727809161879,"season_number":43,"calibrationBattlesLeft":0,"number":1,"skip":false,"updated_at":"2022-12-18 12:50:57","score":6547,"nickname":"Luc1que_","clan_tag":"PWNZ"}
</code>
нужно отобразить только clan_tag, nickname и score
как это сделать?

Если исходник такой:

data = {"result":
{"spa_id": 153048737, "mmr": 354.727809161879, "season_number": 43, "calibrationBattlesLeft": 0, "number": 1, "skip": False, "updated_at": "2022-12-18 12:50:57", "score": 6547, "nickname": "Luc1que_", "clan_tag": "PWNZ"}}

ТО примерно так:

print(data["result"]["clan_tag"])
print(data["result"]["nickname"])
print(data["result"]["score"])


Содержание строки python в неправильной кодировке
Имеется переменная преобразованная к str.

a = '\xca\xe0\xf1\xf1\xe0' (слово на кириллице "Касса").
Необходимо выводить на экран слова на кириллице, в данном случае касса.
Пробовал

print(a.encode('ascii').decode('utf-8'))
не получается.

Вариант такой:
<code>
import sys

a = '\xca\xe0\xf1\xf1\xe0'
res = bytes(a, 'Latin1').decode('cp1251')
print(f'{sys.stdout.encoding}: {res}')
</code>
Вывод: utf-8: Касса


Нужна помощь с ботом в телеграме на python, не работают инлайн кнопки
У меня версия python 3.9
Использую библиотеки
telebot,
os,
platform
Проблема в том что когда я в самом боте пишу команду
/panel должно отправляться меню из инлайн кнопок и по нажатии на кнопку должна выполняться другая команда , но кнопки не реагируют на нажатия, мне нужна помощь . Помогите пожалуйста . Суть бота в том что по нажатии кнопки "Информация об ПК" бот должен присылать инфу об системе и железе, сама команда работает, а вот кнопка нет. При нажатии на кнопку бот присылает сообщение
/info и больше ничего не происходит.

import telebot
from telebot import types
import os
import platform

bot = telebot.TeleBot('token')

@bot.message_handler(commands=['info']) # Данная команда выводит основную информацию о ПК
def start_message5(message5):
    machine0 = platform.machine()
    machine1 = platform.version()
    machine2 = platform.platform()
    machine3 = platform.processor()
    machine4 = socket.gethostname()
    bot.send_message(message5.chat.id, machine0)
    bot.send_message(message5.chat.id, machine1)
    bot.send_message(message5.chat.id, machine2)
    bot.send_message(message5.chat.id, machine3)
    bot.send_message(message5.chat.id, machine4)

@bot.message_handler(commands=['panel'])
def start_message10(message10):
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton("Информация об ПК", callback_data="/info")
    markup.add(btn1)
    bot.send_message(message10.chat.id, text="Выбери действие", reply_markup=markup)

@bot.callback_query_handler(func=lambda call: call.data in ['/info'])
def callback_inline(call):
    if call.data == '/info':
        bot.send_message(call.message.chat.id, call.data) # Вот тут проблема, тут я так и не понял что нужно указать
bot.polling()

Попробуй так
<code>
@bot.callback_query_handler(func=lambda call: call.data in ['/info'])
def callback_inline(call):
    if call.data == '/info':
        start_message5(call.message)
</code>


Можно ли запрос из SQL объединить в одно сообщение
Написал запрос SQL что бы бот из бд выдавал мне 10 строк с наибольшим значением столбца.
<code>
c.execute('SELECT id_a FROM users ORDER BY value_a DESC')
    results = c.fetchmany(10)
    for row in results:
        id_a = str(row[0])
        await message.answer(f'{id_a}')
</code>
Строки то он выдает но в разных сообщения, а мне нужно что бы выдавал сразу все в одно.
Не подскажите как это воплотить?

Чтобы вывести результаты запроса в одном сообщении, вам нужно собрать все результаты в список, а затем вывести этот список через join. Примерно так:
<code>
c.execute('SELECT id_a FROM users ORDER BY value_a DESC')
results = c.fetchmany(10)
id_list = []
for row in results:
    id_a = str(row[0])
    id_list.append(id_a)
await message.answer(', '.join(id_list))
</code>


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

Почему 2+2 будет 4?
Почему если не учиться будешь получать плохую оценку?
Как избежать получение плохих оценок?

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

# импортируем 'shuffle' из библиотеки 'random'
from random import shuffle

# создаем список с вопросами
questions = [
    "Почему 2+2 будет 4?",
    "Почему если не учиться будешь получать плохую оценку?",
    "Как избежать получение плохих оценок?",
]

# перемешиваем вопросы в случайном порядке
shuffle(questions)

# проходимся по списку и выводим каждый вопрос
for question in questions:
    print(question)


Как сделать движение картинки снизу вверх, при наведении на неё
Мне нужно чтобы была картинка которая немного выходила из низа экрана, и при наведении на неё она сдвигалась по 3-5 пикселей вверх, тем самым создавав анимацию. Сейчас у меня получилось это:
<code>
import pygame, ctypes, time
from pygame.locals import *

user32 = ctypes.windll.user32
w = user32.GetSystemMetrics(0)
h = user32.GetSystemMetrics(1)
hc = int(h/2)
wc = int(w/2)

pygame.init()

game_display = pygame.display.set_mode((w, h), pygame.RESIZABLE)
kartinka = pygame.image.load("assets/kartinka.png")
kartinkar = pygame.transform.scale(kartinka, (160, 240))

pygame.display.update()
speedCard = 5

while True:
    InGameSPP_MOUSE_POS = pygame.mouse.get_pos()
    InGameSPP_MOUSE_POS_XW = InGameSPP_MOUSE_POS[0]
    InGameSPP_MOUSE_POS_YH = InGameSPP_MOUSE_POS[1]

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            quit()

    game_display.blit(kartinkar, ((w-1080)-175, h-(188-125)))

    if (InGameSPP_MOUSE_POS_XW in range(int((w-1080)-175), int((w-1080)-175+160))) and (InGameSPP_MOUSE_POS_YH in range(h-(188-125), h-(188-125)+120)): # InHands0Card
        print("1")
        newposcard0 = h-(188-125)
        runwhilecard0 = True
        while runwhilecard0 == True:
            time.sleep(0.05)
            newposcard0 -= speedCard
            # print(newposcard0)
            if newposcard0 <= h-(188+125):
                newposcard0 = h-(188+125)
                runwhilecard0 = False
            game_display.blit(kartinkar, (w-1080-175, newposcard0))

    pygame.display.update()
</code>
вот, именно такой результат как тут у меня в программе происходит.
Приведённый код выше ^ не работает(

Я не смог воспроизвести вашу программу, вот образец выполняющий нужную функцию:
<code>
import pygame
from pygame.locals import *

RED = (255, 0, 0)
GRAY = (150, 150, 150)

pygame.init()
w, h = 640, 440
screen = pygame.display.set_mode((w, h))
running = True

img = pygame.image.load('bird.png')
img.convert()
rect = img.get_rect()
rect.center = w // 2, h
moving = True

while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False

        elif event.type == MOUSEMOTION and rect.collidepoint(event.pos) and moving:
            rect.move_ip(0, -5)
            moving = False

        elif event.type == MOUSEMOTION and not rect.collidepoint(event.pos) and not moving:
            rect.move_ip(0, +5)
            moving = True

    screen.fill(GRAY)
    screen.blit(img, rect)
    pygame.draw.rect(screen, RED, rect, 1)
    pygame.display.update()

pygame.quit()
</code>
За основу взял код отсюда, там и изображение.


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

class Protest(StatesGroup):
    full_name = State()
    team_name = State()
    enemy = State()
    date = State()
    time = State()
    cause = State()

@dp.message_handler(commands=["protest"], state=None)
async def start_protest(message: types.Message):
    await Protest.full_name.set()
    await message.answer("Введите Ваше ФИО:")

@dp.message_handler(state=Protest.full_name)
async def name_protest(message: types.Message, state=FSMContext):
    async with state.proxy() as data:
        data["full_name"] = message.text
    await Protest.next()
    await message.answer("Введите название Вашей команды:")

Конец кода:

@dp.message_handler(state=Protest.cause)
async def cause_protest(message: types.Message, state=FSMContext):
    async with state.proxy() as data:
        data["cause"] = message.text
    await protest_db.sql_add_command(state)
    await state.finish()
    await message.answer("Ваш протест будет рассмотрен")

def register_handlers_protest(dp: Dispatcher):
    dp.register_message_handler(start_protest, commands=["protest"], state=None)
    dp.register_message_handler(name_protest, state=Protest.full_name)
    dp.register_message_handler(teem_name_protest, state=Protest.team_name)
    dp.register_message_handler(enemy_teem, state=Protest.enemy)
    dp.register_message_handler(inline_kb_answer_callback_handler, state=Protest.date)
    dp.register_message_handler(time_match, state=Protest.time)
    dp.register_message_handler(cause_protest, state=Protest.cause)

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

Сделайте такой хендлер для сброса состояния
<code>
@dp.message_handler(command=['cancel'], state="*")
async def cancel_fsm(message: types.Message, state: FSMContext):
    await state.finish()
</code>


Как посчитать количество аргументов, вводимых в функцию при помощи *?
Есть следующее задание:

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

Я вроде бы понял, как мне реализовать это в рамках базы: подсчёта длины списка, написал следующее:
<code>
def args_counter(*args):
  value = []
  for el in args:
    value.append(el)
  print("Вот, сколько Вы ввели аргументов: ", len(value))

for_count = input("Введите Ваши аргументы (через запятаю с пробелом): ")
not_yet_counted = for_count.split(", ")

args_counter(not_yet_counted)
</code>
Но почему-то при активации кода с каким бы то ни было отличным от одного кол-вом аргументов, все равно выводится 1, не понимаю, почему так. Помогите, пожалуйста.

Потому-что, при
args_counter(not_yet_counted) вы только в первый аргумент передали список
А чтобы этот список распаковать в аргументы, используйте
*, тогда в каждый аргумент функции будет передаваться элемент списка:

args_counter(*not_yet_counted)

Кст, можно сразу размер
args выводить:

def args_counter(*args):
    print("Вот, сколько Вы ввели аргументов:", len(args))


Как вывести определенное количество кнопок в боте?
<code>
import telebot
from telebot import types
from keyboa import Keyboa

API_TOKEN = 'token'
bot = telebot.TeleBot(API_TOKEN)

@bot.message_handler(content_types=['text'])
def one_s(message):
    keyboard = telebot.types.ReplyKeyboardMarkup(True)
    numbers = '1' , '2'
    keyboard.row(numbers)
    bot.send_message(message.chat.id, 'Привет', reply_markup=keyboard)
bot.polling()

AttributeError: 'tuple' object has no attribute 'to_dict'
</code>
Хочу сделать так чтобы скрипт определял сколько элементов найдет парсер и выводил соответствующие количество кнопок, нигде не найду как это сделать, пытаюсь сделать через кортежи, получаю ошибки. Что можно сделать в этом случае?

Нужно распаковать кортеж/список
<code>
keyboard = telebot.types.ReplyKeyboardMarkup(True)
numbers = ('1' , '2')
keyboard.row(*numbers)
</code>


Почему не стоит запихивать хендлеры внутрь других хендлеров
Почему нельзя делать так?
<code>
@dp.message_handler(commands=['weather'])
async def weather_handler(message: types.Message):
    await bot.send_message(message.chat.id, text='Введи название города...')

    @dp.message_handler()
    async def get_city_name(message: types.Message):
        # обработка введённых данных от юзера
        pass
</code>
PS. Табуляция верна.
PS_2. Сделал вопрос чтобы на него ссылаться в будущем.

Ответ в большинстве своем подходит как для
aiogram так и для
pytelegrambotapi.
Для начала опишу примерный ход действий бота при получении сообщения.

Вы запускаете бота.
Он проходит по всему видимому коду, и записывает(видимые) хендлеры в свой внутренний список.
Юзер отправляет команду
/weather
Бот проходит по списку хендлеров, и начинает сверяться с фильтрами внутри хендлеров, по типу
content_types=[...],
regex="...", ну или некую лябмюду
func=lambda msg: msg.text=='...'
Натыкается на
commands=['weather'] и тригерит функцию
weather_handler
И тут начинается хрень. Программа проходит по коду
weather_handler и видит еще один хендлер, который не имеет фильтра (по факту будет иметь
content_types=['text'] и
state=None(Aiogram)), и само собой записывает его в свой список хендлеров (смотри пункт 2).
Дальше юзер вводит текст, который с большей долей вероятности попадает в
get_city_name и вроде бы код даже работает как надо, и в целом можно забить на эту тему, при условии что ваш бот имеет только одну такую шляпу.
Проблемы возникают когда появляется еще одна функция без фильтров.

К примеру такой код:

@dp.message_handler(commands=['weather'])
async def weather_handler(message: types.Message):
    await bot.send_message(message.chat.id, text='Введи название города...')

    @dp.message_handler()
    async def get_city_name(message: types.Message):
        # обработка введённых данных от юзера
        pass

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

Будет всё ломать. Функция
get_city_name никогда не сработает, так как в список хендлеров попадет позже чем
get_all_text и вы будете грустить, что не продумали это заранее.
Итак, как это исправить, чтобы это работало наверняка?
pytelegrambotapi
Для
pytelegrambotapi нужно юзать
register_next_step_handler.

@bot.message_handler(commands=['weather'])
def weather_handler(message: types.Message):
    bot.send_message(message.chat.id, text='Введи название города...')
    bot.register_next_step_handler(message, get_city_name)

def get_city_name(message: types.Message):
    # обработка введённых данных от юзера
    pass

@bot.message_handler()
def get_all_text(message: types.Message):
    pass

Логика работы следующая:
в
register_next_step_handler пихаете первым аргументом объект
Message который в целом можно брать текущий без создания нового по типу

@bot.message_handler(commands=['weather'])
def weather_handler(message: types.Message):
    msg = bot.send_message(message.chat.id, text='Введи название города...')
    bot.register_next_step_handler(msg, get_city_name)

Видел как так делают, но особого смысла нет. Разве что вы пересылаете месседж в какой-то другой чат, то тогда стоит делать именно так.
А другим аргументом название функции, которая должна сработать. Само собой в той функции должен быть обязательный аргумент
message: types.Message иначе будет ошибка.
Также вы можете передавать аргументы в следующую функцию. К примеру так.

@bot.message_handler(commands=['weather'])
def weather_handler(message: types.Message):
    bot.send_message(message.chat.id, text='Введи название города...')
    bot.register_next_step_handler(message, get_city_name)

def get_city_name(message: types.Message):
    bot.send_message(message.chat.id, "Введи что-то еще")
    bot.register_next_step_handler(message, get_extra_data, message.text)

def get_extra_data(message: types.Message, city_name: str):
    print(city_name, message.text)

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

def get_city_name(message: types.Message):
    if message.text == "/cancel":
        bot.send_message(message.chat.id, "Вы прервали ввод")
        return

    bot.send_message(message.chat.id, "Введи что-то еще")
    bot.register_next_step_handler(message, get_extra_data, message.text)

Что выглядит довольно убого.
Aiogram
Для
aiogram стоит использовать
state. Пример.

from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State

bot = Bot(token="token")
dp = Dispatcher(bot, storage=MemoryStorage())

class WeatherStates(StatesGroup):
    get_city_name = State()
    get_extra_data = State()

@dp.message_handler(commands=['weather'])
async def weather_handler(message: types.Message):
    await bot.send_message(message.chat.id, text='Введите название города...')
    await WeatherStates.get_city_name.set()

@dp.message_handler(state=WeatherStates.get_city_name)
async def get_city_name(message: types.Message, state: FSMContext):
    await bot.send_message(message.chat.id, text='Введите что-то еще...')
    await WeatherStates.next()
    async with state.proxy() as data:
        data['city_name'] = message.text

@dp.message_handler(state=WeatherStates.get_extra_data)
async def get_extra_data(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        print(data['city_name'], message.text)
    await state.finish()

Выглядит длиннее, но могу уверять что значительно надёжнее. Что мы тут делаем, импортируем нужные модули, и после делаем диспатчер с аргументом
storage=MemoryStorage() нужно для того чтобы боту было где хранить данные стейтов и просто нужные данные.
Дальше делаем класс для стейтов.
После мы вместо
register_next_step_handler пишем
await WeatherStates.get_city_name.set() как-бы запускаем конкретное состояние для определённого юзера(а еще для определенного чата).
После юзер пишет название города и попадает в
get_city_name где мы сразу меняем стейт
await WeatherStates.next() на следующий в группе
WeatherStates и записываем то что написал юзер в словарь.

async with state.proxy() as data:
    data['city_name'] = message.text

Примерная схема хранения такая:

память_стейта = {
    "какой-то_чат_айди": {
        "какой-то_юзер_айди": {
            "state": "",
            "data": {}# тут хранятся данные
        }
    }
}

Ну а потом юзер снова что-то пишет мы попадаем в
get_extra_data и снова заходим в хранилище и оперируем данными, как мы хотим.
И напоследок
await state.finish() сбрасывает текущий стейт, и все данные в хранилище для
чата->юзера.
Ну это нужно делать тогда когда вам точно не нужны данные в хранилище стейта, и сам стейт. Можно конечно сбросить только данные так
await state.reset_data() или только стейт
await state.reset_state(with_data=False)


Pandas свод по всем столбцам кроме указанных
Как в
pandas сделать группировку по столбцам, но чтобы указать не те столбцы по которым свод, а те которые надо исключить? Например есть 20 столбцов, нужно сделать свод по 18 из них. Как правильно написать
groupby или
pivot_table чтобы указать только 2 "Ненужных" столбца, а не писать 18 нужных?

Когда
df - ваш датафрейм и
"Exclude1",
"Exclude2" не нужные столбцы, вы можете сделать список остальных как

cols = [col for col in df.columns if col not in ("Exclude1", "Exclude2")]

и применить этот список, например

df.goupby(cols).sum()

Объяснение:

df.cols - хотя это объект типа
Index, его возможно использовать как список всех имен столбцов

[col for col in df.columns if col not in ("Exclude1", "Exclude2")] - это генератор списка. Я напишу его с излишними пробелами, чтобы лучше было видно его 3 части:

[col     for col in df.columns     if col not in ("Exclude1", "Exclude2")]

Перевод:

Список всех объектов
col,
из списка (
for col in)
df.columns,
которые не находятся (
if col not in) в кортеже
("Exclude1", "Exclude2").


Цикл по множеству dataframe pandas
Есть много датафреймов и есть список с их названиями :
tables = ['dfa', 'dfb', 'dfc', 'dfd', 'dfe'] Во всех таблицах есть столбец с названием 'Sum'. Нужно ко всем применить одинаковое выражение, например:
df.Sum.astype('float64'). Но  в цикле for переменная-итератор воспринимается как строка а не имя датафрейма и выдаёт ошибку:
for i in tables: i.Sum.astype('float64')
Как сделать чтобы переменная читалась как имя датафрейма? Пробовал обернуть в eval или exec - не помогает.

Уберите апострофы:

tables = [dfa, dfb, dfc, dfd, dfe]

Другой подход:

tables = ['dfa', 'dfb', 'dfc', 'dfd', 'dfe']

for i in tables:
    locals()[i].Sum.astype('float64')

Объяснение:
Стандартная функция
locals() возвращает словарь всех местных переменных, причем ключами являются их имена в виде строк и значениями самые объекты.


Мне нужно перебирать все значение profit и добавить все числа в одну переменную
Данные берутся request с post запроса
<code>
{'rows': [{'campaign': 'campaign', 'profit': 70},
{'campaign': 'campagin', 'profit': 250},
{'campaign': 'campaign', 'profit': 35},
{'campaign': 'campaign', 'profit': 70},
</code>
Нужно перебирать все значение profit и добавить все числа в одну переменную allprofit = 435
Совсем новичок на пайтоне не пишу

Это делается достаточно просто:
<code>
all_profit = sum([x['profit'] for x in data['rows']])
</code>
Чтобы разобраться в решении советую почитать документацию:
list comprehenshion и dictionaries.


ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
нужно найти сумму отрицательных элементов матрицы
есть такой код:

import numpy as np
row = 5; sum1=0
a=np.array ([[0, 2.4, -6, 5, 0.8],
             [1.5, 0, 0, -4.3, -3.5],
             [0, 1.8, 3.2, -1.2, -1.3],
             [0, 0, -2.3, 0, -7.2],
             [3.3, -0.8, 0, 3.5, 8]])
print (a)
print('---------------------------')
b = a*5.18
print(b)
for i in a:
    if i < 0:
        sum1 += i
print ('Sum -numbers: ', sum1)

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

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Правильно, i - это не элемент, а целая строка матрицы. При сравнении с нулем получается не True/False, а вектор. Используй логическую индексацию.
<code>
print(np.sum(a[a<0]))
</code>


python telethon как писать в чате от имени канала
Можно ли через telethon писать в чат от имени канала? В документации инфы об этом не нашёл

Сначала проверьте, что вы можете отправить сообщение другому каналу или пользователю. если вы не можете, вы должны поделиться всем кодом.
затем убедитесь, что учетная запись, которую вы используете в этом случае, является администратором канала. невозможно получить эту ошибку, если учетная запись является администратором. также проверьте права администратора и убедитесь, что сообщение сообщения включено.
<code>
await client.send_message(entity='my channel name', message=message)
</code>


Как работает эта функция в пайтон?

def quicksort(array):
if len(array) < 2:
    return array
else:
    pivot = array[0]
    less = [i for i in array[1:] if i < pivot]
    greater = [i for i in array[1:] if i > pivot]

    return quicksort(less) + [pivot] + quicksort(greater)
print(quicksort([3,4,5,2,1]))

я так понимаю, что less берёт меньшие числа чем pivot, а greater берёт большие чем pivot, но по какому принципу эти две переменные это делают? Почему в
[i for i in array[1:] if i > pivot] перед циклом стоит i? И в чём суть условия
if i > pivot]? После этого условия же ничего не стоит.
Если так важно, то это из книжки "Грокаем алгоритмы", на странице 92, издание 2022 года.

Это называется -
list comprehenshion (генераторы списков).
Позволяют создавать списки "на лету" по некоторому условию.
Как это работает:

Всё записывается в квадратных скобках, по аналогии с тем, как создавать список.
Далее указывается тот элемент, который будет помещен в итоговый список (в вашем случае - это элемент
i)
Далее определяется то, откуда этот элемент берется (
i for i in array[1:]), то есть в новый список будут добавлены все элементы из
array[1:], если бы например было написано
i**2 for i in array[1:], то добавлялись бы не сами элементы, а их квадраты.
И дополнительно можно ещё написать некоторое условие, по которому элементы будут добавляться в новый список,
if i > pivot

В заключение имеем, что мы получаем новый список из всех элементов
array[1:], которые превосходят значение
pivot.
Это базовая информация про
list comprehenshion, на данном этапе её должно быть достаточно.
Если хочется узнать подробнее, то всегда есть официальная документация.


Работа с JSON в Python. Парсинг JSON
Задача. Переменная people содержит строку в формате JSON, в которой вы можете получить личные данные 100 человек.
Каждого человека представляет предмет (словарь) с ключами:
имя
страна
возраст
Распечатайте информацию о каждом человеке в соответствии с примером ниже.
Распечатку необходимо отсортировать по возрасту, а при равенстве возраста необходимо расположить в алфавитном порядке
<code>
import json

people = """
{
   "personal" :   [
     {
       "name" :   "Melissa Crawford" ,
       "country" :  "Lebanon",
       "age" :    17
     } ,
     {
       "name" :   "Paul Herrera" ,
       "country" :  "Kiribati",
       "age" :    17
     } ,
     {
       "name" :   "Justin Galvan" ,
       "country" :  "Namibia",
       "age" :    19
     } ,
     {
       "name" :     "Larry Bray" ,
       "country" :  "Brunei Darussalam",
       "age" :      21
     },
     {
       "name" :   "Mary Estes" ,
       "country" :  "Montenegro",
       "age" :    19
     }
   ]
 }
"""
data = json.loads(people)
data1 = sorted(data, key = lambda x: (x['age'], x['name']))
for txt in data1["personal"]:
    lst = txt['name'],', ', txt['country'],', ',  txt['age']
    print(lst)
</code>
Как правильно сделать сортировку в строке data1 = sorted(data, key = lambda x: (x['age'], x['name']))? Выдает ошибку.

У вас в структуре список людей не на верхнем уровне, а внутри ключа personal. Попробуйте так:
<code>
data1 = sorted(data['personal'], key = lambda x: (x['age'], x['name']))
</code>


Проверка на вхождение в группу
Есть 4 переменные и вводимая цифра, каждая из цифр вводится с отдельной строки:

a = int(input())
b = int(input())
c = int(input())
d = int(input())

Как сделать проверку на то, будет ли третий и четвёртый человек в одной группе? (a это сколько всего человек, b это по сколько человек отправляется в группу c, то есть например b = 2, значит сначала 2 человека отправляются в группу c, затем следующие 2 человека отправляются в группу d)
(Ну вот например вы вводим первым число 9, дальше второе число 3 (первые 3 человека идут в одну группу, следующие люди идут во вторую группу (группы всего 2), дальше заново, следующие идут снова в первую и следующие идут снова во вторую) И нужно понять окажется ли например Миша (Переменная c, с это также его номер) в одной с группе с например Сашей (переменная d, также его номер) Пример: 9 3 1 6 Вывод: NO)
Ограничение
a <= 10**9
Была идея сделать с кратностью, что-то вроде:

a = int(input())
b = int(input())
c = int(input())
d = int(input())
if a <= 10**9:
    if a % b == 0:
        print("YES")
    else:
        print("NO")

Но это бред какой-то


Переопределить страницу добавления в админ-панели Django
Мне нужно добавить на страницу js-скрипт, который будет рисовать и удалять HTML-элемент. Нужно, чтобы, когда я выбирал элемент в выпадающем списке, рисовался другой выпадающий список или, наоборот, исчезал. Я знаю, как переопределять страницы в Django, но не могу найти нужную, которая отвечает за добавление новых объектов. Помогите найти её.

Если вы используете
Django Debug Toolbar, то вы можете просто перейти на нужную страницу админ-панели и во вкладке шаблоны посмотреть откуда загружается страница.
После того как вы нашли где находится эта страница (наиболее вероятно, что путь следующий
venv/Lib/site-packages/django/contrib/admin/templates/admin/base_site.html) :
По сути, вы можете внести изменения прямо в этот файл и это будет работать.
Но обычно для более качественной архитектуры приложения все файлы сформированные
Django для админ-панели оставляют нетронутыми и делают следующим образом:

В корне проекта создаем папку
templates.
В этой папке
templates создаем подкаталог
admin
В файле
settings.py в переменной
TEMPLATES в поле
DIRS прописываем путь к нашему шаблону:
'DIRS': [os.path.join(BASE_DIR, 'templates')]

Теперь, если в этом подкаталоге разместить файл
base_site.html, то он уже будет переопределять файл, который использует
Django по дефолту.
Также дополнительная полезная информация:
Файл
base_site.html расширяет файл
base.html (
{% extends "admin/base.html" %}), это значит, что в нем вы можете переопределить некоторые стили, которые используются в
base.html прямо внутри файла
base_site.html, например подгрузить ваш
css файл со стилями.
В интернете можно найти много различных ресурсов, которые предоставляют измененный вид админки, который как раз получается за счет переопределения файла стилей
CSS.
Выглядит это так:

{% load static %}
{% block extrastyle %}
<link rel="stylesheet" href="{% static 'css/admin.css' %}">
{% endblock %}

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


Убрать запятую перед 'and'
К списку нужно добавить запятую после каждого элемента кроме последнего, перед ним нужно добавить 'and' что я сделал, но не могу додумать как убрать запятую перед 'and' чтобы было орфографически правильно оформлен вывод.
Мой вывод: 2 eggs, 1 liter sugar, 1 tsp salt, and vinegar
Должно быть: 2 eggs, 1 liter sugar, 1 tsp salt and vinegar
<code>
    def format_ingredients(items):
        items[-1] = 'and ' + items[-1]
        return ', '.join(items[:])

    list = ["2 eggs", "1 liter sugar", "1 tsp salt", "vinegar"]
    print(format_ingredients(list))
</code>

Пожалуйста, не называйте переменные зарезервированными именами
(built-in) в
Python, таким образом вы переопределяете стандартные объекты и это может вызвать необычное поведение. Список всех зарезервированных имён
По поводу вашей проблемы, можно решить "в лоб", как и написано у вас в условии, все элементы кроме последнего соединить запятой, а перед последним отдельно добавить "and":

list_ = ["2 eggs", "1 liter sugar", "1 tsp salt", "vinegar"]

print(', '.join(list_[:-1]) + ' and ' + list_[-1])

Вывод:

2 eggs, 1 liter sugar, 1 tsp salt and vinegar


Как добавить поиск слова из текста для отображения ответа в Telegram боте на Python
Всем доброго времени суток. В Python практически не разбираюсь, но хочу.
В общем, такой вопрос.
Есть документ с текстом. В нем записаны определенные слова (допустим, "Елка, снеговик, дедушка, снегурочка", а также варианты опечаток на эти слова (пример, "Едка, Клка, Елаа" и т.п.). В зависимости от набранного слова, есть варианты ответа (если пользователь пишет, допустим, "Елка", бот должен ответить(наверное ответ лучше в виде инлайн кнопок будет): "Возможно вы хотите узнать следующее: 1. Стоимость елки, 2. Размеры, 3. Доставка."
Название вариантов(1, 2 и 3) сейчас не суть важно, при выборе одного из них, нужно просто отобразить заранее заготовленный текст.
Проблема в количестве слов, которые надо проверить. По сути, всего слова можно разделить на 5-8 групп(можно даже сказать, на 5-8 условий). Т.е. если пользователь написал слово из одной группы, то выводится нужный ответ(при чем, для слов этой группы ответ всегда один, не меняется).
Если есть по этому вопросу какая-то документация не на английском(будучи начинающим, очень сложно понимать объяснения на англе), или соображения как это сделать, буду очень благодарен.
P.S., нашел код тут на сайте, но, как и писал выше, не пойму как в подобный код впихнуть большой объем слов на проверку. Может создать 8 отдельных файлов(каждый со своим набором слов, которые в других файлах не повторяются) и сделать 8 условий (if) на соответствие слов из этих файлов? Опять же, не пойму как подобное сделать.
<code>
@bot.message_handler(content_types=['text'])
def handle_text(message):

# Если пользователь отправил "привет, как тебя зовут?" отвечаем "робот я"
if message.text == "привет, как тебя зовут?":
   bot.send_message(message.from_user.id, 'робот я'

# Если пользователь отправил "и чо?" отвечаем "да ничо"
elif message.text == "и чо?":
   bot.send_message(message.from_user.id, 'да ничо'

#Если пользователь отправил слово/фразу, на которое(ую) нет ответа
else:
   bot.send_message(message.from_user.id, "Извините, я Вас не понимаю")
</code>

Ничего в голову не пришло, помимо этого:
<code>
    if message.text in ['Елка','елка','едка','йолка']:
        bot.send_message(message.from_user.id,'''
        Что именно вас интересует о Ёлках?..и т.д.
        ''')
</code>


Как вывести Hex из 2's complement силами Python?
Есть такая задача:
Есть ID-шник: 10088363095792553999
Его hex очень даже легко найти: 0x8C0110C901E0100F. Получить эти данные тоже легко силами python:
<code>
value = 10088363095792553999
hex_value = hex(value)  # 0x8c0110c901e0100f
</code>
Онлайн калькулятор подсказывает, что из Hex'a его 2's complement будет "-8358380977916997617". Не знаю, можно ли тут выкладывать ссылки на сторонние ресурсы, но конвертер легко найти в гугле по запросу "Hexadecimal to Decimal converter".
Есть пробел: я не знаю, как питоном вывести из Хекса его 2's complement.
НО! Что самое тут нужное, это обратная операция: необходимо из значения его 2's complement (-8358380977916997617) силами Python получить обратно его хекс - 0x8c0110c901e0100f. Возможно ли это?

Вопрос уже довольно подробно раскрыт здесь.
Приведу рабочее решение для вашего примера:
<code>
def twos_complement(n, w):
    if n & (1 << (w - 1)):
        n = n - (1 << w)
    return n

def int2hex(number, bits):
    if number < 0:
        return hex((1 << bits) + number)
    return hex(number)

hex_value = '0x8c0110c901e0100f'
value = twos_complement(int(hex_value, 16), 64)
print(value)  # -8358380977916997617

print(int2hex(value, 64))  # 0x8c0110c901e0100f
</code>


Как вывести слова как указано в примере ниже, и как одинаковые слова выводить в одну строку как в примере?
Задание:
Напишите регулярное выражение, которое позволяет выделить все строки, отвечающие условиям:

Состоят только из букв
Одна и только одна из букв является заглавной

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

"Мама",

"авТо",

"гриБ",

'Яблоко', 'яБлоко', 'ябЛоко', 'яблОко', 'яблоКо', 'яблокО'

Решение:

arr = ["Три богатыря", "Мама", "авТо", "гриБ", "Яблоко", "Focus 12", "агент007", "стриж", "ГТО", "Три богатыря", "234", "яБлоко", "Focus13", "Zero", "this", "Men", "TESLA"]

for x in arr:

    c = re.findall(r"(^[а-яёa-z]*[А-ЯЁA-Z][а-яёa-z]*)$", x)

    print(*c, end=",")

Вывод:

,Мама,авТо,гриБ,Яблоко,,,,,,,яБлоко,,Zero,,Men,,

Нужные элементы можно найти с помощью регулярного выражения
[а-яёa-z]*[А-ЯЁA-Z][а-яёa-z]* и метода
re.fullmatch(), а сгруппировать найденные одинаковые слова с помощью словаря. Для формирования требуемого вывода можно использовать
join().

import re

arr = ["Три богатыря", "МаVа", "авТо", "гриБ", "Яблоко", "Focus 12", "агент007", "стриж", "ГТО", "Три богатыря", "234",
       "яБлоко", "Focus13", "Zero", "this", "Men", "TESLA"]
pat = re.compile(r'[а-яёa-z]*[А-ЯЁA-Z][а-яёa-z]*')
d = {}
for s in arr:
    x = re.fullmatch(pat, s)
    if x is not None:
        d.setdefault(s.lower(), []).append(s)

print(',\n'.join(','.join(v) for v in d.values()))

авТо,
гриБ,
Яблоко,яБлоко,
Zero,
Men


Проблема с заморозкой цикла
Суть вопроса в следующем - функция main постоянно проверяет базу данных на предмет изменения значений. Далее при определённом условии должна запускать функцию logic. Она её запускает, но в тот же момент идёт заморозка цикла while true. Как сделать игнорирование await и при выполнении условия не замораживать цикл, а запустить функцию и дальше проверять бд по циклу?
P.S. Функция logic обязательно должна быть async, т.к. там используется pyrogram
<code>
     async def main():
        logger.info('')
        dbase.until_start_bot()
        in_process = list()
        while True:
            result = dbase.search_in_queue()
            if result is not None:
                ignoring_flag = False
                for res in in_process:
                    if res == result[1]:
                        ignoring_flag = True

                if not ignoring_flag:
                    in_process.append(result[1])
                    await logic(result)
                else:
                    pass

    async def logic(result):
         """Continue"""
        pass
</code>

Если цикл должен продолжаться, вы можете использовать внутри
logic() бэкграунд-задачу. Как пример, запустить в отдельном треде:

from threading import Thread

def some_func(in_process):
    ...
    # в конце удалить результат из in_process

async def logic(in_process):
    t = Thread(target=some_func, args=[in_process])
    t.start()

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


Вывести каждое слово из файла с новой строки в терминал
Я хочу каждое слово в тексте вывести отдельно на новой строке. Например, у меня есть файл 1.txt, в котором записан текст в строки. Написал код, но не могу понять в чем проблема
<code>
user = input('Введите полный путь к файлу:')
file = open(user, 'r+', encoding='utf-8')
print(*file.split(" "))
file.close()
</code>

user = input('Введите полный путь к файлу:')
file = open(user, 'r+', encoding='utf-8')
print(*file.read().split(" "), sep='\n')
file.close()

Пояснение:

Не
file.split(" "), а
file.read().split(" ")
Добавьте перенос строки в print:
print(..., sep='/n')

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

source_filename = input('Введите путь к файлу: ')
target_filename = input('Имя файла куда сохранить: ')

with open(source_filename, 'r') as f:
    words = '\n'.join(f.read().split())

with open(target_filename, 'w') as f:
    f.write(words)


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

Скорее всего на сервере понадобится установка не только селениум, но и браузера и вебдрайвера. К тому же понадобится виртуальный графический сервер потому что многие сайты не парсятся  в хедлесс режиме.
В итоге - сделать можно, но нужен сервер с возможностью установить это всё.
Или windows сервер или запускать Xvnc на Линукс. В случае с Линукс можно обрабатывать несколько запросов одновременно.
И лучше разделить фласк и селениум на разные проекты. Пусть селениум забирает задания из очереди и запускается отдельно.


Как не вписывать форму в каждый шаблон html и унаследовать ее с помощью extends? Django
Как мне сделать так чтоб на каждой странице была эта форма, но при этом не вписывать в каждый view одно и то же? Чтобы сделать эту форму на 4 шаблона я вставил в каждый view одинаковый код. Как этого можно избежать?
Forms.py

class FeedbackForm(ModelForm):
    class Meta:
        model = Feedback
        fields = ['feedback_name', 'feedback_email', 'feedback_text']

        widgets = {
            "feedback_name": TextInput(attrs={'class': 'form-control', 'placeholder':'Имя'}),
            "feedback_email": TextInput(attrs={'class': 'form-control', 'placeholder': 'Ваша почта'}),
            "feedback_text": Textarea(attrs={'class': 'form-control', 'placeholder':'Сообщение'}),
        }

html

<form method="post">
   {% csrf_token %}
   {{ form.feedback_name }}<br>
   {{ form.feedback_email }}<br>
   {{ form.feedback_text }}<br>
   <button class="btn btn-success" type="submit">Отправить</button>
</form>

views.py

def creators(request):
    games = Games.objects.all()
    if request.method == 'POST':
        form = FeedbackForm(request.POST)
        if form.is_valid():
            form.save()

    form = FeedbackForm()

    data = {
        "games": games,
        "form": form,
    }
    return render(request, 'creators.html',data)

Попробуй вынести логику функции creators в отдельную функцию(типа get_feedback_form). Далее импортируй эту функцию в свои 4 views, а затем используй, вызывая get_feedback_form с аргументами. Дальше тебе остается только отрендерить шаблон


Как работает эта рекурсия в пайтон?

def sum(list):
    if list == []:
        return 0
    else:
        return list[0] + sum(list[1:])

print(sum([1,2,3]))

пожалуй самый главный вопрос это - что делает двоеточие в вызове функции?
+ sum(list[1:])
там где
1:

def sum(list):
    ...
    return list[0] + sum(list[1:])

Дополню всё же, что по сути рекурсия тут сводится к такой формуле

сумма(список) = первый элемент списка + сумма(остальные элементы списка)

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


Как сложить значения в checkbox?
Вопрос в том, как в
def count разумно посчитать сумму в чекбоксах? Вариант, как у меня через
if кажется долгим и неразумным.
Мой код:

import tkinter
import tkinter.messagebox

class MyGUI:
    def __init__(self):
        self.root = tkinter.Tk()
        self.root.title("Подсчет работ")
        # делаем рамки
        self.frame_1 = tkinter.Frame(self.root)
        self.frame_2 = tkinter.Frame(self.root)
        self.frame_3 = tkinter.Frame(self.root)
        self.frame_4 = tkinter.Frame(self.root)
        self.frame_5 = tkinter.Frame(self.root)
        self.frame_6 = tkinter.Frame(self.root)
        self.frame_7 = tkinter.Frame(self.root)
        self.frame_8 = tkinter.Frame(self.root)
        #закрываем рамки

    # задаем чек боксы?
    self.cb_var1 = tkinter.IntVar()
    self.cb_var2 = tkinter.IntVar()
    self.cb_var3 = tkinter.IntVar()
    self.cb_var4 = tkinter.IntVar()
    self.cb_var5 = tkinter.IntVar()
    self.cb_var6 = tkinter.IntVar()
    self.cb_var7 = tkinter.IntVar()
    # выбираем позицию чекбокса
    self.cb_var1.set(0)
    self.cb_var2.set(0)
    self.cb_var3.set(0)
    self.cb_var4.set(0)
    self.cb_var5.set(0)
    self.cb_var6.set(0)
    self.cb_var7.set(0)
    # первая рамка
    self.cb1 = tkinter.Checkbutton(self.frame_1,
                                   text="Замена масла - 500 ",
                                   variable=self.cb_var1)
    self.cb1.pack(side="left")
    # вторая рамка
    self.cb2= tkinter.Checkbutton(self.frame_2,
                                   text="Смазочные работы - 300",
                                   variable=self.cb_var2)
    self.cb2.pack(side="left")
    # третья рамка
    self.cb3 = tkinter.Checkbutton(self.frame_3,
                                   text="Промывка радиатора - 700",
                                   variable=self.cb_var3)
    self.cb3.pack(side="left")
    #четвертая рамка
    self.cb4 = tkinter.Checkbutton(self.frame_4,
                                   text="Замена жидкости в трансмисии = 1000",
                                   variable=self.cb_var4)
    self.cb4.pack(side="left")
            # пятая рамка
    self.cb5 = tkinter.Checkbutton(self.frame_5,
                                   text="Осмотр - 800",
                                   variable=self.cb_var5)
    self.cb5.pack(side="left")
    # шестая рамка
    self.cb6 = tkinter.Checkbutton(self.frame_6,
                                   text="Замена глушителя выхлопа - 1300",
                                   variable=self.cb_var6)
    self.cb6.pack(side="left")
    #седьмая рамка
    self.cb7 = tkinter.Checkbutton(self.frame_7,
                                   text="Перестановка шин - 1300",
                                   variable=self.cb_var7)
    self.cb7.pack(side="left")

    # 8 рамка с кнопками
    self.button_value = tkinter.Button(self.frame_8,
                                       text="Показать сумму",
                                       command=self.do_count)
    self.button_quit = tkinter.Button(self.frame_8,
                                      text="Выйти",
                                      command=self.root.quit)
    self.button_value.pack(side="left")
    self.button_quit.pack(side="left")
    self.frame_1.pack()
    self.frame_2.pack()
    self.frame_3.pack()
    self.frame_4.pack()
    self.frame_5.pack()
    self.frame_6.pack()
    self.frame_7.pack()
    self.frame_8.pack()
    tkinter.mainloop()
def do_count(self):
    self.message = "Ваши затраты:"
    if self.cb_var1.get() == 1:
        self.message = "Ваши затраты:" + "500 р"
    elif self.cb_var2.get() == 1:
        self.message = "Ваши затраты:" + "300 р"
    elif self.cb_var3.get() == 1:
        self.message = "Ваши затраты:" + "700 р"
    elif self.cb_var4.get() == 1:
        self.message = "Ваши затраты:" + "1000 р"
    elif self.cb_var5.get() == 1:
        self.message = "Ваши затраты:" + "800 р"
    elif self.cb_var6.get() == 1:
        self.message = "Ваши затраты:" + "1300 р"
    elif self.cb_var7.get() == 1:
        self.message ="Ваши затраты:" + "1300 р"
    if  self.cb_var1.get() and self.cb_var2.get() == 1:
        self.message ="Ваши затраты:" + "800 р"
    if  self.cb_var1.get() and self.cb_var3.get() == 1:
        self.message ="Ваши затраты:" + "1200 р"
    if  self.cb_var1.get() and self.cb_var4.get() == 1:
        self.message ="Ваши затраты:" + "1500 р"
    if  self.cb_var1.get() and self.cb_var5.get() == 1:
        self.message ="Ваши затраты:" + "1300 р"
    if  self.cb_var1.get() and self.cb_var6.get() == 1:
        self.message ="Ваши затраты:" + "1800 р"
    if  self.cb_var1.get() and self.cb_var7.get() == 1:
        self.message ="Ваши затраты:" + "1800 р"

    if self.cb_var1.get() and self.cb_var2.get() and self.cb_var3.get() == 1:
        self.message ="Ваши затраты:" + "1500 р"
    tkinter.messagebox.showinfo("Общая Стоимость",self.message)

my_gui=MyGUI()

Думаю так будет удобнее.
<code>
def do_count(self):
    self.message = 0
    fields = {self.cb_var1 : 500,
              self.cb_var2 : 300,
              self.cb_var3 : 700,
              self.cb_var4 : 1000,
              self.cb_var5 : 800,
              self.cb_var6 : 1300,
              self.cb_var7 : 1300}

    for field, cost in fields.items():
        if field.get() == 1:
            self.message += cost
    tkinter.messagebox.showinfo("Выбор", self.message)
</code>


Изменить значение в списке с помощью словаря
Список формата:

dates = ['3/января/2022', '10/февраля/2022', '17/марта/2022']

и словарь с месяцами:

months = {'января': '01', 'февраля': '02', 'марта': '03'}

Чтобы итоговый результат был

['3/01/2022', '10/02/2022', '17/03/2022']

Самое простое - наверное, так:

dates = ['3/января/2022', '10/февраля/2022', '17/марта/2022']

months = {'января': '01', 'февраля': '02', 'марта': '03'}

changed_dates = [date.replace(key, value)
                 for date in dates
                 for key, value in months.items()
                 if key in date]

print(changed_dates)

Вывод:

['3/01/2022', '10/02/2022', '17/03/2022']


Упрощение выражения с помощью list comprehenshions
Возможно ли сделать всё это в одной строчке в виде list comprehension?
<code>
field = [["1" for _ in range(2)] for _ in range(5)]
for a in range(5):
    field[a].insert(random.randint(0, 2), "0")
</code>

можно сразу заготовить все три варианта и выбирать случайный
<code>
field = [list(['110', '101', '011'][random.randint(0, 2)]) for _ in range(5)]
</code>


Как разделить строку методом re.split по шаблону сепаратора re. выражения?

import re

string = 'м/к 6м 07.11.17 3м 30.05.18 м/к 6м 28.04.21/конс.п/тер 13.07.21 м/к 6мес 08.11.21 м/к 6мес (1ф) 13.05.22'

re.split(r"(\d{2}.\d{2}.\d{2,4}[;\s]?)", string)

У меня получается так:

['м/к 6м 07', '11.17 3', 'м 30', '05.18 ', 'м/к 6м 28', '04.21/', 'конс.п/тер 13', '07.21 ', 'м/к 6мес 08', '11.21 ', 'м/к 6мес (1ф) 13.05.22']

Мне необходимо получить список такого содержания

['м/к 6м 07.11.17', '3м 30.05.18', 'м/к 6м 28.04.21', 'конс.п/тер 13.07.21', 'м/к 6мес 08.11.21', 'м/к 6мес (1ф) 13.05.22']

Строка должна быть разделена по дате, дата конец строки. Помогите решить эту задачу :)

Да в принципе даже с не экранированной точкой будет работать, если сделать наоборот поиск, а не разбиение, но добавить не-жадный шаблон для произвольной строки спереди и "хвост" убрать из скобок, чтобы не захватывался:

import re

string = 'м/к 6м 07.11.17 3м 30.05.18 м/к 6м 28.04.21/конс.п/тер 13.07.21 м/к 6мес 08.11.21 м/к 6мес (1ф) 13.05.22'

re.findall(r"(.*?\d{2}.\d{2}.\d{2,4})[;\s]?", string)

На выходе:

['м/к 6м 07.11.17 ',
 '3м 30.05.18',
 'м/к 6м 28.04.21',
 '/конс.п/тер 13.07.21 ',
 'м/к 6мес 08.11.21',
 'м/к 6мес (1ф) 13.05.22']

Для более произвольного количества цифр в числах можно так, но точку тогда лучше всё-таки экранировать:

re.findall(r"(.*?\d+\.\d+\.\d+)[;\s]?", string)


База данных SQLite3 python
Имеется бд(SQLite) и яп python. в бд есть столбец с user_id и 7 столбцов с данными. Нужно у всех пользователей переместить данные на 1 столбец влево(1 столбец чистим, из 2 столбца в 1 столбец, из 3 столбца во 2 и т.д.). Это нужно сделать программно т.к. нужно делать регулярно по времени. Вопрос заключается в том, что можно ли как-то перекинуть сразу все или надо отдельно у каждого пользователя перезаписывать данные?

Попробуйте через запрос
UPDATE сделать присваивание столбцам
Вместо
table_name название вашей таблицы. Вместо
column1-
column7 названия ваших столбцов. В
... продолжаете перебор присваивания. Вместо
null может быть другое значение, соответствующее столбцу, если его значение обязательное
Пример:

UPDATE table_name
SET column7 = column6, column6 = column5, ..., column2 = column1, column1 = null


Что делаю не так в реализации задания?
<code>
def cost_delivery(factor, *quantities, discount=0):
result = 5
for quantity in quantities:
    result += quantity * factor
result = result - discount
return quantity

print(cost_delivery(10, 1, 2, 3, discount=0.5))
</code>
Онлайн-магазин "У Бобра" предоставляет услугу экспресс доставки своих товаров по цене 5¤ за первый товар в заказе и 2¤ - за все последующие товары. Необходимо реализовать функцию, принимающую в качестве первого параметра количество товаров в заказе quantity, но также должен присутствовать параметр, передаваемый только по ключу discount.
Параметр discount по умолчанию имеет значение 0 – скидки нет. Принимает значение от 0 до 1. Функция cost_delivery возвращает общую сумму за доставку товара с учетом скидки.
Следует предположить, что функция cost_delivery при вызове может принимать любое количество позиционных аргументов.
Пример:
cost_delivery(2, 1, 2, 3)
При таком вызове quantity равняется 2, а параметр discount по умолчанию имеет значение 0.
Подскажите где делаю ошибку. Потому что идейно выходит неправильно.Возможно задание не понял

Исходя из условий задачи должно быть вот так:
<code>
def cost_delivery(quantity, *args, discount=0):
    if discount >=0 and discount <= 1:
        if quantity >= 1:
            result = (quantity - 1) * 2 + 5
            result = result - result * discount
        else:
            result = 0
    else:
        raise Exception("The discount shouldn't be an less 0 or more 1")
    return result
</code>


Открыть новое окно нажав на ячейку в таблице QTableView
Мне понадобилось сделать приложение напоминающее медицинскую картотеку, это по сути мой первый проект и для реализации я выбрал PyQt6, ну и Qt Designer для большей простоты.
И я столкнулся с проблемой. Мне нужно создать как бы стартовое окно, в котором я смогу смотреть на список карточек пациентов, в этом проблемы я не вижу, я уже понял как подключить к объекту "
tableView" столбец с базы данных.
Но вот как сделать так, чтобы этот список представлял собой как бы список ссылок (или может добавить кнопки?) и чтобы при нажатии на одну из них открывалось новое окно с шаблоном заполненным данными взятыми из БД, проще говоря карточка пациента.
Я пытался найти решение, но не смог нагуглить что-то, что мне бы помогло.
Вот пример моего кода, это код из основного файла, в нем я практически ничего еще не реализовал, только к кнопке подвязал открытие нового окна для создания новой записи в БД.
Файлов всего четыре, два из них сделаны программой Qt Designer (это те окна которые я сделал в этой программе) и в еще одной я подключил базу данных.

from PyQt6 import QtCore, QtGui, QtWidgets
from data_base import *
from MainForm import Ui_MainWindow
from case_record import Ui_Dialog

import sys

"""Создание екземляра класса QSqlTableModel, установки таблицы patients"""
Patients = QSqlTableModel()
Patients.setTable('patients')
Patients.select()

def otherWindow(): #Карточка пациента
    global Dialog
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()

def katalog(): #Главная страница со списком карточек
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()

    ui.pushButton.clicked.connect(otherWindow) #Подключение к кнопке открытия нового окна

    """Связывание таблици базы данных с обьектом 'tableView' и сортирока по столбцам"""
    ui.tableView.setModel(Patients)
    ui.tableView.setSortingEnabled(True)

    sys.exit(app.exec())

if __name__ == '__main__':
    katalog() #Main_window

И остальной код сгенерированный Qt Designer:

from PyQt6 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(561, 619)
        MainWindow.setAccessibleName("")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setGeometry(QtCore.QRect(10, 20, 541, 321))
        self.tableView.setObjectName("tableView")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(420, 540, 131, 23))
        self.pushButton.setObjectName("pushButton")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 400, 101, 21))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(10, 430, 101, 21))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(10, 460, 101, 21))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        self.label_7.setGeometry(QtCore.QRect(10, 490, 101, 21))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_4.setGeometry(QtCore.QRect(110, 400, 131, 21))
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_5.setGeometry(QtCore.QRect(110, 430, 131, 21))
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.lineEdit_6 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_6.setGeometry(QtCore.QRect(110, 460, 131, 21))
        self.lineEdit_6.setObjectName("lineEdit_6")
        self.lineEdit_7 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_7.setGeometry(QtCore.QRect(110, 490, 131, 21))
        self.lineEdit_7.setObjectName("lineEdit_7")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(60, 530, 101, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 561, 21))
        self.menubar.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.DefaultContextMenu)
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Картотека"))
        self.pushButton.setText(_translate("MainWindow", "Cтворити нову картку"))
        self.label_4.setText(_translate("MainWindow", "Назва вулиці"))
        self.label_5.setText(_translate("MainWindow", "Будинок"))
        self.label_6.setText(_translate("MainWindow", "Паціент"))
        self.label_7.setText(_translate("MainWindow", "Керивник"))
        self.pushButton_2.setText(_translate("MainWindow", "Пошук"))
        self.menubar.setAccessibleName(_translate("MainWindow", "fff"))
#---------------------------------------------------------------------------
from PyQt6 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(537, 619)
        font = QtGui.QFont()
        font.setPointSize(8)
        Dialog.setFont(font)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(10, 10, 31, 31))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(50, 230, 211, 31))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.label_2.setFont(font)
        self.label_2.setStyleSheet("background-color: rgb(234, 255, 205);")
        self.label_2.setObjectName("label_2")
        self.textEdit_2 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_2.setGeometry(QtCore.QRect(50, 270, 441, 161))
        self.textEdit_2.setObjectName("textEdit_2")
        self.comboBox = QtWidgets.QComboBox(Dialog)
        self.comboBox.setGeometry(QtCore.QRect(80, 20, 69, 22))
        self.comboBox.setObjectName("comboBox")
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(150, 20, 221, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.label_3 = QtWidgets.QLabel(Dialog)
        self.label_3.setGeometry(QtCore.QRect(390, 20, 81, 21))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.lineEdit_2 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_2.setGeometry(QtCore.QRect(470, 20, 31, 21))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_4 = QtWidgets.QLabel(Dialog)
        self.label_4.setGeometry(QtCore.QRect(30, 70, 121, 21))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.lineEdit_3 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_3.setGeometry(QtCore.QRect(150, 70, 371, 21))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.label_5 = QtWidgets.QLabel(Dialog)
        self.label_5.setGeometry(QtCore.QRect(150, 100, 71, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.textEdit_3 = QtWidgets.QTextEdit(Dialog)
        self.textEdit_3.setGeometry(QtCore.QRect(220, 110, 301, 41))
        self.textEdit_3.setObjectName("textEdit_3")
        self.label_6 = QtWidgets.QLabel(Dialog)
        self.label_6.setGeometry(QtCore.QRect(130, 160, 41, 20))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.lineEdit_4 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_4.setGeometry(QtCore.QRect(180, 160, 131, 21))
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.lineEdit_5 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_5.setGeometry(QtCore.QRect(180, 190, 131, 21))
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.label_7 = QtWidgets.QLabel(Dialog)
        self.label_7.setGeometry(QtCore.QRect(330, 160, 41, 20))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.label_8 = QtWidgets.QLabel(Dialog)
        self.label_8.setGeometry(QtCore.QRect(330, 190, 41, 20))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")
        self.lineEdit_6 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_6.setGeometry(QtCore.QRect(370, 160, 131, 21))
        self.lineEdit_6.setObjectName("lineEdit_6")
        self.lineEdit_7 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_7.setGeometry(QtCore.QRect(370, 190, 131, 21))
        self.lineEdit_7.setObjectName("lineEdit_7")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(400, 560, 101, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")

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

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "№"))
        self.label_2.setText(_translate("Dialog", "Загальна характеристика"))
        self.label_3.setText(_translate("Dialog", "Будинок №"))
        self.label_4.setText(_translate("Dialog", "Принадлежність"))
        self.label_5.setText(_translate("Dialog", "Керівник"))
        self.label_6.setText(_translate("Dialog", "моб."))
        self.label_7.setText(_translate("Dialog", "Р.Т."))
        self.label_8.setText(_translate("Dialog", "Д.М."))
        self.pushButton.setText(_translate("Dialog", "Зберегти"))

Допустим, в таблице БД "Patients" (а значит и в соответствующей модели QSqlTableModel) первый столбец является идентификатором карты пациента. На случай если мы пожелаем скрыть этот столбец, выполним код:

ui.tableView.hideColumn(0)

Привяжем к сигналу doubleClicked функцию-обработчик:

ui.tableView.doubleClicked.connect(load_patientcard)

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

def load_patientcard(index: QtCore.QModelIndex):
    patientcard_id = index.siblingAtColumn(0).data(QtCore.Qt.ItemDataRole.DisplayRole)
    otherWindow(patientcard_id)

def otherWindow(patientcard_id):
    query = QtSql.QSqlQuery(f"SELECT * FROM Diagnoses WHERE patient_id = {patientcard_id}")
    if query.exec():
        ...


Как получить значение атрибута value у элемента input строкой
При написании автотестов на python/selenium для сравнения в итоговом assert возникает необходимость получить значение атрибута value введенное в инпуте, как это сделать?

Мне помогла команда:
.get_attribute('value').
Пример для использования:

driver.find_element(By.NAME,"пароль").get_attribute('value')


Математическая переменная в Python
Можно ли создать такую числовую переменную,  значение которой можно будет объявить позже, либо вообще не объявлять? При этом она смогла бы свободно участвовать в математических выражениях, а ещё лучше, чтобы можно было бы определить её значение, с помощью уравнения.
Например если
x + 2 = 8, то
x = 6
Если это невозможно, то так и ответьте.

Решаем уравнения с помощью модуля sympy (устанавливаем с помощью команды
pip install sympy)

import sympy
from sympy.abc import x

# Если нужна какая-то нестандартная переменная, например, не однобуквенная,
# которой нет в модуле sympy.abc то создаете ее через sympy.symbol:
# wtf = sympy.symbol("wtf")

# Переносим все в одну сторону, чтобы с другой стороны получилось 0:
# x + 2 - 8 = 0
# Все что перенесли превращаем в функцию

func = x + 2 - 8

# Решаем уравнение func(x) = 0
results = sympy.solve(func)

# Выводим все корни
print(results)  # [6]

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

func = x ** 2 - 4
results = sympy.solve(func)
print(results)  # [-2, 2]

func = x ** 2 + 4
results = sympy.solve(func)
print(results)  # [-2*I, 2*I]


найти минимальный элемент в каждой строке двумерного массива
нужно найти минимальный элемент в каждой строке матрицы, я нахожу только один по всей матрице? как найти остальные и вывести их индексы и само значение?
<code>
import numpy as np
row = 5
a=np.array ([[0, 2.4, -6, 5, 0.8],
             [1.5, 0, 0, -4.3, -3.5],
             [0, 1.8, 3.2, -1.2, -1.3],
             [0, 0, -2.3, 0, -7.2],
             [3.3, -0.8, 0, 3.5, 8]])
min = np.min(a)
max = np.max(a)
for i in range(row):
    for j in range(row):
        if(a[i][j]<min):
            min=a[i][j]
        elif(a[i][j]>max):
            max=a[i][j]
print(min)
</code>

Вы же используете numpy. Ну так и воспользуйтесь его инструментарием:

import numpy as np

a=np.array ([[0, 2.4, -6, 5, 0.8],
             [1.5, 0, 0, -4.3, -3.5],
             [0, 1.8, 3.2, -1.2, -1.3],
             [0, 0, -2.3, 0, -7.2],
             [3.3, -0.8, 0, 3.5, 8]])
res = a.min(axis=1)
print(res)

[-6.  -4.3 -1.3 -7.2 -0.8]

параметр
axis указывает, где искать минимумы - 0 - строки, 1 - столбцы


Django. Статистика на сайте цитат
Есть проект - сайт, в котором пользователи могут постить цитаты, указывать автора цитаты и добавлять к ним категории. Смысл в том, что это будет сайт для ограниченного числа людей, поэтому определенные юзеры уже будут указаны в базе данных, то есть фиксированное число пользователей, больше не будет. Эти то юзеры и будут авторами данных цитат, а также редакторами: один человек что-то сказал(автор цитаты), второй(редактор цитаты) это запостил на сайте и указал автора. Так вот, мне бы хотелось иметь связь между Автором(не редактором) и цитатой, к которой его отнесли. Идея такая, чтобы у определенного юзера имелась статистика, в которой есть информация о том, к какой Категории цитат чаще приписывают Автора. Например, из категорий цитат "любовь", "смех" и "грусть" меня бы чаще заносили в Категорию "смех", ведь я чаще шучу, соответственно, цитаты на сайте, скорее всего, имели бы похожую категорию.
<code>
from django.db import models
from author.models import Profile

class QuotesHonors(models.Model):
    quotes = models.TextField()
    editor = models.ForeignKey(Profile, on_delete=models.DO_NOTHING,
                               related_name='quotes_editor')
    author = models.ForeignKey(Profile, on_delete=models.DO_NOTHING,
                               related_name='quotes_author')
    category = models.ManyToManyField('Category', related_name='quotes_category')
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self) -> str:
        return str(self.quotes[:30])

class Category(models.Model):
    title = models.CharField(max_length=150, db_index=True)

    def __str__(self) -> str:
        return str(self.title)

class Like(models.Model):
    user = models.ForeignKey(Profile, on_delete=models.CASCADE,
                             related_name='user_like')
    quotes = models.ForeignKey(QuotesHonors, on_delete=models.CASCADE, related_name='quotes_like')
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

class Comment(models.Model):
    user = models.ForeignKey(Profile, on_delete=models.CASCADE,
                             related_name='user_comment')
    quotes = models.ForeignKey(QuotesHonors, on_delete=models.CASCADE, related_name='quotes_comment')
    body = models.TextField(max_length=300)
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

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

class Profile(models.Model):
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    email = models.EmailField(max_length=250, blank=True)
    # avatar = models.ImageField(default='avatars/gosling.jpg', upload_to='avatars/')
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self) -> str:
        return str(self.first_name) + ' ' + str(self.last_name)
</code>

Давно не писал запросы в DjangoORM, но, что-то близкое к вашему решению будет выглядеть так:
предположим, что
user это объект модели
Profile, тогда
запрос
user.quotes_author.all() вернет вам
QuerySet из всех цитат пользователя. Tак как нам нужно узнать какая категория пользуется популярностью, добавим в выборку только интересующее нас поле:

user.quotes_author.all().values('category')
Далее, подсчитаем количество цитат в каждой категории и отсортируем по убыванию:

from django.db.models import Count
user.quotes_author.all().values('category').annotate(total=Count('category')).order_by('total')

В результате вернется
QuerySet с категориями, отсортированными по убыванию, т.е. самая популярная будет на 0 позиции. Можно получить ее сразу, добавив
.first() метод к запросу.
Более подробно про
values почитать тут, про
annotate тут, а про
Count - тут.


for для прохождение всех списков в списке (Python)
Есть функция проверки победителя, которая вызывается из другой функции, при прохождение цикла for берется только 1 список из всех, а остальные не прогоняет. Не могу разобраться почему
<code>
box = [1, 2, 3, 4, 5, 6, 7, 8, 9]
win_combination = [(1, 2, 3), (4, 5, 6), (7, 8, 9), (1, 4, 7), (2, 5, 8), (3, 6, 9), (1, 5, 9), (3, 5, 7)]

def check_winner():
    for i in win_combination: # В ЭТОМ МЕСТЕ ОН БЕРЕТ ТОЛЬКО ПЕРВЫЙ СПИСОК ИЗ ВСЕХ(1, 2, 3)
        print(win_combination)
        print(i)
        if (box[i[0] - 1]) == (box[i[1] - 1]) == (box[i[2] - 1]):
            return box[i[1] - 1]
        else:
            return False

if count > 3:
    winner = check_winner()
    if winner:
        paint_box()
        return print(winner + " Выиграл")
        break
    count += 1
</code>

def check_winner():
    for i in win_combination:
        if (box[i[0] - 1]) == (box[i[1] - 1]) == (box[i[2] - 1]):# Условие проверки одинаковые ли 3 символа
            return box[i[0] - 1]


Умножить каждый элемент двумерного массива [закрыт]

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

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

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

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

есть такая матрица:
<code>
 import numpy as np
 a=np.array ([[0, 2.4, -6, 5, 0.8],
              [1.5, 0, 0, -4.3, -3.5],
              [0, 1.8, 3.2, -1.2, -1.3],
              [0, 0, -2.3, 0, -7.2],
              [3.3 -0.8, 0, 3.5, 8]])
</code>
нужно сделать новую матрицу каждый элемент умножить на 5.9
и вывести массив на экран
так же нужно найти минимальный элемент каждой строчки матрицы и вывести его значение и индекс

У вас на самом деле проблема в другом - в пропущенной запятой вот здесь:

[3.3 -0.8, 0, 3.5, 8]])
   ^^^

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

b = a * 5.9

TypeError: can't multiply sequence by non-int of type 'float'

Из-за отсутствия запятой у вас сейчас получается массив из списков разной длины и не получается сделать нормальную
numpy матрицу - внутри массива
numpy по-прежнему лежат обычные питоновские списки, и вот именно их можно "умножать" только на целые числа. Но это всё-равно не то умножение, которое вы думаете.


Как сделать проверку на активного собеседника (анонимный чат)?
Есть данный код, хочу сделать проверку на активного собеседника, на данный момент если собеседник завершил чат бот ждет 120с, что сильно замедляет его работу.
<code>
from telethon import TelegramClient
from telethon.tl.functions.messages import GetAllStickersRequest
from telethon.tl.functions.messages import GetStickerSetRequest
from telethon.tl.types import InputStickerSetID
import random
import time
import string

api_id = 'id'
api_hash = 'hash'

from telethon import TelegramClient, events
client = TelegramClient('Desktop', api_id, api_hash)
client.start()

@client.on(events.NewMessage)
async def my_event_handler(event):
    sticker_sets = await client(GetAllStickersRequest(0))
    sticker_set = sticker_sets.sets[0]
    stickers = await client(GetStickerSetRequest(
    stickerset=InputStickerSetID(
        id=sticker_set.id, access_hash=sticker_set.access_hash)))

    if 'Собеседник найден ' in event.raw_text:
     await event.respond('Тест текст')
     time.sleep(120)
     await event.respond('/stop')
     time.sleep(0)

@client.on(events.NewMessage)
async def my_event_handler(event):
    if 'Вы закончили связь с вашим собеседником ' in event.raw_text:
        await event.respond('/next')
    elif 'Собеседник закончил с вами связь ' in event.raw_text:
        await event.respond('/next')

client.run_until_disconnected()
</code>

Вы применяете синхронный метод, в асинхронном процессе, что является неверным, т.к получается, что ждёт вся программа. Чтобы избежать этого сделайте вот так
<code>
from telethon import TelegramClient
from telethon.tl.functions.messages import GetAllStickersRequest
from telethon.tl.functions.messages import GetStickerSetRequest
from telethon.tl.types import InputStickerSetID
import random
import time
import string
import asyncio

api_id = 'id'
api_hash = 'hash'

from telethon import TelegramClient, events
client = TelegramClient('Desktop', api_id, api_hash)
client.start()

@client.on(events.NewMessage)
async def my_event_handler(event):
    sticker_sets = await client(GetAllStickersRequest(0))
    sticker_set = sticker_sets.sets[0]
    stickers = await client(GetStickerSetRequest(
    stickerset=InputStickerSetID(
        id=sticker_set.id, access_hash=sticker_set.access_hash)))

    if 'Собеседник найден ' in event.raw_text:
     await event.respond('Тест текст')
     await asyncio.sleep(120) # +++
     await event.respond('/stop')
     await asyncio.sleep(0)  # +++

@client.on(events.NewMessage)
async def my_event_handler(event):
    if 'Вы закончили связь с вашим собеседником ' in event.raw_text:
        await event.respond('/next')
    elif 'Собеседник закончил с вами связь ' in event.raw_text:
        await event.respond('/next')

client.run_until_disconnected()
</code>
Если помогло, то отметьте пожалуйста ответ верным.


Как по нажатию кнопки добавлять текст в форму?
У меня задача: реализовать кнопку 'добавить код'(как на этом сайте), нажимаешь на кнопку и в форму добавляется тег
<code></code>
Реализовать на HTML + Js не составило труда, вот

    <input type = "text" name = "text" id="text" value = "" />

<input type="submit" onclick="document.getElementById('text').value+='<code></code>'; return false;"
 value = "Добавить код" />

Но я не могу реализовать тоже самое на django
forms.py

    class AnswerForm(forms.ModelForm):
    class Meta:
        model = Answer
        fields = ['text']

class QuestionForm(forms.ModelForm):
    class Meta:
        model = Questions
        fields =['q_name','slug', 'q_cat' ,'q_text']

Шаблон(его часть)

<!--    форма для добавления вопроса(поста) на страницу-->
<form action="" method="post">
{% for f in q_form %}

    <p><label class="form-label" >{{f.label}}: </label> {{ f }}</p>

<div class="form-error">{{ f.errors }}</div>

{% endfor %}
    {% csrf_token %}
    <p><input type="submit" value="Задать вопрос"></p>

</form>
    {% else%}
    <h1>Зайдите на сайт</h1>
    {% endif %}

Правка по вопросу:
forms.py

class QuestionForm(forms.ModelForm):
class Meta:
    model = Questions
    fields =['q_name','slug', 'q_cat','q_text']

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['q_text'].widget.attrs.update({'id': 'text_test'})

Часть шаблона

    {% for f in q_form %}
<p><label  id='text_test' class="form-label" for="{{ f.id_form_label }}" >{{f.label}}: </label>{{ f }}</p>
{% endfor %}
<input class="test_one" type="submit" onclick="document.getElementById('text_test').innerHTML += html_to_insert.value+='<code></code>'; return false;"
 value = "Добавить код" />

Кнопка 'Добавить код', вместо того, чтобы добавить текст, ПУБЛИКУЕТ статью!!! Одним словом не работает

В целом - ничего не меняется, это также реализуется через
HTML + JS.
Единственное различие, что теперь поле
text находится внутри формы, которую генерирует
Django, и все сводится к нахождению этого
HTML-элемента через
JS.
Приведу одно из возможных решений:
Вы можете в классе формы дополнительно переопределить метод
__init__ и в нём конкретному полю модели назначить нужный вам
HTML-id, выглядит это так:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['text'].widget.attrs.update({'id': 'some_id'})

После чего, по аналогии с вашим примером, находить это поле по id, которое вы ему назначите, и работать с
HTML-кодом этого элемента через атрибут
innerHtml, примерно так:

document.getElementById('some_id').innerHTML += html_to_insert;


Как создать одну таблицу из двух Python?
Помогите, пожалуйста, разобраться как решить задачу Python 3!
Есть 2 таблицы, в которых идет подсчет сообщений, которые пишут пользователи в двух разных чатах. Реализовано как 2 dataframe.
<code>
d1= pd.DataFrame({'name': ['Маша', 'Юра', 'Витя'], 'Кол-во': [4, 2, 7]})
d2= pd.DataFrame({'name': ['Витя', 'Маша', 'Юра'], 'Кол-во': [8, 1, 4]})
</code>
Первый dataframe – первый чат:

Имя пользователя
Количество сообщений в чате

Маша
4

Юра
2

Витя
7

Второй dataframe – второй чат:

Имя пользователя
Количество сообщений в чате

Витя
8

Маша
1

Юра
4

Нужно 2 dataframe объединить в один, который будет содержать сведения о пользователе и их количествах сообщений в 2х разных чатах.
Результат имеет такой вид:

Имя пользователя
Количество сообщений в чате 1
Количество сообщений в чате 2

Витя
7
8

Маша
4
1

Юра
2
4

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

Основной метод -
merge() - объединяет фреймы по указанному ключевому столбцу. Плюс косметика для приведения в целевой вид.

d1 = pd.DataFrame({'Имя пользователя': ['Маша', 'Юра', 'Витя'], 'Количество сообщений в чате': [4, 2, 7]})
d2 = pd.DataFrame({'Имя пользователя': ['Витя', 'Маша', 'Юра'], 'Количество сообщений в чате': [8, 1, 4]})
out = d1.merge(d2, on='Имя пользователя', suffixes=(' 1', ' 2')).sort_values('Количество сообщений в чате 1', ascending=False)
print(out)

  Имя пользователя  Количество сообщений в чате 1  Количество сообщений в чате 2
2             Витя                              7                              8
0             Маша                              4                              1
1              Юра                              2                              4


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

import math

class FigureCalc:

    @staticmethod
    def tri_heron(a, b, c):
        semi_per = (a + b + c) / 2
        area = math.sqrt(semi_per * (semi_per - a) * (semi_per - b) * (semi_per - c))
        return area

    @staticmethod
    def tri_base(base, height):
        return (base * height) / 2

    @staticmethod
    def square_area(a):
        return a**2

    @staticmethod
    def rect_area(a, b):
        return a*b

    @staticmethod
    def area_calc_counter():
        pass

print(FigureCalc.tri_heron(3, 4, 5))
print(FigureCalc.tri_base(6, 7))
print(FigureCalc.square_area(7))
print(FigureCalc.rect_area(2, 6))
# print(FigureCalc.area_calc_counter())

6.0
21.0
49
12

По заданию нужен еще статический метод который будет считать сколько раз была высчитана площадь (кол-во срабатываний всех методов)
@staticmethod area_calc_counter():
ТЕ в ответе должно выйти:

6.0
21.0
49
12
4

Вопрос в том, как подсчитать кол-во срабатываний методов, если в статический метод нельзя передавать переменные по типу
counter и тп?
З.Ы.
__init__ отсутствует по заданию

С точки зрения архитектуры мне больше всего нравится такой вариант c декоратором:
<code>
import math

def count_calls(decor_func):
    def func(*args, **kwargs):
        FigureCalc.calc_counter += 1
        return decor_func(*args, **kwargs)
    return func

class FigureCalc:
    calc_counter = 0

    @staticmethod
    @count_calls
    def tri_heron(a, b, c):
        semi_per = (a + b + c) / 2
        area = math.sqrt(semi_per * (semi_per - a) * (semi_per - b) * (semi_per - c))
        return area

    @staticmethod
    @count_calls
    def tri_base(base, height):
        return (base * height) / 2

    @staticmethod
    @count_calls
    def square_area(a):
        return a ** 2

    @staticmethod
    @count_calls
    def rect_area(a, b):
        return a * b

    @staticmethod
    def area_calc_counter():
        return FigureCalc.calc_counter

print(FigureCalc.tri_heron(3, 4, 5)) # 6.0
print(FigureCalc.tri_base(6, 7)) # 21.0
print(FigureCalc.square_area(7)) # 49
print(FigureCalc.rect_area(2, 6)) # 12
print(FigureCalc.area_calc_counter()) # 4
</code>


не понимаю как сделать загрузку и отправку информации в телеграмм боте
Я хочу сделать телеграмм бота-скупку, и суть заключается в том, чтобы пользователь (продавец) зашёл в телеграмм бот, отправил туда информацию (фото, номер набора, пометки, цену), и вся эта информация отправлялась администратору бота в одном сообщение.
Как сделать так, чтобы эта информация куда-то сохранялась, и как ее дальше использовать?

Думаю, тебе пригодится какая-то база данных (sqlite3 например), и FSM, если планируешь получать сообщения по очереди


Как найти координаты конца отрезка, зная начальную точку, длину отрезка и координаты направления? [закрыт]

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

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

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

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

Имеется начальная точка
[x,y], длина отрезка
l и направляющая
[x1,y1].
Как найти координаты конечной точки отрезка
[x2,y2]?

Создать направляющий вектор (из условия не совсем понятно, является
направляющая точкой или вектором )

d = end - start

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

ud = d / Length(d)

Добавить к начальной точкe произведение
l и нормированного вектора

 p = start + l * ud