首页 > 解决方案 > 如何确保在while循环中只扣除一次int(python3)

问题描述

所以我创建了一个程序“公牛和奶牛”。在其中,计算机随机生成一个四位数字。然后用户必须猜测一个四位数的数字。如果数字是计算机中的 4 位数字,那么你会得到一头公牛,如果不是,你会得到一头牛。程序一直运行,直到用户获得所有四位数字。

我认为它可以工作,直到我只输入一个数字中的四个,它仍然接受它。我尝试添加一个 if 语句,但是现在它不计算任何已经存在的正确数字。

import random

number = random.choice(range(1000, 9999))
number = str(number)
print(number)

flag = True
while flag:
    cow = 0
    bull = 0
    user = input('Number ')
    user = str(user)
    for item in user:
        x = number.count(item)
        y = int(item)
        if y <= x:
            bull += 1
        else:
            cow += 1


    print(f"You have {bull} bulls, and {cow} cows!")
    if bull == 4:
        print(f'The computers number is {number}')
        flag = False
    else:
        print("Guess again")

我一直在尝试各种不同的方法来尝试解决我的问题,但我就是无法解决:(

标签: pythonpython-3.x

解决方案


制作number. 然后当用户猜对一个数字时,将其从该副本中删除。这样,如果他们对数字的猜测次数超过了数字中出现的次数,则不会复制额外的猜测。

此副本应该是一个列表,因此您可以使用它的remove()方法。

while True:
    cow = 0
    bull = 0
    user = input('Number ')
    num_list = list(number)
    for item in user:
        if item in num_list:
            bull += 1
            num_list.remove(item)
        else:
            cow += 1

    print(f"You have {bull} bulls, and {cow} cows!")
    if bull == 4:
        print(f'The computer's number is {number}')
        break
    else:
        print("Guess again")

推荐阅读