Почему-то бот не считает my_salary? что я делаю не так
Ввожу по очереди, имя, 30, 30 и все. Код остановился. Ошибка NameError: name 'month' is not defined. Пробовал много разных вариантов, ошибки были в том числе с salary. также пишет что не определена. В одном из вариантов написания кода, бот запрашивал все данные и просто останавливался
import telebot
bot = telebot.TeleBot('5491821896:AAGlZ3lbVi',)
@bot.message_handler(commands=['start'])
def send_welcome(message):
msg = bot.reply_to(message, """\
Hi there, I am Example bot.
What's your name?
""")
bot.register_next_step_handler(msg, month_get)
def month_get(message):
month = bot.send_message(message.chat.id, 'write 30')
bot.register_next_step_handler(month, get2)
def get2(message):
work = bot.send_message(message.chat.id, 'write 30')
bot.register_next_step_handler(work, my_salary, work, month)
def my_salary (work, month):
salary = 19000 / month * work
bot.send_message(message.chat.id, f'your salary is {salary}')
bot.polling()
Ответы (2 шт):
Автор решения: otobrazhaemoe_imya
→ Ссылка
В начале стоит создать эти переменные.
month = 0
work = 0
salary = 0
А в начале функции my_salary, стоит добавить этот код:
global month
global work
Этот код делает переменные доступными для этой функции. Надеюсь помог.
Автор решения: oleksandrigo
→ Ссылка
Ты что-то странное накодил
@bot.message_handler(commands=['start'])
def send_welcome(message):
# не обязательно делать новую переменную месседж,
# register_next_step_handler наплевать какой месседж ты ему дашь
# и что за странный перенос строки?
# msg = bot.reply_to(message, """\
# Hi there, I am Example bot.
# What's your name?
# """)
## делай так
bot.reply_to(message, "Hi there, I am Example bot.\n"
"What's your name?")
# сюда кидай просто message
# и назови функцию более понятно, ты же требуешь имя а не месяц
bot.register_next_step_handler(message, get_name)
def get_name(message):
bot.send_message(message.chat.id, 'write month')
# ты наверное забыл имя
bot.register_next_step_handler(message, get_month, message.text)
# проверка является ли чилсом float
def is_digit(string: str):
try:
float(string)
return True
except ValueError:
return False
# доп аргумент name это message.text предыдущей функции
def get_month(message, name):
if is_digit(message.text):
bot.send_message(message.chat.id, 'write work')
bot.register_next_step_handler(message, my_salary, name, float(message.text))
else:
bot.send_message(message.chat.id, 'write month')
bot.register_next_step_handler(message, get_month, name)
def my_salary(message, name, month):
if is_digit(message.text):
work = float(message.text)
salary = 19000 / month * work
bot.send_message(message.chat.id, f'{name} your salary is {salary}')
else:
bot.send_message(message.chat.id, 'write work')
bot.register_next_step_handler(message, my_salary, name, month)