我在我的节目中遇到了一个问题,我正在写作。我已经将问题缩小到这两个功能。当您调用函数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;正朝着末尾打印?):
答案 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()