2017-09-25 42 views
2

所以我剛剛開始編寫代碼,詢問用戶他們想要進行測試的主題以及他們希望實現的難度,然後顯然給他們做測試。我爲if語句創建了一個函數,用來檢查它是什麼樣的測試以及它應該是多麼困難,並且我只是做了一個隨機的一次性函數來測試代碼。我會告訴你代碼(顯然非常早 - 阿爾法並且沒有完成)然後我會解釋這個問題。如何使一個函數從Python的函數外部獲取變量?

def which_test(real_dif, real_test, give_test): 
    if difficulty == real_dif and test == real_test: 
     give_test 

def easy_CS(): 
    print("HEY") 

while True: 
    test = str(input("What test do you want to take? Computer Science, History or Music? ").strip().lower()) 
    difficulty = str(input("Do you want to take the test in easy, medium or hard? ").strip().lower()) 
    which_test("easy", "computer science", easy_CS()) 

問題是,無論輸入變量是什麼,easy_CS()函數都會被激活。我可以爲test變量輸入「JFAWN」,爲difficulty變量輸入「JDWNA」,它仍然會輸出「HEY」。我該如何做到這一點,才能真正接受變量,或者我怎樣才能做到這一點,以便它按照預期的方式工作?

+0

使用全局變量應該會有幫助! –

+3

你在錯誤的地方調用函數。你需要移動引起它在'which_test'內調用的圓括號,所以你傳遞*函數*,而不是它的*結果*。 @ChetanVasudevan這是很少,如果真的。 – jonrsharpe

+0

@chetanvasudevan你爲什麼會建議使用'global'?這裏沒有必要。 – roganjosh

回答

6

這是因爲你你自己調用這個函數。在這裏看到括號?他們調用函數:

which_test("easy", "computer science", easy_CS()) 
             ^^^^^^^^^^ 

你的意思怎麼辦:

def which_test(real_dif, real_test, give_test): 
    if difficulty == real_dif and test == real_test: 
     give_test() # call the function 

# more code... 
which_test("easy", "computer science", easy_CS)) 
      # pass the function itself ^^^^^^ 

所以,沒有括號 - 沒有函數調用。

相關問題