Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在一场牛与牛的比赛中,我总是得到错误的公牛数量?_Python_Python 3.x - Fatal编程技术网

Python 为什么在一场牛与牛的比赛中,我总是得到错误的公牛数量?

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

这里是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 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: