2017-11-18 96 views
0

我从getInteger中的用户处获得一个值。如何在另一功能中调用我的功能

我需要从sqIntegergetInteger中获得输出。

无论我如何设置参数或缩进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

这是整个代码?在循环开始之前,您需要在代码中的某个位置调用getInteger()函数。您也不会在任何时候调用功能sqInteger()

您的异常处理程序会立即停止评估try区块,并在输入非整数时将其移至except区块。因此,您可以在input()函数之后调用sqInteger()函数。如果用户在终端中键入非整数,它将向下移动到您的异常处理程序并提示用户重试。如果他们输入一个整数,代码将继续评估并运行功能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。必须将这些变量作为参数传递,以便您可以调用此函数并随意设置参数。这是为了程序中的模块化。您可以将各种不同的整数作为参数传递给它,并且它允许您在任何时候需要使用一个可重用函数来平方整数。

编辑:对不起,这是一个烂摊子,我终于固定的所有错误中,虽然我的解释...

+0

谢谢你的解释,这是非常有帮助的!当我在我的代码中执行编辑时,它不会打印用户输入的整数 - 除了打印整数的平方以外,这是一项要求。它是否跳过这个打印命令,因为输入后直接调用sqInteger(x)? – saj0991

+0

你想打印输入的用户,而不是平方值,是否正确?您实际上需要转到'else'块并将'print(x)'语句移到'return'语句之上。 return语句将停止当前函数的执行,并立即返回到函数被调用的地方 - ergo,之后的print(x)函数将不会运行。我将编辑上面的主代码块以反映这一点。 – cchoe1

+0

明白了!非常感谢! – saj0991