【问题标题】:How do i check conditions with a list in python 3如何使用 python 3 中的列表检查条件
【发布时间】:2016-09-28 19:58:52
【问题描述】:

我的名字是 Edwin,我是编程新手,但我喜欢学习。我有一个学校作业,我必须建立一个对密码进行评分的程序。但我现在有一个小问题。如您所见,我为每个角色制作了 3 个列表。如果我运行这个程序,如果条件 klein 和 groot 以及数字和符号为真,它将不会显示“uw wachtwoord is Sterk”。我该如何解决这个问题?

顺便说一句,我不能使用 isdigit、isnumeric 等。

提前谢谢你!

print ("Check of uw wachtwoord veilig genoeg is in dit programma.")
print ("Uw wachtwoord moet tussen minimaal 6 en maximaal 12 karakters
bestaan")

print ("U kunt gebruik maken van hoofdletters,getallen en symbolen 
(@,#,$,%)")
ww = input("Voer uw wachtwoord in: ")


klein = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm','n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
groot = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
nummers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
symbolen= [' ', '!', '#', '$', '%', '&', '"', '(', ')', '*', '+', ',', '-',
'.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 
'{', '|', '}', '~',"'"]


if len(ww) < 6:
    print ("uw wachtwoord is te kort, uw wachtwoord moet uit minimaal 6 en
    maximaal 12 karakters bestaan!")
elif len(ww) > 12:
    print ("uw wachtwoord is te lang, uw wachtwoord moet uit minimaal 6 en  
    maximaal 12 karakters bestaan!")
elif len(ww) >= 6 and len(ww)<= 12:
    if ww == klein and ww == groot and ww == nummers and ww == symbolen:
          print ("uw wachtwoord is Sterk")

【问题讨论】:

    标签: list python-3.x passwords conditional-statements


    【解决方案1】:

    您的测试无法进行,因为您将密码(str: 字符串类型)与list 进行比较。由于对象是不可比较的,因此结果只是 False(即使它们可比较的,这里也没有相等性,而是要检查的非空交集)

    您需要检查每个列表的密码中是否至少有 1 个列表成员

    使用any定义一个辅助函数来检查列表中的一个字母是否在密码中(一个lambda可能太多了):

    def ok(passwd,l):
        return any(k in passwd for k in l)
    

    然后使用all 对照此条件测试所有四个列表:

    elif len(ww) >= 6 and len(ww)<= 12:
        sww = set(ww)
        if all(ok(sww,l) for l in [klein,groot,nummers,symbolen]):
            print ("uw wachtwoord is Sterk")
    

    请注意,通过将密码(这是一种列表,因此 in 运算符的 O(n) )转换为 set 的字符(其中存在 in 运算符但速度更快)来进行轻微优化。另外,set 会删除重复的字符,非常适合这个例子。

    没有 aux 功能并使用 lambda 的更紧凑的版本毕竟并不难理解:

    elif len(ww) >= 6 and len(ww)<= 12:
        sww = set(ww)
        if all(lambda l: any(k in sww for k in l) for l in [klein,groot,nummers,symbolen]):
            print ("uw wachtwoord is Sterk")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      相关资源
      最近更新 更多