Python代码中append()方法仅追加一次问题求助
问题原因与修复方案
你的问题出在条件判断的逻辑上——你用了elif(互斥分支),这意味着只要某一个条件成立,后续所有的条件判断都会被跳过。比如如果密码同时太短、全小写又没有数字,程序只会执行第一个if len(a) <12的append,后面的判断根本不会走,所以epicfail里只会有一条错误。
另外还有个隐藏问题:你在numberchecker和spacechecker里硬编码用了全局变量x,而不是函数参数a,这会导致如果后续passwordvalidator传入其他值时,判断逻辑会出错。
修复后的代码:
x = input("Input Password: ") epicfail = [] def numberchecker(b): return any(i.isdigit() for i in b) def spacechecker(c): return any(o.isspace() for o in c) def passwordvalidator(a): # 把所有elif改成独立的if,让每个条件都能被检查 if len(a) < 12: epicfail.append("Your password is too short!") if a.islower() == True: epicfail.append("Your password contains zero uppercase letters!") if a.isupper() == True: epicfail.append("Your password contains zero lowercase letters!") if numberchecker(a) == False: # 这里把x改成参数a epicfail.append("Your password contains zero numbers!") if spacechecker(a) == True: # 同样把x改成a epicfail.append("Your password contains a whitespace!") return epicfail print(passwordvalidator(x))
改动说明:
- 将所有
elif替换为if,让每个条件判断独立执行,只要密码不符合对应规则,就会追加对应的错误信息到列表里。 - 修正
numberchecker和spacechecker的调用参数,从全局变量x改为函数传入的a,保证判断逻辑和当前验证的密码一致。
这样修改后,只要密码同时满足多个不符合条件,所有对应的错误信息都会被追加到epicfail列表里。
内容的提问来源于stack exchange,提问作者Christiaan Prinsloo
相关产品推荐
相关产品推荐

