2017-11-18 40 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