Python:这两个函数有什么不对?

时间:2013-04-03 14:04:59

标签: python function python-3.x call

我在我的节目中遇到了一个问题,我正在写作。我已经将问题缩小到这两个功能。当您调用函数enterPasswords,输入无效数据(例如' a'),然后通过输入有效数据(例如' hello')来中断passwordLength函数时,会出现问题。我在那里留下了一些打印声明,以帮助您查看问题。我尝试过添加退货,但仍然会出现同样的问题。

任何建议都将不胜感激。如果你能告诉我为什么会出现这个问题,我相信我自己可以解决它。感谢。

    def passwordLength(password):
        if (len(password) < 4) or (len(password) > 15):
            print("Error from server: Your password must be at least four and at most fifteen characters long.")
            enterPasswords()


    def enterPasswords():
        password = input("Input password: ")
        passwordLength(password)
        print(password)
        password2 = input("Re-enter password: ")
        print(password, password2)


    enterPasswords()

这是我的问题的图像(我想知道的是,为什么程序在我突出显示的地方结束,为什么会继续,以及为什么&# 39; a&#39;正朝着末尾打印?):

http://i.imgur.com/LEXQFTO.png

3 个答案:

答案 0 :(得分:4)

如果用户首先输入了无效密码,则会重复enterPasswords - 但是,如果用户成功完成此操作,则会返回初始enterPasswords。相反,尝试

def passwordLength(password):
    if (len(password) < 4) or (len(password) > 15):
        print("Error from server: Your password must be at least four and at most fifteen characters long.")
        return False
    return True


def enterPasswords():
    password = input("Input password: ")
    while not passwordLength(password):
        password = input("Input password: ")

    print(password)
    password2 = input("Re-enter password: ")
    print(password, password2)

这将继续要求用户重新输入第一个密码,直到它有效,然后才会要求用户确认。

答案 1 :(得分:0)

passwordLength()中的密码变量与enterPasswords()中的变量完全无关。行为可能也不像您期望的那样。尝试这样的事情:

def passwordLength(pw):
    return 4 <= len(pw) <=15

def getPw():
    return input("Enter password: ")

def enterPasswords():
    pw = getPw()
    while not passwordLength(pw):
        print("Incorrect password length.")
        pw = getPw()

    # ...

答案 2 :(得分:0)

你的功能正以一种糟糕的方式相互呼唤。如果您尝试逐行跟踪您的算法(使用您提到的'a'和'hello'的情况),您可能会看到问题。

这是一个解决方案:

def passwordLength(password):
    if (len(password) < 4) or (len(password) > 15):
        print("Error from server: Your password must be at least four and at most fifteen characters long.")
        return False
    else : return True    


def enterPasswords(): 
    passwordOK = False
    while not passwordOK :
        password = input("Input password: ")
        passwordOK = passwordLength(password)
    print(password)
    password2 = input("Re-enter password: ")
    print(password, password2)

enterPasswords()