проверить, найдена ли комбинация чисел в списке комбинаций - PullRequest
0 голосов
/ 09 марта 2019

Я создаю программу на Python, имитирующую умножение флэш-карт.Я довольно далеко, но не могу понять, как не повторять комбинации чисел.Как проверить, что пара чисел уже представлена?

from __future__ import division
from itertools import combinations
import random
amountCorrect = 0
amountMissed = 0
comb = combinations([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 2)

print("Type 0 at any time to exit and see your score.")
while True:
  firstNumber = random.randint(1,12)
  secondNumber = random.randint(1,12)
  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.")

1 Ответ

0 голосов
/ 09 марта 2019

Короче говоря, используйте набор для хранения пар чисел, которые вы уже использовали.Вот кодВы никогда не используете 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.

...