Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python条件密码程序_Python_String_Input_Passwords - Fatal编程技术网

Python条件密码程序

Python条件密码程序,python,string,input,passwords,Python,String,Input,Passwords,我正在编写一个简单的条件密码检查器脚本,条件如下: >8个字符 8 def短传(密码): '密码不能超过24个字符' 返回len(密码)1 def upperPass(密码): '密码必须至少包含两个大写字母' 返回len(set(string.ascii_大写)。交叉点(password))>1 def numPass(密码): '密码必须至少包含两位数字' 返回len(设置(字符串.数字).交叉点(密码))>1 def specPass(密码): '密码不能包含任何特殊字符' 返回len(

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

  • >8个字符
  • <24个字符
  • 没有特殊字符
  • 至少两个大写字母
  • 至少两个小写字母
  • 至少两位数
我已经把所有的代码都打印出来了,但它并不像我需要的那样执行。例如,如果我键入“FunkyFunky56”,它会抛出一条消息,即它必须包含两个大写字母,而实际上它显然包含两个大写字母。但是,当我用两个连续的大写字母“FUnkyfunky56”输入时,它会给我有效的密码消息。有人能帮我理解我需要改变什么吗

代码:

导入字符串
def长传球(密码):
'密码必须至少为8个字符'
返回len(密码)>8
def短传(密码):
'密码不能超过24个字符'
返回len(密码)<24
def lowerPass(密码):
'密码必须至少包含两个小写字母'
返回len(set(string.ascii_小写)。交叉点(密码))>1
def upperPass(密码):
'密码必须至少包含两个大写字母'
返回len(set(string.ascii_大写)。交叉点(password))>1
def numPass(密码):
'密码必须至少包含两位数字'
返回len(设置(字符串.数字).交叉点(密码))>1
def specPass(密码):
'密码不能包含任何特殊字符'
返回len(set(字符串.标点符号).交叉点(密码))<1
def test_密码(密码,测试=[longPass,shortPass,lowerPass,upperPass,numPass,specPass]):
对于测试中的测试:
如果没有测试(密码):
打印(测试文件)
返回错误
返回真值
def main():
密码=输入('请输入要检查的密码:')
如果测试密码(密码):
打印('有效密码!')
如果名称=“\uuuuu main\uuuuuuuu”:
main()

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

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


这将对大写字符进行正确计数,例如:
sum(x.isupper()表示密码中的x)

谢谢!这正是我想要的。
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()