Ваше определение того, когда цифра является быком, немного неясно. Допустим, ваш ключ решения, например, [1, 8, 5, 8]
и ваше предположение 8888
. Число 8 присутствует несколько раз в ключе решения. Итак, у вас есть 2 коровы. Но каков ваш ожидаемый выход для быков в этом случае? Одним из возможных решений (см. Ниже) было бы проверить, присутствует ли каждое предполагаемое число где-либо в ключе решения (даже если это может быть уже корова).
Приведенное ниже решение включает некоторые замечания, уже упомянутые другими (см. Сообщение @ Bill M. ).
Возможное решение:
import random
def game(num_digits):
# generate list of random integers of length num_digits
listnum = [random.randint(0,9) for n in range(num_digits)]
print("Solution key = " + str(listnum))
count=0
while True:
count+=1
print("~~~ Guess: " + str(count) + " ~~~")
print("Please guess " + str(num_digits) + "-digit number: ")
# transform input string (e.g. "1234") to list of integers (e.g. [1,2,3,4])
guess = [int(i) for i in str(input())]
if guess == listnum:
print("You won.")
print("It took you "+str(count)+" guess(es).")
break
else:
cow=0
bull=0
for x in range(0,num_digits):
if guess[x]==listnum[x]:
cow += 1
elif guess[x] in listnum: # look if digit is somewhere else in the solution key (might already be a cow)
bull += 1
print("Cows: "+str(cow)+" Bulls: "+str(bull))
print("++++++++++++++++")
game(4)
Пример вывода:
Solution key = [1, 8, 5, 8]
~~~ Guess: 1 ~~~
Please guess 4-digit number:
2288
Cows: 1 Bulls: 1
++++++++++++++++
~~~ Guess: 2 ~~~
Please guess 4-digit number:
8888
Cows: 2 Bulls: 2
++++++++++++++++
~~~ Guess: 3 ~~~
Please guess 4-digit number:
1858
You won.
It took you 3 guess(es).