Всем привет. Пишу обычного бота для некоторых вычислений. Проблема в том, что при вводе пользователем данных ему нужно ввести два раза или первый раз нужное число, а второй раз всё что угодно(скриншот 1 и скриншот 2). Нужна помощь. Прошу прощения, если код выглядит не очень. Я готов к критике!
import telebot
from telebot import types
bot = telebot.TeleBot('')
@bot.message_handler(commands=['start'])
def start(message):
bot.clear_step_handler(message)
bot.send_message(message.chat.id, 'Привет, я Final Exam Score Bot!')
bot.send_message(message.chat.id, '1️⃣ Пожалуйста, введите свою оценку за Register Midterm:')
bot.register_next_step_handler(message, get_midterm)
@bot.message_handler()
def get_midterm(message):
global midterm
try:
midterm =int(message.text)
if not message.text.isdigit() or midterm < 25 or midterm > 100:
raise ValueError()
bot.register_next_step_handler(message, get_endterm)
bot.send_message(message.chat.id, '2️⃣ Пожалуйста, введите свою оценку за Register Endterm: Нужно ввести два раза, пока что)')
except ValueError:
bot.send_message(message.chat.id, "Вы неправильно ввели оценку!")
bot.register_next_step_handler(message, get_midterm)
@bot.message_handler()
def get_endterm(message):
global endterm
try:
endterm = int(message.text)
if not message.text.isdigit() or endterm < 25 or endterm > 100:
raise ValueError()
bot.register_next_step_handler(message, get_total)
except ValueError:
bot.send_message(message.chat.id, "Вы неправильно ввели оценку!")
bot.register_next_step_handler(message, get_endterm)
@bot.message_handler()
def get_total(message):
if midterm * 0.3 + endterm * 0.3 >= 50:
vishkagrade = (90 - (midterm * 0.3 + endterm * 0.3))/0.4
vishka = f' Для получения повышенной стипендии (>90) {vishkagrade} % на файнале!'
elif midterm * 0.3 + endterm * 0.3 < 50:
vishka = ' Для получения повышенной стипендии (>90) Heвозможно получить!'
if midterm * 0.3 + endterm * 0.3 >= 30 and midterm * 0.3 + endterm * 0.3 <= 50:
stepuhagrade = (70 - (midterm * 0.3 + endterm * 0.3))/0.4
stepuha = f' Для сохранения стипендии (>70) {stepuhagrade} % на файнале!'
elif midterm * 0.3 + endterm * 0.3 >= 50:
stepuha = ' Для сохранения стипендии (>70) 50 % на файнале!'
elif midterm * 0.3 + endterm * 0.3 < 30:
stepuha = ' Для сохранения стипендии (>70) Heвозможно получить!'
if midterm * 0.3 + endterm * 0.3 >= 15 and midterm * 0.3 + endterm * 0.3 <= 30:
letnikgrade = (50 - (midterm * 0.3 + endterm * 0.3)) / 0.4
letnik = f'⚫ Чтобы не получить ретейк или пересдачу (>50) {letnikgrade} % на файнале!'
elif midterm * 0.3 + endterm * 0.3 >= 30:
letnik = '⚫ Чтобы не получить ретейк или пересдачу (>50) 50 % на файнале!'
elif midterm * 0.3 + endterm * 0.3 < 15:
letnik = '⚫ Чтобы не получить ретейк или пересдачу (>50) Ой, у вас летник!'
totalscore = f'⚪ Если вы получите 100% на файнале, ваш тотал будет {midterm * 0.3 + endterm * 0.3 + 40} %!'
bot.send_message(message.chat.id, letnik)
bot.send_message(message.chat.id, stepuha)
bot.send_message(message.chat.id, vishka)
bot.send_message(message.chat.id, totalscore)
kb = types.InlineKeyboardMarkup()
btn = types.InlineKeyboardButton(text='Попробовать еще раз✅', callback_data='btn1')
kb.add(btn)
bot.send_message(message.chat.id, 'Нажмите сюда для еще одного подсчета', reply_markup=kb)
@bot.callback_query_handler(func=lambda call: True)
def inline_handler(call):
if call.data == 'btn1':
bot.delete_message(call.message.chat.id, call.message.message_id)
start(call.message)
while True:
try:
bot.polling()
except:
continue