Не правильно вычисляет одинаковые числа
import random
a = 0
b = 0
c = 0
d = 0
cows = 0
bulls = 0
nig = 0
player = 0
a = random.randrange(1, 10)
b = random.randrange(10)
c = random.randrange(10)
d = random.randrange(10)
while b == a:
b = random.randrange(10)
while c == a or c == b:
c = random.randrange(10)
while d == a or d == c or d == b:
d = random.randrange(10)
number_sof_comp = str(a) + str(b) + str(c) + str(d)
player = str(input("Computer guessed a number.What is your guess:"))
list(player)
if a == int(player[0]):
bulls = bulls + 1
if a == int(player[1]) or int(player[2]) or int(player[3]):
cows = cows + 1
if b == int(player[1]):
bulls = bulls + 1
if b == int(player[0]) or int(player[2]) or int(player[3]):
cows = cows + 1
if c == int(player[2]):
bulls = bulls + 1
if c == int(player[1]) or int(player[0]) or int(player[3]):
cows = cows + 1
if d == int(player[3]):
bulls = bulls + 1
if d == int(player[1]) or int(player[2]) or int(player[0]):
cows = cows + 1
print("bulls-" + str(bulls))
print("cows-" + str(cows))
print(number_sof_comp)
Эта программа должна выдавать случайное число без повторяющихся цифр, после она должна сравнить это число с числом которое ввел пользователь, если в в первом есть одинаковые числа то программа должна добавить +1 к "cows", если есть одинаковые по местоположению то +1 к "bulls". Проблема в том что "cows" нормально не плюсуется и просто всегда выдает 4.
Ответы (2 шт):
Все выражения типа b == int(player[0]) or int(player[2]) or int(player[3]) будут истинным, если пользователь введет строку хотя бы из 4 символов и один из них не '0'. По-этому, каждое такое условие в большинстве случаев добавляет 1 к cows.
Истинны эти выражения потому, что каждое такое выражение трактуется как A or B or C, где A - b == int(player[0]). B - int(player[2]) и C аналогично.
Выражение int(player[2]) равно целому числу, которое получается преобразованием символа в позиции 3 из ввода пользователя к int. Когда же int используется в логическом выражении (т.е. как условие в if), то осуществляется преобразование int к bool, которое возвращает true для любого целого кроме 0:
>>> bool(1)
True
>>> bool(0)
False
Вероятно, вы имели ввиду такое условие b == int(player[0]) or b == int(player[2]) or b == int(player[3]), хотя не совсем понятно зачем проверка player[2] и player[3] в этом условии вообще.
Не уверен что правильно вас понял, но попробуйте так:
import random
number_sof_comp = ''
while len(number_sof_comp) != 4:
number_sof_comp = str(random.randrange(1, 9999))
number_sof_comp = number_sof_comp if len(set(number_sof_comp))==4 else ''
print(number_sof_comp)
player = input("Computer guessed a number.What is your guess: ssss ")
# list(player) # ???
cows, bulls = 0, 0
for i in range(4):
if number_sof_comp[i] == player[i]:
bulls += 1
else:
_p = player[:i] + player[i+1:]
if number_sof_comp[i] in _p:
cows += 1
print(f"bulls = {bulls}")
print(f"cows = {cows}")
print(number_sof_comp)