获得无价值,我不知道为什么

时间:2016-04-02 21:47:53

标签: python-2.7

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

我正在尝试检查字符串username的第一个字符是否是按字母顺序排列的字符,如果不是再次向用户询问他的用户名,并且是否将其设置为用户名。

但当我运行更多的功能时,我回到了值从用户界面,我的意思是,当我运行该功能并给它一个错误的值,一旦它工作正常,并再次问我一个值,但当我打印出值时,我会回到无。

你可以告诉我原因吗。

当然如何修复它 谢谢你的进步:

2 个答案:

答案 0 :(得分:2)

您在return的递归通话中错过了getUsername()

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访问此对象。它用于表示在许多情况下缺少值,例如,从未明确返回任何内容的函数返回。其真值为false。

defining functions上:

  

return语句返回一个函数的值。没有表达式参数的 return返回None。从函数末尾开始也会返回None。

答案 1 :(得分:0)

为什么甚至使用递归函数只需使用while循环。

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

它应该返回相同的。