Задать вопрос
@SillyIdiot
Самый умный из людей

Почему в моей реализации игры «Быки и коровы» не происходит подсчет коров?

import random
game_array1 = [n for n in range (1000, 10000)]
game_array2 = []
BullsCounter = 0
CowsCounter = 0
rndm = str(random.choice(game_array1))
print(rndm)
BullsCows=str(input())
for element in game_array1:
 for x in range(4):
  if str(game_array1[element-1000])[x] == rndm[x]:
   BullsCounter += 1
   for y in range(4):
    if (str(game_array1[element-1000])[x] == rndm[y] and x!=y) :
     CowsCounter += 1
 if BullsCounter == int(BullsCows[0]) and CowsCounter == int(BullsCows[1]):
  game_array2.append(game_array1[element-1000])
 BullsCounter = 0
 CowsCounter = 0   
print(game_array2)

Занят я логической игрой. Называется быки-коровы. Юзер программы загадывает любое 4значное число, а программа должна его отгадать. Как? Сейчас расскажу. Первым выводом программы - у меня это число rndm - является любое число из массива. Пользователь же должен ввести 2значное число, первая цифра которой - количество полных совпадений загаданного числа с rndm - то есть одинаковые цифры стоят на одинаковом месте, а вторая цифра - количество неполных совпадений, то есть цифры одинаковые, но, зараза, на разных местах стоят. При этом если есть такие совпадения, как, например, rndm = __9_, а мы загадали _99_, считается только "бык" - 3 цифра числа, вторая в пролете.
Так о чем я. Мною написанный кусок кода почему-то решил на время забыть, что существуют коровы, и выводит совпадения только по быкам.
ПРИМЕЧАНИЕ. Сейчас я сделал только первый проход через элементы массива 1000..10000, знаю, цикл замучу опосля. Не могли бы Вы написать, в чём проблема кода?
  • Вопрос задан
  • 354 просмотра
Подписаться 1 Средний 16 комментариев
Пригласить эксперта
Ответы на вопрос 3
@asd111
Эту задачу можно решить проще. Сначала предлагаешь пользователю число 1000, потом 2000 и т.д. до 9000 и в зависимости от ответа либо оставляешь цифру как есть либо меняешь на 100, 10, 1 т.е. двигаешь цифру слева направо по числу пока цифра не встанет на своё место. И так с каждой цифрой.
Например пользователь сказал что в числе 9000 цифра 9 на своём месте, тогда прелагаешь 9100 и т.д.
Ответ написан
@estj
prepodavatel Vuza po background programming
Есть вариант не про два , а про четыре числа , так интереснее
см в книге у Романа Сузи ''Python в подлиннике'' в конце там эта игра и код неплохой,
хотя и на старом Питоне, я школьникам много лет её давал и вместе, коллективно
играли с компьютером, и всякий раз счет не лучше 1:4 в его пользу, хотя всей
группой обсуждали каждый ход....
Ответ написан
@deniz1983
...
Еще одно решение задачи: https://www.practicepython.org/solution/2014/07/18...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы