Python 为什么在一场牛与牛的比赛中,我总是得到错误的公牛数量?
这里是Python新手。我正在尝试编写一个奶牛和公牛的游戏。但我似乎不明白为什么我的代码总是返回4个多头而不是正确的多头数 牛和公牛的说明:公牛-无论位置如何,正确数字的数量。Cows-如果位置正确,则正确的位数Python 为什么在一场牛与牛的比赛中,我总是得到错误的公牛数量?,python,python-3.x,Python,Python 3.x,这里是Python新手。我正在尝试编写一个奶牛和公牛的游戏。但我似乎不明白为什么我的代码总是返回4个多头而不是正确的多头数 牛和公牛的说明:公牛-无论位置如何,正确数字的数量。Cows-如果位置正确,则正确的位数 #Cows and Bulls game! #User must correctly guess a computer-generated 4-Digit number. #TASKS: #1. Generate a random 4-digit number. #2. Ask the
#Cows and Bulls game!
#User must correctly guess a computer-generated 4-Digit number.
#TASKS:
#1. Generate a random 4-digit number.
#2. Ask the user to enter the 4-Digit number.
#3. Compare the numbers obtained from the user and generated number.
#4. a correct digit at the correct place gives a cow.
#5. a correct digit at a wrong place gives a bull.
#6. the game continues until the user correctly guesses the number.
import random
cowsNbulls = {
'cow': 0,
'bull': 0,
}
cpu_num = random.sample(range(0,9),4)
print(cpu_num)
num_tries = 0
correct_num = False
while not correct_num:
user_input = int(input("Please choose a 4 digit number: \n"))
user_num = [int(i) for i in str(user_input)]
cowsNbulls['cow'] = 0
cowsNbulls['bull'] = 0
if user_num == cpu_num:
correct_num = True
print("Yay you got the number in {} tries!".format(num_tries))
if user_num != cpu_num:
for i in range(len(user_num)):
if user_num[i] == cpu_num[i]:
cowsNbulls['cow'] += 1
if user_num[i] in cpu_num:
cowsNbulls['bull'] += 1
print(str(cowsNbulls['cow']), "Cows.", str(cowsNbulls['bull']), "Bulls")
num_tries +=1
这是它生成的代码:(我还打印了数字,以手动检查计算机生成的数字。)
在循环的每次迭代中,您都在测试cow和bull(即使它已经找到了cow) 你会想要改变的
如果用户数量[i]==cpu数量[i]:
牛群牛群['cow']+=1
如果cpu_num中的用户_num[i]:
牛头犬['bull']+=1
致:
如果用户数量[i]==cpu数量[i]:
牛群牛群['cow']+=1
cpu_num中的elif user_num[i]:
牛头犬['bull']+=1
只有在没有发现母牛的情况下,才会对公牛进行测试
您可以通过添加一个额外的bull检查来完成类似的操作,如下所示:
如果cpu中的用户数[i]和用户数[i]!=cpu数量[i]:
但在我看来,第一个选项更简洁。在循环中的每个迭代中,您都在测试cow和bull(即使它已经找到了cow) 你会想要改变的
如果用户数量[i]==cpu数量[i]:
牛群牛群['cow']+=1
如果cpu_num中的用户_num[i]:
牛头犬['bull']+=1
致:
如果用户数量[i]==cpu数量[i]:
牛群牛群['cow']+=1
cpu_num中的elif user_num[i]:
牛头犬['bull']+=1
只有在没有发现母牛的情况下,才会对公牛进行测试
您可以通过添加一个额外的bull检查来完成类似的操作,如下所示:
如果cpu中的用户数[i]和用户数[i]!=cpu数量[i]:
但在我看来,第一种选择更为简洁。因为你没有删除使用过的数字,你最终会重复计算多头。因为你没有删除使用过的数字,你最终会重复计算多头。谢谢你的输入。但我的目标是在每轮测试中同时测试奶牛和公牛,而不仅仅是在没有找到奶牛的情况下测试公牛。嗨,丽莎。您正在迭代用户提交的每个字符(数字)。每次你问:“这个角色是牛还是公牛?”——由于你对牛和公牛的定义,两者是相互排斥的。从技术上讲,还有第三个“或者两者都不是?”选项,我们将暂时忽略。仅当给定字符不是cow时,才应检查检查公牛的第二个if语句(因为cow在正确的位置是正确的数字,而bull在错误的位置是正确的数字)。我相信如果你做了更改,我建议你会发现你的计数是正确的。上面同样的说法的另一种方式是奶牛和公牛是互斥的,但是你的代码目前允许奶牛被计数为奶牛和公牛。谢谢你的输入。但我的目标是在每轮测试中同时测试奶牛和公牛,而不仅仅是在没有找到奶牛的情况下测试公牛。嗨,丽莎。您正在迭代用户提交的每个字符(数字)。每次你问:“这个角色是牛还是公牛?”——由于你对牛和公牛的定义,两者是相互排斥的。从技术上讲,还有第三个“或者两者都不是?”选项,我们将暂时忽略。仅当给定字符不是cow时,才应检查检查公牛的第二个if语句(因为cow在正确的位置是正确的数字,而bull在错误的位置是正确的数字)。我相信如果你做了改变,我建议你会发现你的计数是正确的。上面同样的说法的另一种方式是奶牛和公牛是互斥的,但是你的代码目前允许奶牛被计数为奶牛和公牛。
[0, 2, 4, 8]
Please choose a 4 digit number:
8402
0 Cows. 4 Bulls
Please choose a 4 digit number:
0000
1 Cows. 4 Bulls
Please choose a 4 digit number:
9999
0 Cows. 0 Bulls
Please choose a 4 digit number:
2222
1 Cows. 4 Bulls
Please choose a 4 digit number: