定义函数困难[“NameError:name'number'未定义”]

时间:2017-11-03 04:18:41

标签: python-3.x function undefined

好的,尝试制作一个简单的猜数字游戏,但我找不到这段代码中的错误。仍然是python的新手,所以可能是原因,但我无法弄清楚它有什么问题。

    import random
    from time import sleep


    def start():
       print("Welcome To The Guessing Game \n Try to guess the number I'm thinking of \n Good luck!")
        selectRandomNumber()
        guessCheck(number, numberInput=1)

    def restart():
        print("Creating new number ...")
        sleep(1)
        print("OK")
        selectRandomNumber()
        guessCheck(number,numberInput=1)

    def selectRandomNumber():
        number = random.randint(0,1000)
        tries = 0
        return


    def tryAgain():
        while True:
            try:
                again = int(input("Do you want to play again? y/n:"))
            except ValueError:
                print("Couldn't understand what you tried to say")
                continue
            if again == "y" or "yes":
                print("Awesome! Lets go")
                restart()
            elif again == 'n' or "no":
                print("Goodbye!")
                break
            else:
                print("Not a valid option")
                continue


    def guessCheck(number,numberInput=1):
        while True:
            try:
                numberInput = int(input("What number do you think it is?: "))
            except ValueError:
                print("Couldn't understand that. Try again")
                continue
            if numberInput > number:
                print("Too high")
                tries += 1
                continue
            elif numberInput < number:
                print("Too low")
                tries += 1
                continue
            elif numberInput == number:
                print("Congrats! You got my number")
                tryAgain()

    number = selectRandomNumber()
    print(number)
    start()

每次我尝试运行该程序时,我都会遇到同样的错误。 它告诉我:

    Traceback (most recent call last):
      File "python", line 60, in <module>
        start()
      File "python", line 8, in start
        guessCheck(number, numberInput)
    NameError: name 'number' is not defined

不太明白这意味着什么。 一些帮助将不胜感激。谢谢!

*更新*

能够修复关于定义变量的部分,但现在新问题发生在我尝试运行的时候

与之前相同的代码但添加了 guessCheck(number,numberInput=1)

并在末尾添加了变量number

    number = selectRandomNumber()
    print(number)
    start()

当我运行它时,我得到了这个

    None                 # this is from `print(number)` so instead of getting a number here I'm getting `None`
    Welcome To The Guessing Game 
    Try to guess the number I'm thinking of 
    Good luck!
    What number do you think it is?: 

1 个答案:

答案 0 :(得分:0)

Traceback正在告诉你:

  1. 我们得到start()
  2. start()名为guessCheck()
  3. 我们尝试将两条信息传递给guessCheck():变量名numbernumberInput
  4. 我们还没有定义这些变量!在我们已经开始numberInput之后,guessCheck()才会被定义,并且number实际上并未在任何地方定义。
  5. 正如Manoj在评论中指出的那样,您可能希望number保持selectRandomNumber()的输出。因此,不要只在selectRandomNumber()中调用start(),而是尝试使用number = selectRandomNumber()

    您可以在此后的行上添加print(number),以确保number分配了值。

    现在number有一个值,进入您对guessCheck()的调用。但仍然保留了numberInput未定义。您可以为函数参数设置默认值,如下所示:

    guessCheck(number, numberInput=1)
    

    这样,当调用guessCheck但numberInput尚未定义时,它会自动为其赋值1,直到您明确设置它为止。

    您的代码可能会遇到其他问题。我的建议是简单地开始 - 从每个单独的部分构建你的游戏,并且只有当你确定每个人都在工作时才把它们放在一起。这可能看起来更慢,但试图走得太快会引起像这样的误解。