簡體   English   中英

Function 不允許我在 function 之外顯示錯誤消息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM