Python密码检查器帮助调试

时间:2015-06-16 17:39:59

标签: python passwords

所以在我的计算机编程课中,我们的任务是制作通用密码强度检查器,我的工作并正确检查长度,但无论出于何种原因,第二部分无法正常工作,我无法弄清楚原因。

                            password = input("Please enter a password between 6 - 12 characters long: ")


                            while len(password) in range(6, 13) == False:
                                if len(password) < 6:
                                    print("Password too low!")
                                    password = input("Please enter a password between 6 - 12 characters long: ")
                                elif len(password) > 12:
                                    print("Password too high!")
                                    password = input("Please enter a password between 6 - 12 characters long: ")
                            Upper = 0
                            Lower = 0
                            Numerical = 0
                            for char in password:
                                if char == char.isupper():
                                    Upper = Upper + 1
                                elif char == char.islower():
                                    Lower = Lower + 1
                                elif char == char.isnumeric():
                                    Numerical = Numerical + 1

                            Strength = int(Upper + Lower + Numerical)

                            if Strength == 1:
                                print("Password is weak!")
                            elif Strength == 2:
                                print("Password is medium!")
                            elif Strength == 3:
                                print("Password is strong!")

任何帮助都会非常感激,我浏览了其他类似的问题,但是有些具体的问题很难。

编辑:从我的while循环中删除括号将不执行任何操作,无论如何都是一样的。范围内的部分没有区别,我仍然得到错误:

追踪(最近一次通话):   文件“C:\ Users \ Owen \ Desktop \ Password Checker.py”,第21行,in     对于密码()中的char:

2 个答案:

答案 0 :(得分:0)

您可以使用此部分代码修复很多小问题,因此我无法真正告诉您产生不正确输出的原因。

1)肯说:

len(password) != range(6, 12)将始终返回true。这是因为您要将int与列表进行比较。

range(6, 12)为您提供[6, 7, 8, 9, 10, 11],因此密码的长度永远不会等于该语句。但是,如果使用len(password) in range(6, 12),则会将密码的长度与列表中的每个值进行比较,直到匹配为止(如果有)。还有一件事,使用范围(a,b)只包括从a到b-1的数字。所以你真的想要:len(password) in range(6, 13)

2)while循环的逻辑应该随着我第一点的变化而变化。 如果len(password) in range(6, 13)的计算结果为True,则while语句不会循环,您将继续执行下一部分。您可以删除else部分,并将elif更改为else

3)你可以摆脱LengthLowLengthHigh,因为你没有在任何地方使用它们。

4)密码是一个字符串,因此您无法使用()运算符调用它。你的for循环应该是for char in password:

5)使用char.isupper()char.islower()char.isnumeric()检查它们是否为数值

6)您不需要分别存储UpperLowerNumerical,因为您最后只是将它们添加到一起。如果您熟悉列表推导

,您实际上可以使用一个班轮完成此操作
strength = sum([1 if c.isupper() or c.islower() or c.isnumeric else 0 for c in password])

虽然,在我看来,这与字母数字的c.isalnum()完全相同。所以写,

strength = sum([1 if c.isalnum() else 0 for c in password])

7)我对密码强度计算一无所知,但我认为也应该考虑特殊字符。在这种情况下,c.isalnum()不会成为当前代码中的神奇之物。

可能还有更多我未曾注意到的错误,但这绝对可以帮助您解决问题。

答案 1 :(得分:0)

ero1ca的答案解释了许多问题。

至于代码的最后一部分不起作用,那是因为你遍历密码中的每个字符,并根据字符的内容递增。具有规定的长度> 3,你最后的条件陈述不会覆盖密码!

下面是代码的修订版。

password = input("Please enter a password between 6 - 12 characters long: ")

while not len(password) in range(6, 13):
    if len(password) < 6:
        print ("Password too low!")
    else:
        print ("Password to high!")
    password = input("Please enter a password between 6 - 12 characters long: ")

Upper = 0
Lower = 0
Numerical = 0

if any(x.isupper() for x in password):
    Upper = 1
if any(x.islower() for x in password):
    Lower = 1
if any(x.isdigit() for x in password):
    Numerical = 1

Strength =int(Upper + Lower + Numerical)
if Strength == 1:
    print ("Password is weak!")
elif Strength == 2:
    print ("Password is medium!")
else:
    print ("Password is strong!")

对python 2.7使用raw_input而不是input()

编辑神圣的死灵!我的错误是小伙子!