请告诉我为什么函数5没有执行以及我是否正确分配了全局变量?
def num1_fun(message):
bot.send_message(message.chat.id, 'Введите оклад по званию:⭐')
bot.register_next_step_handler(message, num1_fun)
def num1_fun(message):
global num1;
num1 = num1_fun
if message.text.isdigit():
salary = int(message.text)
if 7000 <= salary <= 35000:
bot.send_message(message.chat.id, f'Пойдет ✅ {salary}')
bot.send_message(message.chat.id, 'Введите оклад по должности:👮')
bot.register_next_step_handler(message, num2_fun)
return
else:
bot.send_message(message.chat.id, 'Укажите верный оклад 🐒')
else:
bot.send_message(message.chat.id, 'Оклад должен быть числом 🐒')
bot.register_next_step_handler(message, num1_fun)
def num2_fun(message):
global num2;
num2 = num2_fun
if message.text.isdigit():
salary = int(message.text)
if 15000 <= salary <= 45000:
bot.send_message(message.chat.id, f'Пойдет ✅ {salary}')
bot.send_message(message.chat.id, 'Ведите процентную надбавку за выслугу лет к окладам денежного содержания в процентах:📅')
bot.register_next_step_handler(message, num3_fun)
return
else:
bot.send_message(message.chat.id, 'Укажите верный оклад 🐒')
else:
bot.send_message(message.chat.id, 'Оклад должен быть числом 🐒')
bot.register_next_step_handler(message, num2_fun)
def num3_fun(message):
global num3;
num3 = num3_fun
if message.text.isdigit():
salary = int(message.text)
if 1000 <= salary <= 4000:
bot.send_message(message.chat.id, f'Пойдет ✅ {salary}')
bot.send_message(message.chat.id, 'Размер пенсии в зависимости от выслуги лет в процентах:💵')
bot.register_next_step_handler(message, num4_fun)
return
else:
bot.send_message(message.chat.id, 'Укажите верный оклад 🐒')
else:
bot.send_message(message.chat.id, 'Оклад должен быть числом 🐒')
bot.register_next_step_handler(message, num3_fun)
def num4_fun(message):
global num4;
num4 = num4_fun
if message.text.isdigit():
salary = int(message.text)
if 100 <= salary <= 400:
bot.send_message(message.chat.id, f'Пойдет ✅ {salary}')
bot.register_next_step_handler(message, num5_fun)
return
else:
bot.send_message(message.chat.id, 'Укажите верный оклад 🐒')
else:
bot.send_message(message.chat.id, 'Оклад должен быть числом 🐒')
bot.register_next_step_handler(message, num4_fun)
def num5_fun(message):
A = num1 + num2
B = A * int(num3) / 100
X = A + B
C = X * 0.8932
B = C * int(num4) / 100
bot.send_message(message.chat.id,B)
bot.send_message(message.chat.id,"Повторить💸 /start")
相关答案:一、二、三。
首先,您不应在此示例中使用全局变量。如果该机器人由超过1人使用,它将
num1, num2, num3, num4为所有用户所共用,这将导致不可预测的结果。相反,您可以在后续调用之间传递数据字典:
bot.register_next_step_handler(message, lambda msg: func(msg, data))您也可以不重复检查的一般部分,而是将所有内容放入装饰器中。
代码: