• TypeError: 'module' object is not callable. Как исправить?

    @o5a
    telebot.py

    НЕ называйте больше свои скрипты так же, как сами модули (в данном случае telebot). При таком синтаксисе скрипт пытается импортировать такой скрипт вместо самого модуля телеграм.
    Ответ написан
    Комментировать
  • Почему перестали работать postgres запрос в Python?

    @o5a
    Ругается именно на то, что внутри одного with conn запустили еще один with conn. Проверьте свой код.
    Судя по документации и гуглящимся отзывам эту ошибку стали выдавать с версии 2.9, так что возможно раньше просто запускали на более старой версии, поэтому не встречали.
    Ответ написан
    Комментировать
  • Почему возникает ошибка "can only join an iterable" при повторном прохождении цикла? И как сравнить имя пользователя с именем ключа словаря?

    @o5a
    Так там join вообще не нужен, у Вас же в этом dic[key] хранятся просто целые числа.
    join используется для объединения последовательностей (список, кортеж, буквы из строки и т.п.) в одну строку.
    scoreN = dic[key]
    и в подобных местах, где строка, тоже заменить на число:
    dic[polsovatel.name] = 0
    Ответ написан
  • Как исправить ошибку импорта PyAutoGUI?

    @o5a
    Ответ написан
    Комментировать
  • Как извлечь IPv4 адреса из файла и сохранить их в другой средствами Python?

    @o5a
    Скорее всего проблема в самом поиске.
    Вместо поиска просто regexp IP по всей строке (re.search, re.findall) Вы пытаетесь разбить ее на слова:
    wordList = item.split()
    Но это же разбивает по пробелам. А если пробелов нет, то ничего и не найдет, тем более, что на пробелы заменяете только [',', ';']. Если в дампе строка например
    insert into .... values ('1.1.1.1','5.5.5.5')
    то он их и не найдет.
    Проще брать всю строку и искать через re.findall (сам шаблон такой же оставить).
    Ответ написан
  • Спрайт снаряд после выстрела поворачивается по направлению другого спрайта(танка). Не знаю почему так происходит?

    @o5a
    Как уже заметили в комментариях, проблема в том, что для прироста положения снаряда (вектора скорости) используется одна и та же глобальная переменная. Поэтому при обновлении все снаряды изменяют вектор на одинаковый. Нужно было использовать локальный аттрибут каждого снаряда для хранения скорости (фиксированный на момент создания, как я понимаю скорость и направление уже не должна меняться).
    Навскидку вижу можно просто сделать так:
    ...
        class Projectile(pygame.sprite.Sprite):
            def __init__(self, weigth, heigth, corner):
                ...
                # добавляем каждому снаряду свою скорость. вычисляем поворотом на передаваемый угол
                self.projectile_speed = pygame.math.Vector2((4, 0)).rotate(-corner)
    
            def update(self):
                # и тут соответственно используем вектор скорости собственный для каждого снаряда
                self.projectile += self.projectile_speed

    spoiler
    Еще заметил, что английские названия ошибочны
    heigth => height (высота)
    weigth => weight (вес)
    видимо имелось в виду width (ширина)
    corner - в английском тоже значит "угол" но это не тот угол (как угол поворота), а как угол квадрата, угол комнаты.
    для угла как направления используется angle
    see = "видеть", наверное имелось в виду sea = "море".
    Не критично конечно, но лучше привыкать к правильным названиям, чтобы у других изучающих код потом не возникло недопонимания.
    Ответ написан
    1 комментарий
  • Как перемешать двумерный список?

    @o5a
    random.shuffle() - перемешивает одномерный массив.

    Можно просто пройтись по строкам массива (двумерного списка) и применить к каждой shuffle. Затем применить shuffle к самому массиву.

    Это если в изначальном запросе подразумевается равномерное перемешивание элементов по всему массиву.
    Ответ написан
    Комментировать
  • Почему не двигается объект в pygame?

    @o5a
    Потому что сравниваете координаты не объекта hunter_1, а не связанные с ним координаты
    if hunter_pos_y < pos_y_rand:
            hunter_pos_y += 1

    когда должно быть примерно так
    if hunter_1.y < pos_y_rand:
            hunter_1.y += 1

    Аналогично и координаты целей (pos_y_rand). Сейчас координаты охотника сравниваются просто с этой рандомной точкой каждый раунд, а не с координатами реального объекта - цели.
    К тому же этот самый hunter каждый цикл создается заново, хотя по логике предполагаю он должен быть только 1.
    Т.е. создание объекта hunter нужно вынести наружу цикла, а координаты проверять по аттрибутам объекта, его же и двигать.
    Во-вторых, эти цели (звёзды?) в текущем виде нигде не сохраняются, каждый цикл предыдущие объекты-цели перезаписываются, остается только их изображение на экране. Т.е. координаты ранее созданных целей взять будет негде. Если все же логика работы была - ходить за этими целями, то их нужно хранить (самое простое - добавлять к списку).
    Ответ написан
    3 комментария
  • Слияние файлов exel и csv с использованием pandas?

    @o5a
    Если речь про то, что первая строка получает названия "Unnamed ...", то это потому что пытается определить названия колонок, а их нет. В данном случае проще всего отключить заголовки вообще, добавив во все функции (загрузка файлов и выгрузка) header=None
    file_csv = pd.read_csv("temp", header=None)
    Ответ написан
    Комментировать
  • Не могу пройти задание в Сheckio, что делать?

    @o5a
    Гуглится похожая ошибка: https://py.checkio.org/forum/post/14529/httpspyche...

    Судя по всему тестер ожидает, что текущее решение миссии будет как бы продолжением предыдущей. Как в их случае, функция fight должна остаться от предыдущего решения. Возможно Вы тоже избавились от этой функции или сделали какое-то похожее изменение.
    Ответ написан
    Комментировать
  • Почему у модуля telebot нету класса types?

    @o5a
    pip uninstall telebot
    pip uninstall PyTelegramBotAPI
    pip install PyTelegramBotAPI

    и библиотеку telebot не надо больше пытаться ставить, правильная PyTelegramBotAPI
    Ответ написан
    Комментировать
  • Python. Как проверить, существует ли таблица в БД?

    @o5a
    Если просто проверить наличие таблицы, то можно запросом
    select * from pg_tables where tablename = 'value_result'

    Если же нужно именно ругаться, когда таблица не создалась или когда запись не получилась, то можно использовать try .. except с отловом конкретного кода ошибки
    try:
        cursor.execute(create_table_query)
    except НужноеИсключение:
        print("таблица уже существует")

    Какие конкретно исключения используется я навскидку не знаю, можно посмотреть в документации:
    https://www.psycopg.org/docs/errors.html
    или вывести опытным путем
    except Exception as e:
        print(e)
    Ответ написан
    Комментировать
  • Как не генерировать пароль который уже был в сгенерирован?

    @o5a
    Чтобы найти "все возможные пароли длины N без повторов" из набора символов можно сразу использовать itertools.product
    from itertools import product
    
    symbols = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'
    result = list(product(symbols, repeat = N))

    Выдаст список кортежей наборов букв каждого пароля, к ним можно применить ''.join() для полноценной строки.
    Только учтите, что это большие объемы, т.к. кол-во возможных паролей будет определяться
    len(symbols) в степени N
    Ответ написан
    Комментировать
  • Как выбрать значения, которые были загружены день назад от даты в таблице?

    @o5a
    c.execute("select * from mytable where date < date('now', '-1 day')")
    Ответ написан
    Комментировать
  • Почему не итерируется?

    @o5a
    Александр, ошибка с Nonetype означает, что у каких-то из найденных тэгов <a> отсутствует href, в результате в список записывается None, т.е.
    alllist = ['url1', 'url2', ..., None, ... ]
    Само по себе это не было бы проблемой в списке, но writerow предполагает, что каждый элемент - это список данных (список колонок для csv), а передаете просто строку, поэтому он пытается ее итерировать (т.е. строки он будет записывать побуквенно через разделитель). А None итерировать он уже не может, поэтому и ругается.
    Поправить можно так:
    for line in allurl:
        writers.writerow([line])

    Можно сразу делать проверку, что href есть, чтобы не пихал пустые значения в список.
    Ответ написан
    Комментировать
  • Как сделать так чтобы при вычитании не уходило в минус?

    @o5a
    Если вопрос в том, как не уходить в минус (независимо от того, что вычитаем), то можно так:
    player2['oranges'] = max(player2['oranges'] - kick, 0)
    Ответ написан
    Комментировать
  • Как обновить все записи по списку id?

    @o5a
    Если производительность не критична (список id не особо большой), то можно просто использовать executemany (он по факту запускает отдельные update, но автоматом по списку).
    cur.executemany('update mytab set status = 1 where id = ?', ((id, ) for id in idlist) )

    Для лучшей производительности правильнее будет использовать 'update ... where id in (...)', формируя запрос форматированием с передачей параметров, но там тоже свои особенности.

    P.S. не заметил тэг SQLalchemy. Если нужно именно для нее, тогда ответ не подойдет :)
    Ответ написан
    Комментировать
  • При использовании range( ), через N-ное количество циклов падает скорость?

    @o5a
    Потому что в целом подход неправильный. Вы каждый цикл создаете новый объект и просто его отрисовываете поверх других, сдвигая каждый раз на новую величину.
    Вместо этого нужно 1 раз создать свой Circle и его уже потом двигать (и двигать соответственно не на i, а на одинаковое фиксированное значение (если ожидается равномерное движение).
    И наверное в цикл стоит добавить задержку в виде time.sleep(0.01)
    obj = Circle(Point(150, 20), 15)
    obj.setWidth(1)
    obj.draw(win)
    
    def down():
        for i in range(250):
            print (i)
    
            obj.setFill("yellow")
            obj.move(0, 1)
            time.sleep(0.01)
    Ответ написан
    Комментировать
  • Не работает удаление строки из таблицы базы данных sqlite3 в python. Что делать?

    @o5a
    Алихан Мулаев, если при этом не забываете commit, значит скорее всего такого rowid в таблице нет или есть, но не у той строки, что предполагаете. Лучше не полагаться на rowid, а использовать явные критерии или конкретный первичный ключ.
    Ответ написан
    Комментировать