2013-03-26 130 views
2

所以我得到一段代碼讓我頭疼。如何僅當if語句爲真時才返回值?

def Handy(): 
    print "\nMöchten Sie ein neues Handy?" 
    print "\n1 - Ja\n2 - Nein" 

    handy = raw_input(">>> ") 

    if handy == "2": 
     print "\nSie möchten kein neues Handy" 
    elif handy == "1": 
     wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ") 
    else: 
     Handy() 
    return handy, wunschhandy 

如果我選擇選項"1"一切都很好。但如果我去"2"它給了我這個錯誤:"UnboundLocalError: local variable 'wunschhandy' referenced before assignment"

我知道它爲什麼發生,或者至少我想我知道爲什麼。這是因爲var wunschhandy未被刪除,因爲我使用了選項"2"

那麼,如何解決這個問題?有沒有辦法只返回一個值,如果它已經被賦予了右邊的選擇?

+2

你真的想返回或者字符串「2」或含2元組「1」還有其他什麼?調用者使用返回值做什麼? – geoffspear 2013-03-26 17:23:45

+1

與您的問題並不完全相關,但是當您在'else'塊中調用'Handy()'時,您不會對結果做任何事情。你可能想'返回Handy()'。 (另外,如果用戶在連續輸入500次時輸入了錯誤的輸入,則通過調用自身來重複該函數會導致崩潰,但這不太可能是一個實際問題。) – Kevin 2013-03-26 17:24:57

+0

不,我不想返回該函數。我只是想運行它。 – Krytos 2013-03-26 17:34:32

回答

1

在你的情況我會在if語句之前設置wunschhandy = None

在這種情況下,你有一個定義的值,調用者可以測試它。

另一種選擇是

if handy == "2": 
    print "\nSie möchten kein neues Handy" 
    return handy, 
elif handy == "1": 
    wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ") 
    return handy, wunschhandy 
else: 
    Handy() 

返回長度爲2的對選項1的元組和長度爲1的用於選擇2元組的呼叫者可以很容易地測試。

此外,而不是調用Handy()遞歸,我會把一個循環裏面。否則,你可能最終在一個堆棧溢出錯誤...

0

正是基於你提供的代碼的一小段,它似乎是「wunschhandy」變量只能被定義,如果「方便==‘1’」,但這個變量是在結束返回。我會將wunschhandy設置爲等於if語句之上的空值,以便在嘗試在最後返回它之前定義該變量。

0

這是因爲變量wunschhandy返回之前,它是申報。只有當你輸入1時,它才被聲明。您可以在if語句之前聲明wunschhandy併爲其指定一個默認值。

1

如果你想返回wunschhandy僅當用戶選擇「1」,然後將內return語句的if塊

def Handy(): 
    print "\nMöchten Sie ein neues Handy?" 
    print "\n1 - Ja\n2 - Nein" 

    handy = raw_input(">>> ") 

    if handy == "2": 
     print "\nSie möchten kein neues Handy" 
     return handy 
    elif handy == "1": 
     wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ") 
     return handy, wunschhandy 
    else: 
     Handy() 
     //do you want to return Handy()? 
0

只是初始化wunschhandy,所以它的範圍:

def Handy(): 
    handy = raw_input("Moechten Sie ein neues Handy?\n1 - Ja\n2 - Nein\n>>> ") 

    wunschhandy = None 
    if handy is "2" : 
     print "\nSie moechten kein neues Handy" 
    elif handy is "1" : 
     wunschhandy = raw_input("\nBitte geben sie den Namen des Handys ein: ") 
    else : 
     Handy() 
    return handy, wunschhandy