Python中的策划者游戏

2024-10-05 10:14:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在你的网站上看过这篇文章了,但是我问的问题有点不同,因为我被赋予了不同的任务。

这是一个问题:

生成一个随机的四位数。玩家必须不断输入四位数字,直到他们猜出随机生成的数字。每一次不成功的尝试后,应该说明他们正确的数字有多少,而不是他们正确的位置。在游戏结束时,应该向用户表示祝贺,并告诉他们尝试了多少次。

到目前为止我已经做到了:

from random import randint

n1 = randint (1,9)
n2 = randint (1,9)
n3 = randint (1,9)
n4 = randint (1,9)
numberswrong = 0
print (n1,n2,n3,n4)
guess1 = input("guess the first number")
guess2 = input("guess the second number")
guess3 = input("guess the third number")
guess4 = input("guess the fourth number")
guess1 = int (guess1)
guess2 = int (guess2)
guess3 = int (guess3)
guess4 = int (guess4)
if guess1 != n1:
    numberswrong +=1
else:
    numberswrong +=0   
if guess2 != n2:
    numberswrong +=1
else:
    numberswrong +=0 
if guess3 != n3:
    numberswrong +=1
else:
    numberswrong +=0 
if guess4 != n4:
    numberswrong +=1
else:
    numberswrong +=0 
print ("you got",numberswrong, "numbers wrong")
if numberswrong == 0:
    print ("Well done")
while numberswrong != 0:
    guess1 = input("guess the first number")
    guess2 = input("guess the second number")
    guess3 = input("guess the third number")
    guess4 = input("guess the fourth number")
    guess1 = int (guess1)
    guess2 = int (guess2)
    guess3 = int (guess3)
    guess4 = int (guess4)
    if guess1 != n1:
        numberswrong +=1
    else:
        numberswrong +=0   
    if guess2 != n2:
        numberswrong +=1
    else:
        numberswrong +=0 
    if guess3 != n3:
        numberswrong +=1
    else:
        numberswrong +=0 
    if guess4 != n4:
        numberswrong +=1
    else:
        numberswrong +=0 
    print ("you got",numberswrong, "numbers wrong")
print ("Well done")

打印(n1,n2,n3,n4)只是为了测试代码,而不是真正的代码。我有两个问题。首先,如果你第一次猜到数字,会显示两个“做得好”,其次,我如何在不破坏while循环的情况下清除numberswrong变量。如果我不做任何事情,numberswrong变量每次都会上升,当你猜对的时候,你猜错了四个之后,当numberswrong等于25或类似值时,您不会得到很好的消息。另外,如果在while循环结束时只说numberswrong=0,while循环认为得到了正确的结果,并且说做得很好。我不知道解决办法是什么。可能是循环计数器?

如果你能帮忙,我将不胜感激

编辑:我明白为什么“做得好”要印两遍了。至于第二个问题。还是看不见。

编辑二:@moose。我会尽我所能回答这个问题。当我按run时,程序会告诉我数字1-4是什么,然后告诉我错误的数字。唯一的问题是数字的数目增加了,而且没有被清除。假设我把所有的数字都错了3次。第三次说你错了12个号码。很明显我不会弄错12个数字,因为只有4个数字可以猜。每次传球后,我都能看到while循环没有清空时发生了什么。我想我知道解决办法。说出某处numberswrong=0以清除循环。但我不知道该把这句话放在哪里。


Tags: thenumberinputif数字elseintrandint
2条回答

你刚刚忘记将numberswrong变量重置为零:)

另外,为了发现错误,请尽量使代码更简单。

  • 数数正确的数字,而不是错误的数字!
  • 使用列表而不是复制粘贴代码。
  • 一旦您觉得循环更容易使用,请使用python生成器
  • 使用文本格式而不是字符串连接。
  • 用有意义的名称命名变量(当可以称之为“num-tries”时,避免使用“c”)
  • 评论!

如果您尝试应用所有这些建议,则最终代码应如下所示:

from random import randint

# Init variable
numbers = [randint(1, 9) for _ in range(4)]
num_tries = 0
guesses = None

# Loop while numbers and guesses are not the same.
while numbers != guesses:
    # Ask user to guess the 4 values
    guesses = [
        int(input("guess the first number: ")),
        int(input("guess the second number: ")),
        int(input("guess the third number: ")),
        int(input("guess the fourth number: "))
    ]

    num_tries += 1

    # Display message with number of right numbers.
    num_right_numbers = len([1 for i in range(4) if numbers[i] == guesses[i]])
    print 'You got {0} numbers right.'.format(num_right_numbers)

# User won, print message and quit.
print 'Well Done!'
print 'It took you {0} tries to guess the number!'.format(num_tries)

这是更新的代码!我用了一个变量c来记录尝试的次数。当用户正确猜出数字时,我也会跳出无限循环。

from random import randint

n1 = randint(1,9)
n2 = randint(1,9)
n3 = randint(1,9)
n4 = randint(1,9)
c = 1

while True:
    print (n1,n2,n3,n4)
    guess1 = input("guess the first number")
    guess2 = input("guess the second number")
    guess3 = input("guess the third number")
    guess4 = input("guess the fourth number")
    guess1 = int(guess1)
    guess2 = int(guess2)
    guess3 = int(guess3)
    guess4 = int(guess4)
    numberswrong = 0

    if guess1 != n1:
        numberswrong += 1
    if guess2 != n2:
        numberswrong += 1

    if guess3 != n3:
        numberswrong += 1

    if guess4 != n4:
        numberswrong += 1

    if numberswrong == 0:
        print('Well Done!')
        print('It took you ' + str(c) + ' ries to guess the number!')
        break
    else:
        print('You got ' + str(4-numberswrong) + ' numbers right.')
    c += 1

相关问题 更多 >

    热门问题