Ответы пользователя по тегу Python
  • Как применить совет гуру по структуре программы, если делать class?

    phaggi
    @phaggi Автор вопроса, куратор тега Python
    лужу, паяю, ЭВМы починяю
    Вопрос решен с помощью o5a - в словаре надо указывать не вызовы функций, а сами функции.
    Т.е. не
    self.dispatch = {pygl.QUIT: self.exit_game(),  # whatever else
                             ...}

    а правильно:
    self.dispatch = {pygl.QUIT: self.exit_game,  # whatever else
                             ...}
    Ответ написан
    Комментировать
  • Как в os сохранить много строк?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Во-первых, не используйте имена штатных типов и функций в качестве переменных (например, list). Вместо этого, если уж так хочется, пишите my_list или list_of_path
    Во-вторых, для работы с путями удобнее использовать библиотеку pathlib (лучше даже pathlib2)
    В-третьих, вместо использования for item in range(len(my_list)) лучше использовать конструкцию for i, value in enumerate(my_list)
    Ну и, в-четвертых, вы каждый раз переписываете файл done.txt, так как указали “w”. Этот параметр затирает существующий файл. Вам надо один раз создать этот файл, а затем использовать параметр “a”, (от слова append) чтобы добавлять к существующему новые строки.
    P.s. параметр “a” также сам и создаёт файл, если таковой ещё не существует.
    Ответ написан
    Комментировать
  • Как получить геолокацию через Telegram бота с помощью inline?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Хмм… Судя по всему, это ваш же вопрос. Там и ответ есть.
    Ответ написан
  • Как сделать так чтобы при вычитании не уходило в минус?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Есть много путей, как это сделать. Можно перед вычитанием проверять, не больше ли вычитаемое уменьшаемого. Можно после вычитания проверять, не стало ли значение меньше нуля, и обнулять. Можно вообще сделать свой тип «только положительные числа», в котором внутри предусмотреть логику контроля, чтоб меньше нуля не становилось - либо обнулялось, либо возвращало ошибку.
    Чтобы выбрать, надо понять, зачем и что будет дальше.
    Ответ написан
    Комментировать
  • Как сделать чтобы бот отправил картинку?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    У вас ничего не получится. Вы не умеете искать информацию. Вверху есть строка поиска, туда введите запрос
    бот отправил картинку
    и вывалится куча разнообразных вариантов.
    Ответ написан
    Комментировать
  • Как изменить workspace в jupyter lab?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Вы можете изменить конфигурацию из командной строки conda:
    запустите командную строку anaconda.
    выполните в ней jupyter notebook --generate-config.

    Каталог .jupyter/ должен создаться после этого в вашем домашнем каталоге, файл jupyter_notebook_config.py должен оказаться внутре. В нём раскомментируйте и отредактируйте поле c.NotebookApp.notebook_dir.
    Ответ написан
    Комментировать
  • Ошибка в кода бота дискорда. Как сделать нормально?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Переведите текст ошибки гуглом и попробуйте сами ответить на свой вопрос.
    Ответ написан
    Комментировать
  • Как вывести каждый инвайт из списка guild.invites в discord.py?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    По правилам языка for i in guild.invites:
    пытается итерировать сам объект метода, а не то, что он возвращает.
    Возможно, надо:
    for i in guild.invites():
    Возможно, дело не в этом - я не знаю, что там возвращает метод. Но из того, что вы показали, я могу предположить только это.
    Ответ написан
    Комментировать
  • Как ожидать ввода рандомного числа?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    def check_two(m):
        m = m.content
        return m.isdigit() and (1 <= int(m) <= 139)

    Эта функция вернёт True, если на её вход попадёт строка, содержащая только цифры и эти цифры можно преобразовать в целое число в указанном диапазоне.

    Признаться, мне очень не нравится сам подход с такой функцией, т.к. приходится хардкодить туда значения, или передавать их туда через глобальные переменные, или ещё более сложные подходы с сочинением дочерних классов, да ещё с async… ну, ладно, пусть пока так.
    Дальше вам надо применить функцию в параметре метода wait_for
    def check_two(m):
        m = m.content
        return m.isdigit() and (1 <= int(m) <= 139)
    
    DataBook_Page = await client.wait_for('message', check=check_two)
    ну и так далее
    Ответ написан
    Комментировать
  • Почему проблема в сортировке?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Видимо, БД возвращает среди значений пустые значения, что и вызывает ошибку. Вот её модель:
    tops = [(1,), (2,), (3,), (4,), (None,), (7,)]
    tops.sort()

    Проверьте, что возвращает select. Возможно, перед сортировкой надо убедиться, что None отсутствуют, или пройтись циклом и преобразовать все None в нулевое значение int.

    spoiler
    Также конструкция со множеством присваиваний выглядит ужасно. Вот вариант:
    tops = [(1,), (2,), (3,), (4,), (None,), (7,)]
    
    tops = [(0, ) if item[0] == None else item for item in tops]
    allt = [item[0] for item in sorted(tops, reverse=True)][:5]
    print(allt)
    Ответ написан
    Комментировать
  • Как лучше делать return?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    В конкретном примере больше ничего не нужно
    def test(a):
        return a == "abc"


    В общем случае предпочитаю один return, так прямее на мой взгляд.
    Ответ написан
    Комментировать
  • Как добавить новую строку?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    import sqlite3
    
    con = sqlite3.connect(':memory:')
    data = [
        ["item90", 12],
        ["item3", 0],	
        ["item60", 35],
        ["item21", 15]	
    ]
    con.execute('''create table if not exists inv
                (items text, number integer)'''
                )
    
    def print_db(con):
        for row in con.execute('select * from inv'):
            print(row)
    
    def add_data(con, query, data):
        con.executemany(query, data)
        con.commit()
    
    query = 'INSERT into inv values (?, ?)'
    
    add_data(con, query, data)
    print_db(con)
    
    print('\nadd newstroke\n')
    data = [['newstroke', 0]]
    add_data(con, query, data)
    print_db(con)
    
    con.close()
    Ответ написан
    Комментировать
  • Не могу устранить ошибку, вчем проблема?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Currently, there are wheels compatible with the official distributions of Python 2.7, 3.4, 3.5, and 3.6
    Ответ написан
    Комментировать
  • Как исправить [Decode error - output not utf-8]?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Проблема в том, что написана неправильная программа. Чтобы исправить проблему, нужно написать правильную программу.
    Ответ написан
  • Не работает python скрипт конвертированный в exe?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Да, не работает python скрипт конвертированный в exe.
    Ответ написан
    Комментировать
  • Как присвоить значение и выбрать его в JSON?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Как-то так, например:
    import json
    data = '''{
        "Items128": 7,
        "Item29": 3,
        "Item32": 17,
        "Item45": 0,
        "Item93": 4
    }'''
    items_dict = json.loads(data)
    item_numbers = dict((number, key) for number, key in enumerate(items_dict.keys()))
    
    while True:
        for number, item in item_numbers.items():
            print(f'item {number} - {item}')
        my_number = input('выбери номер:')
        try:
            my_number = int(my_number)
            if my_number in item_numbers.keys():
                print(f'{item_numbers[my_number]}: {items_dict[item_numbers[my_number]]}')
            else:
                print('--- нет такого номера ---')
        except ValueError:
            print(f'--- "{my_number}" - это не номер! ---')
    Ответ написан
  • Как удалить несколько цифр из числа?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Превратить число в строку, сделать split по запятой, в полученном списке второй элемент обрезаем до 2 символов срезом, собираем элементы списка в строку через join с запятой.
    Ответ написан
    Комментировать
  • Как к переменой в массиве прибавить её единицу по длине массива?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    В принципе, можно сделать словарь:
    wow = 0
    keys = [
      ["text1", wow],
      ["text2", wow],
      ["text3", wow],
      ["text4", wow],
      ["text5", wow],
      ["text6", wow],
      ["text7", wow],
      ["text8", wow],
      ["text9", wow],
      ["text10", wow],
    ]
    keys = [i[0] for i in keys]
    text = dict((key, value) for value, key in enumerate(keys))
    print(text)


    если очень хочется список списков, то вот так можно:
    wow = 0
    keys = [
      ["text1", wow],
      ["text2", wow],
      ["text3", wow],
      ["text4", wow],
      ["text5", wow],
      ["text6", wow],
      ["text7", wow],
      ["text8", wow],
      ["text9", wow],
      ["text10", wow],
    ]
    keys = [i[0] for i in keys]
    text = [[key, value] for value, key in enumerate(keys)]
    print(text)
    Ответ написан
    1 комментарий
  • Как сделать чтобы при появления ошибки програма работала далше?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Надо правильно обработать ошибку.
    В общем случае это делается при помощи конструкции try except finally.
    Например:
    try:
        result = 1 / 0
    except ZeroDivisionError as error:
        print(f'Ошибка "{error}" - на ноль делить нельзя!')
    Ответ написан
    Комментировать
  • Как правильно сравнить списки в Python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Так сравнить списки, строки или слова?
    Если смотреть на конкретный скриншот, вижу две строки. Строка в колонке С содержится в строке в колонке А.

    Именно такое вхождение легко находится такой конструкцией:
    string_a = 'Санкт-Петербург, Ленинградская область'
    string_b = 'Санкт-Петербург'
    print(string_b in string_a)
    Ответ написан