Попытка взломать код консольной игры, похожей на игру под названием «Mastermind» для школьного проекта.Пример: http://www.webgamesonline.com/mastermind/ whitecheck должен быть: правильный номер, но неправильная позиция.redcheck должен быть: правильное число и позиция.
однако, если я выполню код, он выдаст ошибку и скажет, что есть 1 whitecheck и 1 redcheck в зависимости от позиции предполагаемого числа, независимо от того, был ли ответдано в конце.
игрок выбирает 4 числа в диапазоне 1-4.Если игрок угадает правильный номер, но он находится в неправильном положении, он должен показать белую точку, чтобы указать это.Если игрок угадывает правильное число и позицию, он должен показывать красную точку, чтобы указать, что.
Проблема в том, что если я запускаю код, подобный этому, он сначала проверит первое число, и если это правильное число, но вв неправильном положении он добавит его в список белых проверок.
Этого не должно быть, если для этого же номера было указано правильное число и позиция, когда он проверяет другое в коде.
Я пытался добавить угаданные ответы к пустому контрольному списку, но мне нужно, чтобы программа проверила их все сразу, так что это не дает мне белую проверку, если есть повторная проверка для того же числа в конце.
import random
code = []
attempts = 3
while len(code) != 4:
for x in range(4):
n = random.randint(1, 4)
if n not in code:
code.append(n)
print(code)
pos1 = str(code[0])
pos2 = str(code[1])
pos3 = str(code[2])
pos4 = str(code[3])
answer = str(pos1) + str(pos2) + str(pos3) + str(pos4)
guess = None
while guess != answer:
positionguess1 = str(input("position 1: "))
positionguess2 = str(input("position 2: "))
positionguess3 = str(input("position 3: "))
positionguess4 = str(input("position 4: "))
checklist = []
whitecheck = 0
redcheck = 0
""" Row 1 code check """
if positionguess1 == pos1:
redcheck += 1
checklist.append(positionguess1)
elif positionguess1 != pos1 and positionguess1 in answer and positionguess1 not in checklist:
checklist.append(positionguess1)
whitecheck += 1
""" Row 2 code check """
if positionguess2 == pos2:
redcheck += 1
checklist.append(positionguess2)
elif positionguess2 != pos2 and positionguess2 in answer and positionguess2 not in checklist:
checklist.append(positionguess2)
whitecheck += 1
""" Row 3 code check """
if positionguess3 == pos3:
redcheck += 1
checklist.append(positionguess3)
elif positionguess3 != pos3 and positionguess3 in answer and positionguess3 not in checklist:
checklist.append(positionguess3)
whitecheck += 1
""" Row 4 code check """
if positionguess4 == pos4:
checklist.append(positionguess4)
redcheck += 1
elif positionguess4 != pos4 and positionguess4 in answer and positionguess4 not in checklist:
checklist.append(positionguess4)
whitecheck += 1
crackattempt = str(positionguess1) + str(positionguess2) + str(positionguess3) + str(positionguess4)
print ("You've entered:", crackattempt)
if crackattempt == answer:
print ("Amount in wrong position with right value:", whitecheck)
print("Amount in the right position and the right value:", redcheck)
print ("cracked the code, you win")
elif attempts == 0:
print ("you lose.")
break
elif crackattempt != answer:
print ("Wrong! Try again.")
print("Amount in wrong position with right value:", whitecheck)
print("Amount in the right position and the right value:", redcheck)
attempts -= 1
Если случайно сгенерированный код, например, '1234' и предполагаемый код '4234, он должен дать мне 3 красных проверки вместо 3 красных проверок + 1 белая проверка
Я думаю, что я решил это путемотделяя красную проверку от заявлений белой проверки.
""" correct number and correct position check """
if positionguess1 == pos1:
redcheck += 1
checklist.append(positionguess1)
if positionguess2 == pos2:
redcheck += 1
checklist.append(positionguess2)
if positionguess3 == pos3:
redcheck += 1
checklist.append(positionguess3)
if positionguess4 == pos4:
checklist.append(positionguess4)
redcheck += 1
""" correct number but wrong position checks """
if positionguess1 != pos1 and positionguess1 in answer and positionguess1 not in checklist:
checklist.append(positionguess1)
whitecheck += 1
if positionguess2 != pos2 and positionguess2 in answer and positionguess2 not in checklist:
checklist.append(positionguess2)
whitecheck += 1
if positionguess3 != pos3 and positionguess3 in answer and positionguess3 not in checklist:
checklist.append(positionguess3)
whitecheck += 1
if positionguess4 != pos4 and positionguess4 in answer and positionguess4 not in checklist:
checklist.append(positionguess4)
whitecheck += 1