2016-04-02 104 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'都会打断循环并返回到前一个函数。不只是循环,如果在代码块中的任何地方发生了“返回”,则返回后的代码永远不会到达。 –

相关问题