Ответы пользователя по тегу Python
  • Как цифру в строке преобразовать в числовой формат?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Вопрос не слишком понятен.
    Так, что ли?
    d = {'days': '1', 'week': '15'}
    res = ', '.join([f'{key}={float(value)}' for key, value in d.items()])
    print(res)
    Ответ написан
  • Как исправить response 403?

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Функции ball вызывается и возвращает результат вникуда. Вам нужно в той функции, которая использует результат вычисления sum, его явно из ball получать и присваивать куда надо.
    Кстати, слово sum не надо использовать как имя, оно занято системной функцией sum.
    def ball():
        my_summ = 2 + 2
        return my_summ
    
    
    def main():
        summa = ball()
        print(summa)
    
    
    main()
    Ответ написан
    Комментировать
  • Как добавить элемент в двумерный список?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    example = [
        [1, 2]
        [3, 4]
    ]
    new_element = [5, 6]
    my_list = []
    my_list.append(new_element)
    print(my_list)
    my_list.append([7, 8])
    print(my_list)
    Ответ написан
    Комментировать
  • Как понять, к какому элементу мы обращаемся?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    self - это ссылка на экземпляр класса.
    self.color это атрибут экземпляра класса.
    self.saveColor(self, color) - это метод класса, привязанный к каждому экземпляру класса.

    Экземпляры вашего класса Уток обладают свойством - цветом.
    Если представить себе класс как таблицу уток, то в этой таблице экземпляры - это строки, и есть колонка «color», это и есть атрибут, у каждой строки своё значение (у каждой утки свой цвет).

    Методы класса (self.saveColor(self, color), например) - это его встроенные инструменты, которые позволяют поменять какой-либо атрибут экземпляра или что-то сделать с экземпляром. Вроде как кнопки и регуляторы на пультике управления экземпляром.
    Метод - это как функция, только крепко привязанная к экземпляру. У метода могут быть аргументы - self, который должен быть в каждом методе, и color, который не обязан быть в других методах, а только в тех, где это действительно нужно (фактически, только в этом).

    self привязывает метод к экземпляру, а color позволяет передать в метод значение снаружи, чтобы внутри метода это значение связать с атрибутом (в данном случае атрибутом self.color) экземпляра.
    Ответ написан
    Комментировать
  • Почему выполнение скрипта останавливается?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Выполнение скрипта останавливается из-за «безымянного» и некорректно обрабатываемого перехвата исключений.
    Ответ написан
    Комментировать
  • Почему lottie выдает ошибку ImportError: cannot import name 'PngRenderer' from 'lottie.exporters.cairo'?

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

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Используйте метод строк .splitlines() либо укажите для метода .split() параметр разделитель ”\n”
    Ответ написан
    1 комментарий
  • This version of ChromeDriver only supports Chrome version. webdriver-manager.?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Как вариант:
    установить резервный браузер стабильной версии, скачать нужную версию webdriver для резервного браузера. Не обновлять их до момента отказа работать от старости, затем обновить резервную связку. Возможно, сделать периодическую проверку работоспособности резервной связки с оповещением оператора/админа о проблемах.

    Сделать обработку ошибки и в случае ошибки запускать на резервном браузере с резервным webdriver.

    Сам я такое не делал, но если бы требовалось обеспечить надежную работу, смотрел бы в этом направлении.
    Ответ написан
  • Что не так? Почему не работает бот?

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

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Причина - цикл while в функции forest никогда не выполняется. Почему - подумайте. Это просто.
    Ответ написан
  • Как разделить методы класса на модули?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    karmoed, модули - это файлы с расширением .py , содержащие инструкции языка Python.
    Модуль можно импортировать, при этом инструкции в нем выполнятся интерпретатором, а объекты, которые в этом модуле создаются при выполнении инструкций, могут добавиться при импортировании в область имен, в которую модуль импортировали.
    И там эти объекты можно использовать, как обычно.
    К примеру, класс User в модуле mymodul.py может быть импортирован в ваш код и использован в нем так:
    from mymodul import User
    
    user_1 = User()
    user_2 = User()
    user_1.name = “Vasja”
    user_2.name = “Masha”
    Ответ написан
    1 комментарий
  • Как написать print() с двумя текстами и двумя переменными, что бы текст и переменная разделялись запятой и на конце была точка?

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    У вас класс, в нем методы. Вы передаёте в методы класса экземпляр self. Класс нужен для того, чтобы его методами менять состояние атрибутов в экземпляре класса. А вы зачем-то используете методы класса как обычные функции, которые по-вашему должны что-то менять в каких-то глобальных переменных (типа ger53 в вашем коде).
    Это совершенная каша и неправильное использование классов.
    В самом примитивном случае правильное использование может выглядеть как-то так:
    class MyTestObj(object):
        def __init__(self):
            self.ger53 = []
        
        def test54(self, arg):
            self.ger53.append(arg)
        
        def __repr__(self):
            return str(self.ger53)
    
    my_instance = MyTestObj()
    print(my_instance) # обращение к экземпляру до изменения состояния
    my_instance.test54(42) # изменение состояния при помощи метода test54
    print(my_instance) # обращение к экземпляру после изменения состояния 
    print(my_instance.ger53[0]) # обращение к атрибутам экземпляра

    Есть и более изощренные способы, с геттерами/сеттерами, прочими изысками.

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    data = [9, 8, 7, 7, 6, 3, 1, -2, -3, -7, -7, -9]
    counter = 0
    while not data[counter] < 0:
        counter += 1
    print(data[counter], counter)

    или
    data = [9, 8, 7, 7, 6, 3, 1, -2, -3, -7, -7, -9]
    for counter, temperature in enumerate(data):
        if temperature < 0:
            print(temperature, counter)
            break

    но я не очень люблю break, это субъективно.

    Ну и кривенький однострочничек:
    data = [9, 8, 7, 7, 6, 3, 1, -2, -3, -7, -7, -9]
    print(*[(temperature, counter) for counter, temperature in enumerate(data) if temperature < 0][0])
    Ответ написан
    Комментировать
  • Как сократить данный код?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Тут много путей уменьшить код.
    Можно начать с того, что у вас многократно повторяется.
    К примеру,
    if message.text == '26.01':
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            bt1 = types.KeyboardButton('8:00')
            bt2 = types.KeyboardButton('9:00')
            bt3 = types.KeyboardButton('10:00')
            bt4 = types.KeyboardButton('11:00')
            bt5 = types.KeyboardButton('12:00')
            bt6 = types.KeyboardButton('13:00')
            bt7 = types.KeyboardButton('14:00')
            bt8 = types.KeyboardButton('15:00')
            bt9 = types.KeyboardButton('16:00')
            bt10 = types.KeyboardButton('17:00')
            bt11 = types.KeyboardButton('18:00')
            bt12 = types.KeyboardButton('19:00')
            bt13 = types.KeyboardButton('20:00')
            bt14 = types.KeyboardButton('21:00')
            back11 = types.KeyboardButton('Назад')
            markup.add(bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, bt11, bt12, bt13, bt14, back11)
            bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    повторяется несколько раз. Значит, этот фрагмент можно записать один раз и затем многократно вызывать, подставляя только меняющиеся элементы.

    Но и внутри видно многократное повторение нумерованной переменной, это явный признак плохого кода.
    Эту проблему можно решить разными способами. В данном случае, когда значения идут равномерно (час за часом), можно их просто сгенерировать, рассчитать, и поместить в список.
    Например:
    first_hour = 8
    last_hour = first_hour + 14
    buttons = [f'{current}:00' for current in range(first_hour, last_hour)]
    print(buttons)
    print(buttons[0])

    И этот список и передавать в нужное место вместо bt1, bt2, bt3, bt4, bt5, …

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

    Следует отметить, что вам пока рано заниматься ботами. Сделайте что-то попроще, калькулятор например, игру «быки-коровы»… я не шучу.
    Ответ написан
    Комментировать
  • Я преобразовал этот код из py в ехе, но теперь при запуске команды переменная n выводится не в файл, а в командную строк(cmd), что делать?

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Проблема в том, что в консоли шрифт моноширинный, а в телеграме - нет.
    Ответ написан
    2 комментария