【问题标题】:How to write a python function to check if a user input for a password is not strong?如何编写一个python函数来检查用户输入的密码是否不强?
【发布时间】:2020-11-03 04:35:22
【问题描述】:

我需要为一个赋值代码编写一个代码,它将接受用户输入的密码(作为字符串)并让用户知道输入的哪些元素会使密码变弱。

要求密码长度至少为 8 个字符,包含大小写字母,并包含数字。我的代码不需要判断密码是否强,只要弱就为什么弱。

目前我写的代码如下:

    size = len(password)
    
    if size < 8:
        print('not long enough')
    
    if password.isalnum():
        pass
    else:

    for x in password:
        if x.isupper():
            pass
        else:
            print('no upper case')
    
    for y in password:
        if y.islower():
            pass
        else:
            print('no lower case')
            
    return

在我的测试运行返回多行“无大写”和“无小写”后,我做了一些更改并使用了 .isalnum 运算符。

如果有人能把我推向正确的方向,我将不胜感激,因为这让我现在有点困惑

【问题讨论】:

  • 我建议使用正则表达式?
  • 不需要特殊字符?
  • 您遇到了什么问题
  • 我建议您在这里检查问题。 stackoverflow.com/questions/2990654/…
  • 您需要在第一个 else 语句之后修复缩进。 (这不是直接导致问题的原因,只是附加注释。)

标签: python python-3.x string


【解决方案1】:

没有正则表达式,您可以使用anystr.isnumeric

if not any(map(str.isnumeric, password):
    print('No numbers')

【讨论】:

    【解决方案2】:

    我宁愿使用正则表达式。

    In [122]: def validate(password):
         ...:     return True if re.match("(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}", password) else False
         ...:
    
    In [123]: validate("helloas")
    Out[123]: False
    
    In [124]: validate("helH12asfgvGh")
    Out[124]: True
    

    【讨论】:

      【解决方案3】:

      (其他答案已经给了你很好的答案,所以这不是一个完整的答案,它只是对出了什么问题的解释。)导致问题的代码区域是

      for x in password:
              if x.isupper():
                  pass
              else:
                  print('no upper case')
      for y in password:
              if y.islower():
                  pass
              else:
                  print('no lower case')
      

      您正在遍历整个密码,检查每个字符是否为大写,如果不是,则打印出“无大写”。问题是如果单词的单个字符不是大写,“that_character_that_isn't_uppercase”.isupper() 将返回 false,并打印错误语句。例如,密码 PaSSWORD 将返回一个“非大写”,因为“a”.isupper() 为 False。密码 passwordD 将返回 7 个“无大写”,因为字符 p、a、s、s、w、o、r 都是小写。 x.islower() 测试也发生了同样的事情,您会看到每个单独的字符是否都是小写的。我会实现这样的:

      #password.islower() will return true if all the entire string is lowercase(and thus not uppercase)
      if password.islower():
          print("No upper case")
      elif password.isupper():
          print("No lower case")
      #Again, password.isupper() sees if all letters are uppercase(which means that there is no lowercase letters).
      

      希望这有帮助!

      【讨论】:

        【解决方案4】:

        网上有很多python密码检查器,例如:https://www.geeksforgeeks.org/password-validation-in-python/

        这是一个快速控制台程序,您可以这样调用:

        $ python3 password_checker.py "Testf7788790##$"
        Testing password:  Testf7788790##$
        Password is valid:  True
        $ python3 password_checker.py "insecurePassword"
        Testing password:  insecurePassword
        Password should contain at least one number
        Password is valid:  False
        

        password_checker.py的内容:

        #!/usr/bin/python
        
        import sys
        
        def password_check(passwd):
            symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=']
            isValid = False
              
            if len(passwd) < 10:
                print('Password should be at least 10 characters')
            elif not any(char.isdigit() for char in passwd):
                print('Password should contain at least one number')
            elif not any(char.isupper() for char in passwd):
                print('Password should contain at least one uppercase character')
            elif not any(char.islower() for char in passwd):
                print('Password should contain at least one lowercase character')
            elif not any(char in symbols for char in passwd):
                print('Password should contain at least one special character from list: ', symbols)
            else:
              isValid = True
        
            return isValid
        
        arguments = sys.argv
        if len(arguments) < 2:
            print('No password could be parsed by argv')
            valid_password = False
        else:
            password = arguments[1]
            print('Testing password: ', password)
            valid_password = password_check(password)
        
        print('Password is valid: ', valid_password)
        

        【讨论】:

        • 感谢您的回复!我最终使用了'if not any(char.isupper() for char in password',但是为每个条件单独使用 if 语句,而不是 elif 语句。我通过赋值测试器运行了我的代码,它是成功的 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 2023-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多