为什么这个“if”声明不起作用?

时间:2013-11-07 10:36:27

标签: python passwords

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

当我输入; aabbcc3 它意味着是MEDIUM,但它提出了WEAK。与RTH14hl相同,因为它提出了MEDIUM但它意味着强大。

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")

1 个答案:

答案 0 :(得分: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 ln值的方式与目前的方式不同。 Python有一个很好的功能叫generator expressions,它还有一些库函数可以让你的代码更易于维护。

而不是:

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))