Слегка дополненный рабочий прототип:
from timeit import default_timer as timer
from datetime import timedelta
import random as rd
def get_user_answer():
while True:
try:
return int(input())
except:
print('В ответе должно быть только целое число.\n'
'Пропустить пример нельзя.')
def get_rand_addition():
a, b = rd.choices(range(1, 99), k=2)
return '+', a, b, a + b
def get_rand_subtraction():
a, b = rd.choices(range(1, 99), k=2)
while b >= a:
b = rd.randint(1, 99)
return '-', a, b, a - b
def get_rand_division():
b = rd.randint(2, 10)
a = b * rd.randint(1, 10)
return '/', a, b, a // b
def get_rand_multiplication():
a, b = rd.choices(range(2, 10), k=2)
return '*', a, b, a * b
def shuffle():
chance = rd.choices([1, 2, 3, 4])
if 1 in chance:
return get_rand_addition()
elif 2 in chance:
return get_rand_subtraction()
elif 3 in chance:
return get_rand_division()
else:
return get_rand_multiplication()
def solve_exercise(count, exercise_type):
num_right_answer = 0
exercises = {'+': get_rand_addition,
'-': get_rand_subtraction,
'/': get_rand_division,
'*': get_rand_multiplication,
's': shuffle}
time_start = timer()
for _ in range(count):
data = exercises[exercise_type]() # Вот до этого я бы сам не допёр наверно.
print(f'{data[1]} {data[0]} {data[2]} = ', end='')
if get_user_answer() == data[3]:
print('Верно!')
num_right_answer += 1
else:
print(f'Неверно, будет {data[3]}')
time_end = timer()
return num_right_answer, str(timedelta(seconds=time_end-time_start))
def get_exercise_count():
while True:
try:
n = int(input('Сколько примеров решить?\n>>> '))
if n > 0:
return n
else:
print('Минимум 1.')
except:
print('Должно быть целое число больше нуля.')
def get_exercise_type():
while True:
s = input('Выберите тип примеров: + | - | / | * | s (всё подряд)\n>>> ')
if s in ['+', '-', '/', '*', 's']:
return s
else:
print('Нужно ввести один из следующих знаков: + - / * или s')
def ask_continue():
while True:
s = input('Решать еще раз? y|n\n>>> ').lower()
if s == 'y':
return True
elif s == 'n':
return False
def main():
print('Калькуляция на время.')
run = True
while run:
count_ex = get_exercise_count()
type_ex = get_exercise_type()
num_right_answer, time = solve_exercise(count_ex, type_ex)
print(f'Правильных ответов {num_right_answer} из {count_ex}, время выполнения {time[2:10]}')
run = ask_continue()
print('Завершение программы..')
if __name__ == '__main__':
main()
Изменил формат времени на более удобоваримый, приторочил умножение и деление и возможность решать примеры со случайным знаком.