Почему моя программа лагает после 5-ого повторения не грузит Python 3.7
Ребят, скажите пожалуйста, почему моя программа лагает после повторения? Мой код:
from random import randint as rand_digit
first_digit_list = []
second_digit_list = []
count_of_correct_answer = 0
max_answers = 10
this_answer_number = 1
while this_answer_number <= max_answers:
first_digit_random = rand_digit(1, 9)
if not first_digit_random in first_digit_list:
first_digit_list.append(first_digit_random)
second_digit_random = rand_digit(1, 9)
if not second_digit_random in second_digit_list:
second_digit_list.append(second_digit_random)
user_input_math = input(f"Ответ - {first_digit_random} * {second_digit_random} = ")
if user_input_math == (f"{first_digit_random * second_digit_random}"):
count_of_correct_answer += 1
this_answer_number += 1
print(f"Правильных ответов: {count_of_correct_answer}/{max_answers}")
input()
Что в консоли:
Ответ - 1 * 5 = 5
Ответ - 3 * 8 = 24
Ответ - 7 * 6 = 42
Ответ - 8 * 1 = 8
Ответ - 4 * 9 = 36
Ответ - 5 * 2 = 10
(Последние цифры на конце каждой строчки это мой input())
То есть, в чём проблема. Он не до конца завершил свою программу, а дальше не грузит. Что делать? Это моя программа или что-то другое?
P.s: программу делал я брату, чтобы он выучил таблицу умножения, а вопрос про программирование!
Ответы (3 шт):
Программа "не грузит" из-за того, что у вас после n-ого прохода не удовлетворяются два условия, а конкретно:
if not first_digit_random in first_digit_list:
...
if not second_digit_random in second_digit_list:
...
Так что я предлагаю такое решение задачи:
from random import randint, choice
first_digit_list = [i for i in range(11)]
second_digit_list = [i for i in range(11)]
count_of_correct_answer = 0
max_answers = 10
for i in range(max_answers):
first_digit_random = choice(first_digit_list)
second_digit_random = choice(second_digit_list)
user_input_math = input(f"Ответ - {first_digit_random} * {second_digit_random} = ")
if user_input_math == (f"{first_digit_random * second_digit_random}"):
count_of_correct_answer += 1
print(f"Правильных ответов: {count_of_correct_answer}/{max_answers}")
input()
твой код не "не грузит", а попадает в бесконечный цикл, из-за того что длина first_digit_list растёт быстрее, чем this_answer_number. Выведи first_digit_list и поймёшь почему.
В процессе выполнения программы один из списков оказывается заполнен всеми числами от 1 до 9, в результате условие if not first_digit_random in first_digit_list: (или второй if) не срабатывают и программа зависает - не может сделать .append() и продвинуться дальше.