Короче говоря, используйте набор для хранения пар чисел, которые вы уже использовали.Вот кодВы никогда не используете combinations
в своем коде, поэтому я удалил его.
from __future__ import division
import random
amountCorrect = 0
amountMissed = 0
highestNumber = 12
print("Type 0 at any time to exit and see your score.")
used = set()
while True:
if len(used) == highestNumber ** 2:
break
while True:
firstNumber = random.randint(1,highestNumber)
secondNumber = random.randint(1,highestNumber)
pair = (firstNumber, secondNumber)
if pair not in used:
used.add(pair)
break
ans = int(input("What is " + str(firstNumber) + " x " + str(secondNumber) + ": "))
if ans == 0:
break
elif ans == firstNumber * secondNumber:
amountCorrect += 1
else:
amountMissed += 1
totalProblems = amountCorrect + amountMissed
percentCorrect = amountCorrect/totalProblems
if .9 < percentCorrect <= 1:
print("Great job, you are doing awesome!")
elif .7 <= percentCorrect <= .89:
print("You are doing well,keep it up.")
elif .5 <= percentCorrect <= .69:
print("You are half way to becoming a master.")
else:
print("Keeping practicing, you will be a master one day.")
Я просто создал пустой набор с именем used
и добавил новый внутренний цикл.Это проверка цикла, если пара чисел уже была использована.Если это так, он просто повторяет цикл и пробует новую пару чисел.Я также добавил переменную для хранения максимально возможного числа, и проверка набора used
заполнена.Я заканчиваю тест, если он полон.Без этого, когда будут опробованы все возможности, программа перейдет в бесконечный цикл.
Обратите внимание, что этот код будет разрешать как 1,2
, так и 2,1
.Если вы хотите разрешить только один из них, добавьте (firstNumber, secondNumber)
и (secondNumber, firstNumber)
к набору used
.