2015-11-14 129 views
1
def main(): 
     tests = get_initial_input(tests) 
     assignments = get_initial_input(assignments) 
     exercises = get_initial_input(exercises) 
     labs = get_initial_input(labs) 
     finals = get_initial_input(finals) 
     print(tests, assignments, labs) 


def get_initial_input(x): 
     val = int(input("How many", x , "were there? ")) 
     return val 

main() 

我不斷收到錯誤之前引用:局部變量「X」分配

UnboundLocalError: local variable 'tests' referenced before assignment 

我已經嘗試了很多不同的東西,試圖讓測試去get_initial_input(),但它說,它被引用在分配之前。

當我試圖定義它的第一行代碼時,這怎麼可能?

+1

是的,但當您調用'get_initial_input(tests)'時,'tests'不存在。你期望它打印什麼? – Doorknob

+0

你從來沒有在變量'tests = get_initial_answer(tests)'後面定義變量'tests',所以'test'在執行該行時是未定義的。 – ppperry

+0

另外,就像一個附註,我認爲'get_initial_input(tests)',你的意思是'get_initial_input(「tests」)'和val = int(input(「有多少」,x,「那裏? ))'as'val = int(input(「有多少」+ x +「在那裏?」))'修改後的工作代碼:https://repl.it/B0Ex –

回答

1

我想你正在嘗試將字符串傳遞給你的函數,該函數在輸入提示中使用。一個文字字符串總是被引號括起來。

tests = get_initial_input("tests") 

這將是更容易調試,如果你使用了正確的變量名稱 - 如label - 在你的函數參數。

7

當你使用:

tests = get_initial_input(tests) 

這種情況發生的第一件事就是,Python試圖評估這個:

get_initial_input(tests) 

tests沒有定義呢,所以你得到的UnboundLocalError

+0

但這就是我想要定義測試的方式。我做了一些與此類似的事情,我無法弄清楚爲什麼它不起作用。 –

+0

對不起,但Python不支持'x = x'形式的遞歸變量定義。你需要將其定義爲某種東西。也許你想使用字符串值而不是變量名? – Alexander

0

您正在將未分配的變量tests傳遞給get_initial_input()函數。所以,這就是你收到錯誤的原因。

如果您需要內部get_initial_input()功能X參數的默認值,然後明確地定義它:

def get_initial_input(x=5): 
    ... 

而且在main()稱它爲tests變量不帶參數:

tests = get_initial_input() 

如果您需要名稱(如'How many tests') - 然後傳遞字符串,而不是汽車的功能:

tests = get_initial_input('tests')