函数不允许我在函数外部显示错误消息?



我创建了一个代码,它试图成为一个密码检查器,它检查输入的密码是否超过 8 个字符,具有大写和小写字符以及一个数字。但是,当尝试显示错误消息告诉用户他们缺少密码的哪个方面(例如"请至少包含一个小写字母"(时,它不会显示错误!

def passChecker():
global errorMsg
errorMsg=0
valid=False
while valid==False:
pass_=input("Please create a password:n")
if len(pass_)>=8 and len(pass_)<=20 and valid==False:
for i in pass_:
if i==i.lower() and valid==False:
for i in pass_:
if i==i.upper() and valid==False:
for i in pass_:
if i.isdigit() and valid==False:
print("Password is valid.")
valid=True
break
if valid==False:
errorMsg==4
else:
errorMsg==3
else:
errorMsg==2
else:
errorMsg==1
passChecker()
if errorMsg==1:
print("Please ensure your password is more than 8 characters long")
if errorMsg==2:
print("Please ensure your password contains at least one lower case letter")
if errorMsg==3:
print("Please ensure your password contains at least one upper case letter")
if errorMsg==4:
print("Please ensure your password contains at least one digit")

输入"密码"时,将显示"请创建密码">

输入"密码"时,将显示"请创建密码">

输入"Password1"时,将显示"密码有效",代码结束(正确(*

输入"password1"时,将显示"密码有效"(不正确(**

*符合所有条件 **不符合"要求大写"条件

提前感谢您的任何帮助:)

下面是一个建议的版本,它使用错误代码作为函数的返回值。

当您检查它是否包含各种类型的字符时,无论它们以什么顺序出现,它都需要工作。 一种简单的方法(尽管肯定有很多替代方法(是在找到所需类型的字符时设置布尔变量。 请注意,i == i.lower()不是小写字母的正确测试,因为它也会评估非字母的True;使用i.islower()- 同样用于鞋面。

def passChecker():
pass_ = input("Please create a password:n")
if len(pass_) < 8 or len(pass_) > 20:
return 1
has_lower = has_upper = has_digit = False
for i in pass_:
if i.islower():
has_lower = True
elif i.isupper():
has_upper = True
elif i.isdigit():
has_digit = True

if not has_lower:
return 2
if not has_upper:
return 3
if not has_digit:
return 4
print("Password is valid.")
return 0

errorCode = passChecker()
if errorCode == 1:
print("Please ensure your password is between 8 and 20 characters long")
elif errorCode == 2:
print("Please ensure your password contains at least one lower case letter")
elif errorCode == 3:
print("Please ensure your password contains at least one upper case letter")
elif errorCode == 4:
print("Please ensure your password contains at least one digit")

我建议你应该选择regex模式。为了实现这一目标。 就像您应该检查每种情况并存储布尔值一样。

您可以从此代码中获取帮助

validatePassword = (password) => {
const atLeast8 = password.length >= 8 ? ON : OFF,
oneNumber = /d/.test(password) ? ON : OFF,
oneCapitalLetter = /[A-Z]/.test(password) ? ON : OFF,
oneSpecialCharacter = this.testPassword(password);
return { atLeast8, oneNumber, oneCapitalLetter, oneSpecialCharacter };
};
testPassword = (str) => {
const hasOneSpecialChar = /[~`!@#$%^&*()+=-[]\';,/{}|\":<>?]/g.test(str);
const hasInvalidChar = /[^0-9a-zA-Z~`!@#$%^&*()+=-[]\';,/{}|\":<>?]/g.test(str);
if (hasInvalidChar) {
return INVALID;
} else {
if (hasOneSpecialChar) {
return ON;
} else return OFF;
}
};

然后返回您获得的验证。 不过,这将更加系统化。

这个答案的主要重点是简要介绍使用regex方法,而不是在嵌套中这样做,否则

最新更新