Игра 'Быки и Коровы'
есть задание написать игру Быки и Коровы. Пока без классов, но с отдельным файлом под работающие функции (так сказать, с работающим движком). Сам код
from random import randint
_bulls_cow = {}
user_number = 1522
count = 0
def random_number():
number = randint(1000,9999)
global res
res = [int(x) for x in str(number)]
return res
number = random_number()
print(number)
def number_check(user_number):
count_cows = 0
count_bulls = 0
list_user_number = [int(i) for i in str(user_number)]
for item, i in enumerate(set(number)):
if i in list_user_number:
count_cows += 1
_bulls_cow['cows'] = count_cows
else:
count_cows += 0
_bulls_cow['cows'] = count_cows
for x in enumerate(number):
for k in enumerate(list_user_number):
if k == x:
count_bulls += 1
_bulls_cow['bulls'] = count_bulls
else:
count_bulls += 0
_bulls_cow['bulls'] = count_bulls
return _bulls_cow
print(number_check(user_number))
Застрял на том, что программа считает неправильно. Нужно сделать так, чтобы, когда считались быки, в коровы счетчик не добавлял значение. По отдельности, все считает нормально. Понимаю, что сейчас он так и будет считать, потому что цикла два. Но никак не могу все это разместить в один цикл.
Ответы (1 шт):
Решили Вы задачу правильно. Но я не понимаю зачем Вам при решении этой задачи использовать Setи лишние условия когда вы добавляете к count_cows или count_bulls 0. Подсчет "быков" и "коров" можно сделать в одном цикле, просто оперируя текущим значением и индексом.
def number_check(usr_number):
count_cows = 0
count_bulls = 0
list_user_number = [int(i) for i in str(usr_number)]
print("secret number : " + str(number))
print("current try: " + str(list_user_number))
for idx, item in enumerate(number):
if item in list_user_number:
if list_user_number.index(item) == idx:
count_bulls += 1
else:
count_cows += 1
_bulls_cow['cows'] = count_cows
_bulls_cow['bulls'] = count_bulls
return _bulls_cow