我从getInteger
中的用户那里获得了一个值。
我需要在sqInteger
中获取getInteger
的输出。
无论我如何设置参数或缩进sqInteger
函数,变量x
都是未定义的。
我添加了一个返回行来尝试传递x
变量,但这绝对没有帮助。
请帮助我理解我错过的内容!
def getInteger():
while True:
try:
x = int(input('Enter an integer: '))
except ValueError:
print()
print('That\'s not an integer. Try again.')
continue
else:
return x
print(x)
break
def sqInteger(getInteger, x):
y = x**2
print(y)
答案 0 :(得分:0)
这是整个代码吗?您需要在该循环开始之前在代码中的某个位置调用getInteger()
函数。您在任何时候都没有调用函数sqInteger()
。
您的异常处理程序将立即停止评估try
块,并在输入非整数时向下移动到except
块。因此,您可以在sqInteger()
功能之后调用input()
函数。如果用户在终端中键入非整数,它将向下移动到您的异常处理程序并提示用户重试。如果他们输入一个整数,代码将继续评估并运行函数sqInteger
。
为此,您也不需要将getInteger
传递到sqInteger()
函数中。从技术上讲,您可以在Python中将函数作为参数传递,但这不是必需的,可能超出了本程序的范围。
所以下面的代码是合适的:
def getInteger():
while True:
try:
x = int(input('Enter an integer: '))
# variable 'squared' now receives the return value from the function
squared = sqInteger(x) # call to function sqInteger necessary for this function to be executed
except ValueError:
print('That\'s not an integer. Try again.')
continue
else:
print(x) # if user entered 2, prints 2, not 4
return x # this value is still only what the user input, not the result of sqInteger()
break
def sqInteger(x):
y = x**2
print(y)
return y #you need to return values from functions in order to access it from outside the function
将变量传递给函数(作为参数)的原因是为该函数提供对该变量的访问权限。创建函数会为该函数创建一个局部范围,以便在该函数中命名的变量与该函数外部的变量位于不同的命名空间中。这在可能存在许多变量的大型程序中很有用,您需要将它们分开。
由于您已单独定义了一个sqrt函数,因此它无法访问其范围之外的变量。您需要传入您希望有权访问的变量。
您还需要在运行之前调用函数。定义函数仅用于设置函数,以便可以将其作为一个功能单元调用。它对于分离程序中的问题很有用。调用函数的功能非常有用,因为它允许您将代码分开,只提及对函数的单个调用,而不是将整个功能与其余代码混杂在一起。它还允许代码的可重用性。
您还可以通过返回一个值并将此值赋给函数调用来访问平方整数的结果,如下所示:
# lets say x = 4
squared = sqInteger(x)
def sqInteger(x):
y = x**2
return y
这不起作用:
x = input("Enter integer") #lets say you enter 3
squared = sqInteger()
print(squared)
def sqInteger():
print(x) # error: x is not defined
return x**2 # error: x is not defined
该函数无权访问x
等外部变量。必须将这些变量作为参数传递,以便您可以调用此函数并随意设置参数。这是为了程序中的模块化。您可以将各种不同的整数作为参数传递给它,它允许您在需要对整数进行平方时具有可恢复的函数。
编辑:抱歉这是一团糟,我终于修复了我的解释中的所有错误......