Игра 'Быки и Коровы'

есть задание написать игру Быки и Коровы. Пока без классов, но с отдельным файлом под работающие функции (так сказать, с работающим движком). Сам код

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 шт):

Автор решения: Peter Lavreniuk

Решили Вы задачу правильно. Но я не понимаю зачем Вам при решении этой задачи использовать 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
→ Ссылка