我的randomNumber生成器再次发挥很奇怪

时间:2017-01-17 00:04:01

标签: python-3.x

现在这是randomNumber在Python中猜测测验代码的初学者版本。你们中的许多人都可以看到它,并使它缩短4倍,我得到它。然而,这个问题的关键在于我不确定这个问题背后的逻辑。 如果您执行此代码,它将正常工作 - 直到您再次播放部分。 键入否时 - 程序按预期退出。是的,再次开始。 但是,如果你先输入Yes并且游戏再次进行游戏并且你决定现在我要退出 - 这次你必须输入No两次。 然后就退出了。我不知道为什么。想法?

import random

def game(x,y):
    con = True
    count = 0
    ranNum = random.randint(x,y)
    while con:
        userInput = int(input("Take a guess between these numbers {} and {}: ".format(x,y)))
        count +=1
        if userInput == ranNum:
            print("You got it!")
            print("Number of tries: {}.".format(count))
            print("Play again?")
            while True:
                again = input("> ")
                if again.lower() == "yes":
                    game(x,y)
                elif again.lower() == "no":
                    con = False   
                    break
        elif userInput < ranNum:
            print("Wrong! Try higher!")
        elif userInput > ranNum:
            print("Wrong! Try lower!")

game(5,10)

2 个答案:

答案 0 :(得分:0)

最简单的解决方案:当用户回答“是”时,您需要在调用游戏()后休息或返回。

这有一个令人遗憾的副作用,即每个连续的游戏都会向堆栈添加另一个调用。一个更好的设计会再次推动游戏?&#39;提出了游戏功能。

答案 1 :(得分:0)

问题是你自己正在运行game(x, y)。因此,con是一个局部变量。可以这样想:当你第一次输入时,它会从game(x, y)内运行的game(x, y)退出。因此,你玩过的次数是你需要的次数型号。更简单的方法是,像@xulfir所说,将"Play again?"循环放在函数之外,或者你可以放exit()而不是使用break来杀死程序。