变量接缝在以后被调用时不被分配

时间:2017-08-15 16:40:37

标签: python

我正在制作一个程序,让你猜出从0到给定数字g的数字。但是一个启动新游戏接缝的功能永远不会定义变量。

import random
g = 100
def new_game():
    secret_number = random.randint(0,g)
    return secret_number
def input_guess(x):
    x = int(x)
    print "guess was",x
    if x > secret_number:
        print "lower"
    elif x < secret_number:
        print "higher"
    if x == secret_number:
        print "correct"
new_game()
input_guess(33)

无论我改变什么,接缝总是说secret_number没有被定义

NameError: name 'secret_number' is not defined

任何帮助?

4 个答案:

答案 0 :(得分:1)

secret_numbernew_game()函数中的局部变量,因此,您必须全局存储它:

secret_number = new_game()

将secret_number作为参数传递给input_guess()

def input_guess(x, secret_number):
    x = int(x)
    print "guess was",x
    if x > secret_number:
        print "lower"
    elif x < secret_number:
        print "higher"
    if x == secret_number:
        print "correct"

答案 1 :(得分:0)

这里有两个选项,一个是使secret_number成为一个全局变量,所以任何函数都可以访问它,但是这通常不是一个很好的选择,正如@alexander所说,所以这不是建议的方式:

import random
g = 100
def new_game():
    global secret_number
    secret_number = random.randint(0,g)
    return secret_number
def input_guess(x):
    global secret_number
    x = int(x)
    print "guess was",x
    if x > secret_number:
        print "lower"
    elif x < secret_number:
        print "higher"
    if x == secret_number:
        print "correct"
new_game()
input_guess(33)

我在这里所做的是使全局secret_number变量,这意味着该变量在所有方法中都是相同的。

更好的方法是在返回后存储secret_number的值,并将其作为参数传递给input_guess

import random
g = 100
def new_game():
    secret_number = random.randint(0,g)
    return secret_number
def input_guess(x, secret_number):
    x = int(x)
    print "guess was",x
    if x > secret_number:
        print "lower"
    elif x < secret_number:
        print "higher"
    if x == secret_number:
        print "correct"
number = new_game()
input_guess(33, number)

这使得number等于secret_number返回的new_game(),然后将该变量提供给input_guess(),以便为其提供密码。

答案 2 :(得分:0)

试试这个:

    import random
    g = 100
    def new_game():
        secret_number = random.randint(0,g)
        return secret_number
    def input_guess(x, secret_number):
        x = int(x)
        print "guess was",x
        if x > secret_number:
            print "lower"
        elif x < secret_number:
            print "higher"
        if x == secret_number:
            print "correct"
    secret_number = new_game()
    input_guess(33, secret_number)

因为secret_number不是全局变量,所以input_guess方法并不知道&#34;它是什么&#34;。

答案 3 :(得分:0)

感谢所有帮助。我自己设法解决了这个问题,这有点像Joykills的回答

import random
g = 100
secret_number = 0
def new_game():
    global secret_number

这样我访问全局变量secret_number并允许在我的函数中更改它

    secret_number = random.randint(0,g)
    return secret_number
def input_guess(x):
    x = int(x)
    print "guess was",x
    if x > secret_number:
        print "lower"
    elif x < secret_number:
        print "higher"
    if x == secret_number:
        print "correct"
new_game()
input_guess(33)