Python密码强度检查器

Python密码强度检查器,python,Python,您将如何更改下面的代码,以便在密码变强之前询问新密码? 我知道你必须使用while循环,但我每次尝试都会把它弄得一团糟 digits = False upcase = False lowcase = False alnum = False password = input("Enter a password between 6 and 12 characters: ") while len(password) < 6 or len(password)>12:

您将如何更改下面的代码,以便在密码变强之前询问新密码? 我知道你必须使用while循环,但我每次尝试都会把它弄得一团糟

digits = False
upcase = False
lowcase = False
alnum = False
password = input("Enter a password between 6 and 12 characters: ")
while len(password) < 6 or len(password)>12:
    if len(password)<6:
        print("your password is too short")
    elif len(password) > 12:
        print("your password is too long")
    password = input("Please enter a password between 6 and 12 characters.")

for i in range(0,len(password)):
    if password[i].isupper():
        upcase = True
    if password[i].islower():
        lowcase = True
    if password[i].isalnum():
        alnum = True
    if password[i].isdigit():
        digits = True

if digits and alnum and lowcase and upcase and digits:
   print("Your password is strong")
elif (digits and alnum) or (digits and lowcase) or (digits and upcase) or (alnum and lowcase) or (alnum and upcase) or (lowcase and upcase):
    print("Your password is medium strength")
else:
    print("Your password is weak")
digits=False
upcase=False
lowcase=False
alnum=False
密码=输入(“输入一个介于6到12个字符之间的密码:”)
当len(密码)<6或len(密码)>12时:
如果len(密码)12:
打印(“您的密码太长”)
密码=输入(“请输入6到12个字符之间的密码。”)
对于范围(0,len(密码))中的i:
如果密码[i].isupper():
upcase=True
如果密码[i].islower():
lowcase=True
如果密码[i].isalnum():
alnum=True
如果密码[i].isdigit():
数字=真
如果数字和alnum、lowcase和upcase以及数字:
打印(“您的密码很强”)
elif(数字和算术数字)或(数字和小写字母)或(数字和大写字母)或(算术数字和小写字母)或(算术数字和大写字母)或(小写字母和大写字母):
打印(“您的密码为中等强度”)
其他:
打印(“您的密码很弱”)
试试这个:

notStrong = True
while notStrong:
    digits = False
    upcase = False
    lowcase = False
    alnum = False
    password = input("Enter a password between 6 and 12 characters: ")
    while len(password) < 6 or len(password)>12:
        if len(password)<6:
            print("your password is too short")
        elif len(password) > 12:
            print("your password is too long")
        password = input("Please enter a password between 6 and 12 characters.")

    for i in range(0,len(password)):
        if password[i].isupper():
            upcase = True
        if password[i].islower():
            lowcase = True
        if password[i].isalnum():
            alnum = True
        if password[i].isdigit():
            digits = True

    if digits and alnum and lowcase and upcase and digits:
       print("Your password is strong")
       notStrong = False
    elif (digits and alnum) or (digits and lowcase) or (digits and upcase) or (alnum and lowcase) or (alnum and upcase) or (lowcase and upcase):
        print("Your password is medium strength")
    else:
        print("Your password is weak")
notStrong=True
虽然不强:
数字=假
upcase=False
lowcase=False
alnum=False
密码=输入(“输入一个介于6到12个字符之间的密码:”)
当len(密码)<6或len(密码)>12时:
如果len(密码)12:
打印(“您的密码太长”)
密码=输入(“请输入6到12个字符之间的密码。”)
对于范围(0,len(密码))中的i:
如果密码[i].isupper():
upcase=True
如果密码[i].islower():
lowcase=True
如果密码[i].isalnum():
alnum=True
如果密码[i].isdigit():
数字=真
如果数字和alnum、lowcase和upcase以及数字:
打印(“您的密码很强”)
notStrong=False
elif(数字和算术数字)或(数字和小写字母)或(数字和大写字母)或(算术数字和小写字母)或(算术数字和大写字母)或(小写字母和大写字母):
打印(“您的密码为中等强度”)
其他:
打印(“您的密码很弱”)

您不必使用循环,如果密码是弱密码或中等密码,您只需在其内部调用函数,如下所示:

def Password():
    
    digits = False
    upcase = False
    lowcase = False
    alnum = False
    password = input("Enter a password between 6 and 12 characters: ")
    while len(password) < 6 or len(password)>12:
        if len(password)<6:
            print("your password is too short")
        elif len(password) > 12:
            print("your password is too long")
        password = input("Please enter a password between 6 and 12 characters.")

    for i in range(0,len(password)):
        if password[i].isupper():
            upcase = True
        if password[i].islower():
            lowcase = True
        if password[i].isalnum():
            alnum = True
        if password[i].isdigit():
            digits = True

    if digits and alnum and lowcase and upcase and digits:
        print("Your password is strong")
    elif (digits and alnum) or (digits and lowcase) or (digits and upcase) or (alnum and lowcase) or (alnum and upcase) or (lowcase and upcase):
        print("Your password is medium strength")
        Password()
    else:
        print("Your password is weak")
        Password()
        
Password()
def Password():
数字=假
upcase=False
lowcase=False
alnum=False
密码=输入(“输入一个介于6到12个字符之间的密码:”)
当len(密码)<6或len(密码)>12时:
如果len(密码)12:
打印(“您的密码太长”)
密码=输入(“请输入6到12个字符之间的密码。”)
对于范围(0,len(密码))中的i:
如果密码[i].isupper():
upcase=True
如果密码[i].islower():
lowcase=True
如果密码[i].isalnum():
alnum=True
如果密码[i].isdigit():
数字=真
如果数字和alnum、lowcase和upcase以及数字:
打印(“您的密码很强”)
elif(数字和算术数字)或(数字和小写字母)或(数字和大写字母)或(算术数字和小写字母)或(算术数字和大写字母)或(小写字母和大写字母):
打印(“您的密码为中等强度”)
密码()
其他:
打印(“您的密码很弱”)
密码()
密码()
这是一种非常有用的技术,可以用来简化许多问题,而不需要循环

此外,您还可以进行另一项检查,以便在将来根据需要调整所需的密码强度-如果使用while循环,这并不是那么容易做到(或者更确切地说,无法做到优雅)

编辑-添加评论中给出的建议:


不要删除答案,因为我现在意识到这是一个不应该处理这个问题的例子,这可能会劝阻人们不要犯与我相同的错误。

我认为你可以很容易地采用问题答案中显示的一种技巧来做到这一点。事实上,我很想把你的问题标记为一个重复的问题……在我看来,这是一个糟糕的编程实践,因为你实际上是在使函数递归。除了在每次调用时使用堆栈空间外,如果函数在调用自身后返回值或不返回非琐碎的内容,那么事情可能会变得棘手。谢谢提醒-我不知道这一点。我已经编辑了我的答案,以包含关于您提出的问题的更多信息。