【问题标题】:Password Tester in Python [duplicate]Python中的密码测试器[重复]
【发布时间】:2013-12-03 05:21:06
【问题描述】:

我正在编写一个程序,它应该接受一个字符串(用户输入的密码)并对其进行测试以确保它满足以下要求: 必须至少包含一个大写字母和一个小写字母 必须以字母开头 最少八个字符 没有空格 必须至少包含两位数

这是我目前所拥有的,但我遇到了无效的语法错误 运行 = 真

while running:
    valid = 0
    password = str("Enter Password: ")
    if len(p) <8:
        print ("The password you entered is too short. Please try again.")
        running = False
    import re

    #check if contains a digit
    if re.search(r '\d', password):
        password = valid

    #check if contains uppercase letter
    if re.search(r '[A-Z]', password):
         password = valid

    #check if contains lowercase letter
    if re.search(r '[a-z]', password):
        password = valid

    #check if contains only letters
    if re.search(r "[a-z]", password) and re.search(r "[A-Z]", password):
        print ("Password must contain at least 2 digits. Please try again.")

    #check if contains all lowercase letters
    if password.islower():
        print ("Password must contain at least 1 uppercase letter. Please try again.")

    #check if contains all uppercase letters
    if password.isupper():
        print ("Password must contain at least 1 lowercase letter. Please try again.")

    if password == valid:
        print ("Valid Password")

【问题讨论】:

  • 这里的逻辑根本不起作用——一旦你通过了第一个(数字)检查,你设置的密码等于“有效”(它是零..)。然后你将失败所有其他测试(实际上我认为抛出一个错误,因为 re.search 需要一个字符串。
  • 这里有几十个问题。您是否尝试过搜索?除了我链接的那个之外,请参阅herehere,以及与这 3 个相关的许多问题,以及在搜索 [python] [passwords] 时出现的所有问题,以及……
  • 你认为“制作密码检查器”是每本 Python 教科书第 2 章中的家庭作业练习 1..

标签: python


【解决方案1】:

显示的代码存在多个问题,除了 DevEight 提到的正则表达式中的间距错误。

1) password = str("Enter Password: ") - 这不会要求用户输入密码,这会将名称 password 设置为引用字符串 "Enter Password: "。你想要 input 代替(或 raw_input 用于 Python 版本 2.x)。

2) if len(p) &lt;8: - p 不是定义的名称。大概你的意思是password

3) running = False - 这是您设置此变量的唯一位置,但它控制您的 while 循环。你的循环只有在false时才会退出,所以它会一直循环,直到密码太短,最终才会退出。

4) password = valid - 这会将password 名称设置为引用变量valid 的内容,您将其初始化为0。然后,您对整数 0 运行进一步的正则表达式搜索,这当然是错误的。

5) if re.search(r "[a-z]", password) and re.search(r "[A-Z]", password): - 评论说它要求密码中至少有两个数字。它没有。我不知道你为什么会这么认为。

6) if password == valid: - 这种类型的工作,从某种意义上说,您之前可能已经将password 设置为与valid 具有相同的值。如上所述,这是错误的,但这意味着它有时会返回 True。使用工作代码,您需要完全不同的逻辑。

7) 最重要的是,您的问题指的是来自 running = True 的语法错误 - 但该分配不存在于代码中的任何位置。

从好的方面来说,善用isupperislower。这些方法使您之前的大写和小写正则表达式搜索变得不必要。

【讨论】:

    【解决方案2】:

    您似乎没有从用户那里获得密码。

    password = str("Enter the password")
    

    应该是:

    password = raw_input("Enter the password")
    

    然后,您正在检查有效条件,这可能会导致逻辑错误。因此,与其检查它是否满足所有条件,不如检查它是否不满足任何与您现在正在做的相反的条件(即)。

    例如)

    flag = 1
    
    invalid = 0
    if(len(password)<8):
        flag = 0
    if password.islower():
        flag = 0
    #all conditions
    #at last, check for the flag value.
    if flag:
        print "Password valid"
    else:
        print "Password not valid"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2016-06-04
      • 2020-03-02
      相关资源
      最近更新 更多