Не могу понять почему не работает цикл for в библиотеке Telebot

Всем привет! Впервые работаю с библиотекой Telebot. Хочу создать бота, который помогает учить английские слова. Не могу понять почему не работает цикл for в функции main

import telebot

bot = telebot.TeleBot('my token')

listOfEnWords = []
listOfRusWords = []
all_words = []
amount = 0

@bot.message_handler(commands=['start'])
def main(message):
    bot.send_message(message.chat.id, f'<b>Привет, {message.from_user.first_name}!</b>\n<em>Этот бот поможет лучше выучить какие-либо иностранные слова.</em>\nДля начала введите кол-во ваших слов: ', parse_mode='html')
    for i in range(amount):
        bot.register_next_step_handler(message, all_continue)

def all_continue(message):
    global amount
    amount = int(message.text)
    bot.reply_to(message, 'Начнём learning!')
    bot.send_message(message.chat.id, 'Введите слово на английском')
    bot.register_next_step_handler(message, en_word)

def en_word(message):
    enWord = message.text
    listOfEnWords.append(enWord)
    bot.send_message(message.chat.id, 'Введите его перевод на русском: ')
    bot.register_next_step_handler(message, ru_word)

def ru_word(message):
    rusWord = message.text
    listOfRusWords.append(rusWord)

bot.polling(none_stop=True)

Надеюсь на помощь


Ответы (1 шт):

Автор решения: BArbosspirat

Давайте пошагово. Мы запускаем скрипт и изначально переменная amount хранит 0. Пользователь пишет /start и запускается функция main. В ней вы отправляете сообщение и далее начинается цикл с amount равным нулю. Т.е. нам нужно перед циклом вызвать функцию которая меняет amount. В целом ваша реализация не подходит, я сделал немного иначе, не уверен, что это хорошая реализация, но она работает:введите сюда описание изображения

import telebot

bot = telebot.TeleBot('6222261755:AAGvOP8e2WWZW0lOVuL_moMNord-UHXIG_U')

listOfEnWords = []
listOfRusWords = []
all_words = []
amount = 0


@bot.message_handler(commands=['start'])
def main(message):
    bot.send_message(message.chat.id,
                     f'<b>Привет, {message.from_user.first_name}!</b>\n<em>Этот бот поможет лучше выучить какие-либо иностранные слова.</em>\nДля начала введите кол-во ваших слов: ',
                     parse_mode='html')
    bot.register_next_step_handler(message, all_continue)


def all_continue(message):
    global amount
    amount = int(message.text)
    bot.reply_to(message, 'Начнём learning!')
    bot.send_message(message.chat.id, 'Введите слово на английском')
    bot.register_next_step_handler(message, en_word)


def en_word(message):
    enWord = message.text
    listOfEnWords.append(enWord)
    bot.send_message(message.chat.id, 'Введите его перевод на русском: ')
    bot.register_next_step_handler(message, ru_word)


def ru_word(message):
    rusWord = message.text
    listOfRusWords.append(rusWord)
    global amount
    amount -= 1
    if amount == 0:
        # цикл 'for' закончился
        return
    bot.send_message(message.chat.id, "Введите слово на английском")
    bot.register_next_step_handler(message, en_word)



bot.polling(none_stop=True)

также стоит отметить, люди в комментариях правильно отметили, если вдруг во время выполнения нашего подобия цикла, другой пользователь ведёт команду /start и число вслед за этим, то amount заменится на уже новое значение. Я вам советую использовать словарь, где ключ будет id пользователя, а значением его личный amount.

→ Ссылка