[英]Function won't let me to display an error message outside of the function?
我創建了一個試圖成為密碼檢查器的代碼,它檢查輸入的密碼是否超過 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”時,顯示“Password is valid”,密碼結束(正確)*
輸入“password1”時,顯示“Password is valid”(不對)**
*滿足所有條件 **不滿足“要求大寫”條件
提前感謝您的幫助:)
這是一個建議的版本,它使用錯誤代碼作為 function 的返回值。
當您檢查它是否包含各種類型的字符時,無論它們以什么順序出現,它都需要工作。一種簡單的方法(盡管肯定有很多替代方法)是在找到字符時設置 boolean 變量所需的類型。 請注意, 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")
我建議你應該 go 用於regex
模式。 為達到這個。 就像您應該檢查每種情況並改為存儲 boolean 值。
您可以從此代碼中獲取幫助
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
方法,而不是在嵌套的 if else 中使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.