【问题标题】:Python Conditional Password ProgramPython 条件密码程序
【发布时间】:2014-10-03 20:40:25
【问题描述】:

我正在编写一个简单的条件密码检查器脚本,条件是:

  • > 8 个字符
  • 无特殊字符
  • 至少两个大写字母
  • 至少两个小写字母
  • 至少两位数

我已经输入了所有代码,但它的执行效果并不像我需要的那样。例如,如果我输入“FunkyFunky56”,它会抛出一条消息,即它必须包含两个大写字母,而它显然是这样的。但是,当我用两个连续的大写字母“FUnkyfunky56”输入它时,它给了我有效的密码信息。谁能帮我理解我需要改变什么?

代码:

import string

def longPass(password):
    'Password must be at least 8 characters'
    return len(password) > 8

def shortPass(password):
    'Password cannot be more than 24 characters'
    return len(password) < 24

def lowerPass(password):
    'Password must contain at least two lowercase letters'
    return len(set(string.ascii_lowercase).intersection(password)) > 1

def upperPass(password):
    'Password must contain at least two uppercase letters'
    return len(set(string.ascii_uppercase).intersection(password)) > 1

def numPass(password):
    'Password must contain at least two digits'
    return len(set(string.digits).intersection(password)) > 1

def specPass(password):
    'Password must not contain any special characters'
    return len(set(string.punctuation).intersection(password)) < 1

def test_password(password, tests=[longPass, shortPass, lowerPass, upperPass, numPass, specPass]):
    for test in tests:
        if not test(password):
            print(test.__doc__)
            return False
    return True

def main():
    password = input('Please enter a password to be checked: ')
    if test_password(password):
        print('Valid password!')

if __name__=="__main__":
    main() 

【问题讨论】:

    标签: python string input passwords


    【解决方案1】:

    那是因为如果它包含两个“F”,那么集合无论如何只会包含其中一个。按照现在的实现,您至少需要两个不同的大写字符。

    尝试简单地计算匹配字符而不是设置交叉点。

    这将正确计算大写字符,例如:sum(x.isupper() for x in password)

    【讨论】:

    • 谢谢!这正是我想要的。
    猜你喜欢
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多