• Как сделать бесконечную стрельбу в pygame?

    @o5a
    Проблема в том, что событие нажатия на кнопку срабатывает только в момент нажатия. Так что если просто держать пробел, то в каждом последующем цикле событие нажатия не срабатывает, но флаг fire сбрасывается в False каждый цикл, поэтому стрельба останавливается.
    Можно флаг fire привязать к самому кораблю как аттрибут, т.е. в __init__
    self.fire = False
    И в событиях работать именно с атрибутом класса, а не передавать отдельную переменную fire.
    def check_keydown_events(event, ship, settings, screen, bullets):
        if event.key == pygame.K_LEFT:
            # left arrow keydown events
            ship.move_left = True  # moves ship left when key's keeping pressed
        if event.key == pygame.K_RIGHT:
            # right arrow keydown events
            ship.move_right = True  # moves ship right when key's keeping pressed
        if event.key == pygame.K_DOWN:
            # down arrow keydown events
            ship.move_down = True  # moves ship down when key's keeping pressed
        if event.key == pygame.K_UP:
            # up arrow keydown events
            ship.move_up = True  # moves ship up when key's keeping pressed
        if event.key == pygame.K_SPACE:
            ship.fire = True

    Аналогично изменить в функции отпускания кнопки.
    Но т.к. событие нажатия не срабатывает повторно каждый цикл, то и само создание новых пуль не будет работать в той функции, так что ее нужно перенести туда, где срабатывает каждый цикл, например в тот же check_events
    def check_events(ship, settings, screen, bullets):
        """main event checker function"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                # working on keydown events
                check_keydown_events(event, ship, settings, screen, bullets)
                # function that checks keydown event type and works according event type
            elif event.type == pygame.KEYUP:
                check_keyup_events(event, ship)
                # function that checks keyup event type and works according event type
        print(len(bullets))  # to check amount of bullets on screen
        if ship.fire and len(bullets) < settings.bullets_allowed:
            # continues firing until amount of bullets reaches limit
            new_bullet = Bullet(settings, ship, screen)  # creating new bullet
            bullets.add(new_bullet)  # adding created bullet to Group
    Ответ написан
    3 комментария
  • Как склеить csv файлы?

    @o5a
    wowilon, чтобы этот код работал, файлы должны быть однотипные, с одинаковым количеством столбцов. В коде ошибки он как раз и указывает, что в одних файлах 2 столбца, в других 3.
    Если уверены, что файлы одинаковой структуры, можете проверить соответствие разделителя столбцов. В библиотеках для работы csv и pandas в том числе по умолчанию используется запятая, в то время как в русской локали по умолчанию используется точка с запятой. Если в ваших csv точка с запятой, то надо явно указать в параметре:
    combined_csv = pd.concat([pd.read_csv(f, sep=";") for f in all_filenames ])
    Ответ написан
    Комментировать
  • Не меняется размер текста в Pillow, что делать?

    @o5a
    font = headline
    Ответ написан
    Комментировать
  • Как обработать нажатие кнопки во время работы цикла?

    @o5a
    Не надо использовать свои циклы, чтобы не вызывать конфликт с циклом tkinter. Для запуска по времени есть root.after(время в мс, функция), через нее же можно и цикл сделать.
    def something():
        if check != 0:
            # какие-то вычисления
            root.after(1000, something)
    
    # для запуска самого цикла из основного кода программы
    root.after(0, something)
    Ответ написан
    Комментировать
  • Как записать разные типы данных с помощью Python в таблицу SQL?

    @o5a
    Это делается через подстановку значений
    insert_query = """ INSERT INTO postgreetest_db (t1, t2, t3, t4, t5, t6, t7) VALUES (%s, %s, %s, %s, %s, %s, %s)"""
    cursor.execute(insert_query, resultat)
    Ответ написан
    7 комментариев
  • Как мне отправить все картинки из папки через бота на питоне?

    @o5a
    Потому что в msg.photo содержится не одно, а список вариантов с разными разрешениями. Так что сначала нужно выбрать нужное. Например так
    photo = max(msg.photo, key=lambda x: x.height)
    file_id = photo.file_id

    P.S. хотя я упустил, что ругается на 'NoneType', т.е. информации о фото вообще нет (msg.photo = None), причина еще в чем-то
    Ответ написан
  • Почему горячая клавиша не привязывается к методу?

    @o5a
    Нажатие модификаторов по-другому определяется, через event.state
    ctrl  = (event.state & 4) != 0 # признак нажатия Ctrl
    Ответ написан
    2 комментария
  • Как удалить экземпляр класса?

    @o5a
    Если речь про то, чтобы при нажатии удалять кнопки, то нужно использовать метод destroy()
    Но для этого где-то нужно сохранять эти созданные в init кнопки, сейчас они никуда не привязаны.
    Например
    self.bt = Button(root, text="gg", command=self.a)
    # и потом для удаления можно будет сделать
    self.bt.destroy()

    Или же унаследовать этот класс кнопки, чтобы сам объект был кнопкой
    class But(Button):
        def __init__(self,root,coords):
            super().__init__(root, text="gg", command=self.a)
            self.grid(row=1, column=coords)
        def a(self):
            print("bt")
            self.destroy()
    Ответ написан
  • Как найти пользователя в БД Sqlite3 Python?

    @o5a
    Почитайте основы SQL (например https://proglib.io/p/sql-for-20-minutes)

    Для получения информации там есть своя система фильтров. В данном случае просто
    cur.execute("SELECT * FROM users WHERE id = ?", (id, ))
    all = cur.fetchone()

    в all будет запись с этим пользователем, если есть, или None, если отсутствует.
    или так
    cur.execute("SELECT COUNT(*) FROM users WHERE id = ?", (id, ))
    cnt = cur.fetchone()[0]
    в cnt будет кол-во записей с этим пользователем, т.е. 1 если есть, 0 если нет.
    Ответ написан
    Комментировать
  • Что изучить чтобы переписать часть библиотеки ecdsa в python3?

    @o5a
    Найти в исходных кодах библиотеки начальные элементы, в данном случае
    SigningKey и SECP256k1 и взять их код, и всего, что еще они будут использовать.
    Насколько вижу 1-й это класс из keys.py, 2-й - объект класса Curve из curves.py
    Ответ написан
    2 комментария
  • Python CSV Upgrade?

    @o5a
    Не нужно выдумывать "обновление" содержимого файла, так не работает. Для замены значения в CSV полностью его считываете во вложенный список/словарь, находите нужную строку (по id или еще чему нужно), заменяете в значение в этом списке. И уже после этого полностью перезаписываете файл этим новым списком. Т.е. условно
    data = get_all()
    затем аналогично get_by_id() ищем нужную запись в этом массиве и заменяем ее на новую, получаем обновленный вложенный список data
    обновленный массив записываем назад в файл: write(data)

    Для работы с CSV вместо ручного разбиения по символам есть родная библиотека csv, там есть уже более специализированные методы (с выбором различных параметров: символ разделителя, экранирование кавычек и т.п.)
    Ответ написан
    Комментировать
  • Как скопировать папку в новую директорию с наименованием числа?

    @o5a
    for n in range(100):
        folder_name = f"User{n}"
        # используем нашу folder_name для копирования
    Ответ написан
    Комментировать
  • Ошибка в sqlite3 python?

    @o5a
    Для tik не использован fetchone(), так что в него запишется сам курсор, а не его данные. Но даже в таком случае он текстом должен был написать что-то типа <sqlite3.Cursor ...а не просто пустую строку.
    Лучше сделать этот кусок так:
    ...
          user_info = sql.execute(f"SELECT tiktok, cash from users WHERE login = '{message.from_user.id}'").fetchone()
          if user_info:
              tik, balance = user_info
              bot.send_message(message.chat.id, f"ваш тикток: {tik}")
              bot.send_message(message.chat.id, f" Ваш баланс: {balance} RUB ")
    Ответ написан
    Комментировать
  • Как вывести сообщения сразу для двух переменных chri?

    @o5a
    Не совсем понятно, что значит "сразу для двух переменных". Предположу, что просто адекватная проверка по списку чатов.
    if call.data == 'r':
        status = ['creator', 'administrator', 'member']
        chats = ["@footballdaily24", "@social_net_itnews"]
    
        for chat_id in chats:
            chri == bot.get_chat_member(chat_id=chat_id, user_id=call.from_user.id).status
            if chri not in status:
                bot.send_message(call.message.chat.id, f"Кажется вы не подписались на {chat_id} ")
    Ответ написан
  • Как сделать закрытый Telegram бот?

    @o5a
    def get_access_status(user_id):
        cursor.execute("SELECT 1 FROM Dostyp WHERE Iduser = %s", (user_id, ))
        return bool(cursor.fetchone())
    
    # сам проверка в функции
    @bot.message_handler(commands=['start'])
    def welcome(message):
        if get_access_status(message.from_user.id):
            # доступ есть, продолжаем
    Ответ написан
    Комментировать
  • Как записать в csv на новую строку?

    @o5a
    data = [
    ['13','2да','3нет','4впредкушение','53','654','7русский'],
    ['13','2да','3нет','4влюбленность','50','62','7русский']
    ]
    
    out = [','.join(row)+'\n' for row in data]
    
    with open('document.csv', 'a') as fd:
        fd.writelines(out)

    Но вообще для работы с csv есть встроенная библиотека, через нее удобнее работать напрямую, и можно задавать различные параметры файла (символ разделителя, обрамление кавычками и т.п.)
    import csv
    
    data = [
    ['13','2да','3нет','4впредкушение','53','654','7русский'],
    ['13','2да','3нет','4влюбленность','50','62','7русский']
    ]
    with open('document2.csv', 'w', newline='') as fd:
        writer = csv.writer(fd)
        writer.writerows(data)


    И вообще какое-то странное у Вас представление о формате csv. Зачем у каждого значения приписан его индекс? Обычного так не делается, пишутся просто сами значения, индекс итак известен.
    Ответ написан
    Комментировать
  • Отсортировать массив с вложенным обьектом json?

    @o5a
    Для сортировки можно передавать функцию в параметр key, которая выдаст именно нужный элемент сортировки. Для преобразования даты datetime.strptime с указанием формата.
    print(sorted(data, key=lambda x: datetime.datetime.strptime(x['history_date'], '%d.%m.%Y, %H:%M'), reverse=True))
    Ответ написан
    Комментировать
  • Как одной строчкой вызвать методы из всех экземпляров класса?

    @o5a
    Хранить все эти созданные фигуры в списке, вместо отдельных переменных. Соответственно по списку можно делать массово все, что потребуется.
    import tkinter as tk
    
    root = tk.Tk()
    
    canvas = tk.Canvas(root)
    canvas.pack(fill="both", expand=True)
    # можно хранить в атрибутах canvas
    canvas.max_oval_count = 10
    canvas.ovals = []
    
    class Oval():
        ...
    
    def oval(event):
        # создаем фигуры в списке
        if canvas.max_oval_count > 0:
            canvas.ovals.append(Oval(event, canvas))
            canvas.max_oval_count -= 1
    
    def move_ovals(event):
        for oval in canvas.ovals:
            oval.move_oval(event)
    
    canvas.bind('<Button-3>', oval)
    canvas.bind('<Button-1>', move_ovals)
    
    root.mainloop()
    Ответ написан
    Комментировать
  • Как правильно составить цикл?

    @o5a
    Судя по описанию алгоритма достаточно просто groupby по этим сравниваемым полям
    df.groupby(['id', 'lat/lon']).first().reset_index()
    Ответ написан
    Комментировать