2016-04-02 103 views
0
def getUsername(): 
username = raw_input("Enter Your Username: ") 
if not username[0].isalpha(): 
    print "wrong" 
    getUsername() 
else: 
    return username 

我試圖檢查字符串用戶名的第一個字符是字母字符,如果它不能再要求HES用戶名的用戶,如果它是將其設置爲用戶名。得到一個沒有價值,我不知道爲什麼

但是當我運行通過函數更多一次我回來的價值無從用戶名我的意思是當我運行該函數,並給它一個壞值,一旦它工作正常,並再次問我一個值但是當我打印出我獲得的價值無。

你能告訴我爲什麼。

當然如何解決它 感謝的推進和:

+1

作爲一個方面說明,使用一個遞歸函數似乎在頂部,當你可以使用循環來檢查。 – vestlen

+2

使用'while True'循環http://pastebin.com/0DnXSVXe –

回答

2

你在你的遞歸調用缺少returngetUsername()

def getUsername(): 
    username = raw_input("Enter Your Username: ") 
    if not username[0].isalpha(): 
     print "wrong" 
     return getUsername() 
    else: 
     return username 

沒有它,你的函數調用遞歸getUsername(),退出if/else塊並從函數中脫落,這隱含地返回None

data model documentation

這種類型的具有單個值。有這個值的單個對象。該對象通過內置名稱None來訪問。它用於表示在許多情況下缺少值,例如,它是從不顯式返回任何內容的函數返回的。它的真值是假的。

defining functions

return語句返回從函數的值。沒有表達式參數的return返回無。落在函數的末尾也會返回None。

0

爲什麼即使使用遞歸函數也只是使用while循環。

def getUname(): 
    while True: 
     username = raw_input("name:"); 
     if not username[0].isalpha(): 
      print "wrong"; 
     else: 
      return username; 

它應該返回相同的值。

+0

這些函數如何知道跳出循環並且不會永遠運行我看不到任何中斷或任何讓循環停止的東西你能解釋一下嗎? – gomri15

+0

任何循環中的'return'都會打斷循環並返回到前一個函數。不只是循環,如果在代碼塊中的任何地方發生了「返回」,則返回後的代碼永遠不會到達。 –

相關問題