0

我在 Python 中创建了一个 if 语句,它是一个密码强度检查器。我想可能是数字,但我不知道。

当我输入时;aabbcc3 它应该是 MEDIUM,但它出现了 WEAK。与 RTH14hl 相同,因为它配备了 MEDIUM,但它的本意是 STRONG。

if u >=6 or l >=6 or n >=6:
    print("weak")

elif u > 1 and n > 1:
    print("medium")

elif l > 3 and n >= 1:
    print("medium")

elif u > 1 and l> 1:
    print("medium")

elif u > 3 and l >  2 and nums > 2: 
    print("strong")
4

1 回答 1

4

问题是设置语句的顺序会产生您不想要的效果。例如:

elif u > 1 and l> 1:
    print("medium")

elif u > 3 and l >  2 and nums > 2: 
    print("strong")

这里的最后一行永远不会被执行。因为任何使最后一个条件为真的东西都会使前一个条件为真。

例如,如果 u 是 4,l 是 4,那么:

elif u > 1 and l> 1:

变成:

elif 4 > 1 and 4 > 1:

这将评估True并打印“中等”

您可以通过重新排列语句的顺序来解决此问题,如下所示:

elif u > 3 and l >  2 and nums > 2: 
    print("strong")

elif u > 1 and l> 1:
    print("medium")

本质上,您希望最难匹配的内容位于顶部,然后让非匹配项下降到更容易匹配的情况,而不是相反。

同样从发表的评论中,我认为您很可能希望生成与当前执行方式不同的值u l和值。nPython 有一个很好的特性,称为生成器表达式,它与一些库函数一起将使您的代码更易于维护。

代替:

u = p.count("A") + p.count("B") + p.count("C"), ...
l = p.count("a") + p.count("b") + p.count("c"), ...
n = p.count("1") + p.count("2") + p.count("3"), ...

你可以做:

u = sum((char.isalpha() for char in p))
l = sum((char.islower() for char in p))
n = sum((char.isdigit() for char in p))
于 2013-11-07T10:42:31.630 回答