Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中函数中包含的变量值_Python_Variables - Fatal编程技术网

Python中函数中包含的变量值

Python中函数中包含的变量值,python,variables,Python,Variables,我正在编写一个程序,其中的函数guessgetter定义如下: def guessgetter(): print("What number do you choose?") num = int(input()) if num > 100 or num < 1: print("Please choose a number between 1 and 100") guessgetter() def guessgetter(): 打

我正在编写一个程序,其中的函数
guessgetter
定义如下:

def guessgetter():
    print("What number do you choose?")
    num = int(input())
    if num > 100 or num < 1:
        print("Please choose a number between 1 and 100")
        guessgetter()
def guessgetter():
打印(“您选择什么号码?”)
num=int(输入())
如果num>100或num<1:
打印(“请选择一个介于1和100之间的数字”)
猜

我知道这个语法是有效的。但是,当我稍后在代码中(是的,在运行我创建的函数之后)提到
num
时,它表示我没有为它定义一个值。如何修复此问题?

问题在于,虽然num是在函数guessgetter的作用域中定义的,但它没有在代码的其他地方定义。如果要使用函数生成的num值,请尝试将其添加为函数的最后一行

return num
然后调用函数,如下所示:

x = guessgetter()

要将获得的值存储到可在函数外部使用的变量x中。

在函数范围之外的
guessgetter
,变量
num
不存在。如果您以后想知道
num
的值是什么,则必须将变量
num
设置为全局变量(即,可以在任何地方访问)。最简单的方法是添加行

global num
在分配num之前,请将其添加到函数:

def guessgetter():
    print "What number do you choose?"
    global num
    num = int(input())
    if num > 100 or num < 1:
        print("Please choose a number between 1 and 100")
        guessgetter()
def guessgetter():
打印“您选择什么号码?”
全局数
num=int(输入())
如果num>100或num<1:
打印(“请选择一个介于1和100之间的数字”)
猜

您需要从函数返回值,并在调用函数时捕获返回值。您还需要处理尾部递归。这导致:

def guessgetter():
    print("What number do you choose?")
    num = int(input())
    if num > 100 or num < 1:
        print("Please choose a number between 1 and 100")
        num = guessgetter()
    return num

你确定任何类型的全局变量都是Pythonic的吗?是的,可能不是。然而,这确实解决了问题,而不改变任何其他代码行。使用
while
循环:
whilenum>100或num<1:num=int(输入(“请选择一个介于1和100之间的数字”)
我同意用while循环替换递归;我留下它或多或少只是为了说明递归调用的返回值也必须被捕获——如果您保留递归调用的话。
guess = guessgetter()