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

    DarkWood
    @DarkWood Автор вопроса
    Таки сам нашел решение: использовать итератор для списка. Мой код для примера при этом становится таким:

    test_lst = ["test_" + str(i) for i in range(1, 6)]
    itr = iter(test_lst)
    
    def next_quest_gui(m):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        markup.add(*[types.KeyboardButton(name) for name in ["Следующее задание", "Выход"]])
        bot.send_message(m.chat.id, 'Выберите действие', reply_markup=markup)
    
    
    def action(m):
        send = bot.send_message(m.chat.id, 'Выберите действие')
        bot.register_next_step_handler(send, cycle)
    
    
    @bot.message_handler(commands=["start"])
    def start(m, res=False):
        bot.send_message(m.chat.id, next(itr))
        next_quest_gui(m)
    
    
    @bot.message_handler(content_types=["text"])
    def cycle(m):
        if m.text == "Следующее задание":
            msg = bot.send_message(m.chat.id, next(itr))
            bot.register_next_step_handler(msg, cycle)
        else:
            bot.send_message(m.chat.id, 'Ваш прогресс сохранен')
    Ответ написан
    Комментировать
  • Как вывести значение в массиве?

    DarkWood
    @DarkWood
    У вас в списке не хватает одного элемента для правильного вывода каждого энного из них. '2330', '(0)', '2340' - вот здесь пропущено еще одно значение.

    А так сделать искомое очень просто:

    l = ['2110', '760', '10558', '2120', '(439)', '(370)', '2330', '(0)', '2340', '159', '65', '2350', '(98)', '(7)', '2410', '(0)', '(616)', '2400', '382', '9630']
    print(*l[0::3], sep=",")


    Но если всё-таки список правильный, то решение будет иным.
    Ответ написан
    Комментировать
  • Нужно вводить число в консоль методом input. Как вывести его разряды и множители?

    DarkWood
    @DarkWood
    И еще вариант:

    n = 234567
    l = list(str(n))
    print(" + ".join([i + "**10**" + str(l[::-1].index(i)) for i in l]))


    Вместо прямого указания "n" впишите input.

    Что тут происходит: преобразовываем полученное число в список строковых символов. Берем обратный порядок их индексов в этом списке для получения разрядов и выводим всё это через " + " в генераторе списка.
    Ответ написан
    1 комментарий
  • Как правильно использовать функцию sum() в Python?

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

    lst = [input() for i in range(2)]
    try:
      lst.insert(len(lst) // 2, sum([int(i) for i in lst]))
    except ValueError:
      lst.insert(len(lst) // 2, "".join(lst))
    print(*lst)


    in range(2) - здесь как раз можно изменить количество вводных значений.

    Далее в блоке try программа пытается преобразовать введенные данные в числа. Если это получается, то она выводит их сумму (как раз основанную на суммировании списка, как хотели сделать вы). Если хоть одно значение числом стать не может (ValueError), то оставляем все данные строковыми и просто объединяем вместе.

    len(lst) // 2 - всегда будет отдавать среднюю позицию для вставки в список.

    Кстати, непонятно почему вы у себя пишите позицию "7". Список имеет длину всего два элемента и новый добавлялся бы в конец, а не середину, как дано в задании.
    Ответ написан
    1 комментарий
  • Python: множественная замена из списка, состоящего из RegExp. Как использовать нумерацию групп и флаги компиляции?

    DarkWood
    @DarkWood Автор вопроса
    Вроде бы разобрался с компиляцией. Изменил код следующим образом:

    import re
    
    step_replace = re.compile(r'(Шаг \d+)')
    section_replace = re.compile(r'(^\d.+$)', re.MULTILINE)
    
    SUBS = [
            (step_replace, r'[COLOR=orange][SIZE=7]\1[/SIZE][/COLOR]'),
            (section_replace, r'[COLOR=orange][SIZE=7]\1[/SIZE][/COLOR]'), 
    ]
    
    file = open('d:/text_sample.txt','r')
    text = file.read()
    
    def add():
            for pattern, replacement in SUBS:
                    result = re.sub(pattern, replacement, text)
            return result
    
    file.close()
    file1 = open('d:/text_sample.txt','w')
    file1.write(add())
    file1.close()


    Но теперь проблема в том, что в файл записывается лишь последняя строка в списке замен (в данном случае section_replace).

    Как записать все замены?
    Ответ написан
    Комментировать