Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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脚本只接受以下条件的8字符密码:2个num、2个upper、2个lower和2个special_Python_Regex_If Statement_Passwords - Fatal编程技术网

python脚本只接受以下条件的8字符密码:2个num、2个upper、2个lower和2个special

python脚本只接受以下条件的8字符密码:2个num、2个upper、2个lower和2个special,python,regex,if-statement,passwords,Python,Regex,If Statement,Passwords,这就是我到现在为止所做的。当它出错时,它不会打印“不好”。我仍然不知道如何检查特殊字符 #!/usr/bin/python def passw_check(): passin = raw_input("Enter the password") if len(passin) == 8: # checking total length of password if sum(map(str.isupper, passin))== 2: #check 2

这就是我到现在为止所做的。当它出错时,它不会打印“不好”。我仍然不知道如何检查特殊字符

#!/usr/bin/python

def passw_check():
    passin = raw_input("Enter the password")

    if len(passin) == 8:       # checking total length of password
        if sum(map(str.isupper, passin))== 2: #check 2 upper chars
            if sum(map(str.islower, passin))== 2:  #check 2 lower chars
                if sum(map(str.isdigit, passin))== 4:  #check 2 digits chars
                    print 'Passwords Okay'
                else: 
                    print 'Not Okay!'

passw_check()

只有最里面的
if
else
-分支。使用
一次检查所有条件:

def passw_check():
    passin = raw_input("Enter the password")

    if (len(passin) == 8 and       # checking total length of password
        sum(map(str.isupper, passin)) == 2 and #check 2 upper chars
        sum(map(str.islower, passin)) == 2 and  #check 2 lower chars
        sum(map(str.isdigit, passin))== 4):  #check 2 digits chars
        print 'Passwords Okay'
    else: 
        print 'Not Okay!'
    return passin

passw = passw_check()

只有最里面的
if
else
-分支。使用
一次检查所有条件:

def passw_check():
    passin = raw_input("Enter the password")

    if (len(passin) == 8 and       # checking total length of password
        sum(map(str.isupper, passin)) == 2 and #check 2 upper chars
        sum(map(str.islower, passin)) == 2 and  #check 2 lower chars
        sum(map(str.isdigit, passin))== 4):  #check 2 digits chars
        print 'Passwords Okay'
    else: 
        print 'Not Okay!'
    return passin

passw = passw_check()

只有最里面的
if
else
-分支。使用
一次检查所有条件:

def passw_check():
    passin = raw_input("Enter the password")

    if (len(passin) == 8 and       # checking total length of password
        sum(map(str.isupper, passin)) == 2 and #check 2 upper chars
        sum(map(str.islower, passin)) == 2 and  #check 2 lower chars
        sum(map(str.isdigit, passin))== 4):  #check 2 digits chars
        print 'Passwords Okay'
    else: 
        print 'Not Okay!'
    return passin

passw = passw_check()

只有最里面的
if
else
-分支。使用
一次检查所有条件:

def passw_check():
    passin = raw_input("Enter the password")

    if (len(passin) == 8 and       # checking total length of password
        sum(map(str.isupper, passin)) == 2 and #check 2 upper chars
        sum(map(str.islower, passin)) == 2 and  #check 2 lower chars
        sum(map(str.isdigit, passin))== 4):  #check 2 digits chars
        print 'Passwords Okay'
    else: 
        print 'Not Okay!'
    return passin

passw = passw_check()

我可能会这样做:

#!/usr/bin/python
import string

def validate(s):
    def is_punc(c): return c in string.punctuation
    if len(s) != 8:                   return False
    if sum(map(str.isupper, s)) != 2: return False
    if sum(map(str.islower, s)) != 2: return False
    if sum(map(str.isdigit, s)) != 2: return False
    if sum(map(is_punc, s))     != 2: return False
    # Note of the tests have been violated, return True
    return True


def passw_check():
    passin = raw_input("Enter the password: ")

    if validate(passin):
        print 'Passwords Okay'
    else:
        print 'Not Okay!'

passw_check()
这里,
validate
函数非常清晰,逻辑也很容易理解

还要注意,您说您只需要2个数字字符,但代码中的测试会检查4个。我将此更改为2以符合您的问题描述,只是提醒一下


编辑添加的
字符串。标点符号
测试,而不是仅仅假设非字母数字字符是“特殊的”--如果您想接受空白/不想依赖于系统的区域设置,这可能是不必要的/不需要的。

我可能会这样做:

#!/usr/bin/python
import string

def validate(s):
    def is_punc(c): return c in string.punctuation
    if len(s) != 8:                   return False
    if sum(map(str.isupper, s)) != 2: return False
    if sum(map(str.islower, s)) != 2: return False
    if sum(map(str.isdigit, s)) != 2: return False
    if sum(map(is_punc, s))     != 2: return False
    # Note of the tests have been violated, return True
    return True


def passw_check():
    passin = raw_input("Enter the password: ")

    if validate(passin):
        print 'Passwords Okay'
    else:
        print 'Not Okay!'

passw_check()
这里,
validate
函数非常清晰,逻辑也很容易理解

还要注意,您说您只需要2个数字字符,但代码中的测试会检查4个。我将此更改为2以符合您的问题描述,只是提醒一下


编辑添加的
字符串。标点符号
测试,而不是仅仅假设非字母数字字符是“特殊的”--如果您想接受空白/不想依赖于系统的区域设置,这可能是不必要的/不需要的。

我可能会这样做:

#!/usr/bin/python
import string

def validate(s):
    def is_punc(c): return c in string.punctuation
    if len(s) != 8:                   return False
    if sum(map(str.isupper, s)) != 2: return False
    if sum(map(str.islower, s)) != 2: return False
    if sum(map(str.isdigit, s)) != 2: return False
    if sum(map(is_punc, s))     != 2: return False
    # Note of the tests have been violated, return True
    return True


def passw_check():
    passin = raw_input("Enter the password: ")

    if validate(passin):
        print 'Passwords Okay'
    else:
        print 'Not Okay!'

passw_check()
这里,
validate
函数非常清晰,逻辑也很容易理解

还要注意,您说您只需要2个数字字符,但代码中的测试会检查4个。我将此更改为2以符合您的问题描述,只是提醒一下


编辑添加的
字符串。标点符号
测试,而不是仅仅假设非字母数字字符是“特殊的”--如果您想接受空白/不想依赖于系统的区域设置,这可能是不必要的/不需要的。

我可能会这样做:

#!/usr/bin/python
import string

def validate(s):
    def is_punc(c): return c in string.punctuation
    if len(s) != 8:                   return False
    if sum(map(str.isupper, s)) != 2: return False
    if sum(map(str.islower, s)) != 2: return False
    if sum(map(str.isdigit, s)) != 2: return False
    if sum(map(is_punc, s))     != 2: return False
    # Note of the tests have been violated, return True
    return True


def passw_check():
    passin = raw_input("Enter the password: ")

    if validate(passin):
        print 'Passwords Okay'
    else:
        print 'Not Okay!'

passw_check()
这里,
validate
函数非常清晰,逻辑也很容易理解

还要注意,您说您只需要2个数字字符,但代码中的测试会检查4个。我将此更改为2以符合您的问题描述,只是提醒一下


编辑添加的
字符串。标点符号
测试,而不是仅仅假设非字母数字字符是“特殊的”-如果您想接受空白/不想依赖于系统的区域设置,这可能是不必要的/不需要的。

您可以使用regex,这应该验证
passin
有2个低,2个高,2位数字和2个特价(您可以更改:

import re, string
def passw_check(passin):
    lower = "(?=.*[a-z].*[a-z])"
    upper = "(?=.*[A-Z].*[A-Z])"
    digit = "(?=.*[0-9].*[0-9])"
    special = "(?=.*[{0}].*[{0}])".format(re.escape(string.punctuation))
    return re.match("^.*{}{}{}{}.*$".format(lower, upper, digit, special), passin)

check = passw_check(raw_input("Enter the password"))
print("Password Okay" if check else "Not Okay!")

您可以使用正则表达式,这将验证
密码是否有2个低、2个高、2个数字和2个特殊值(您可以更改:

import re, string
def passw_check(passin):
    lower = "(?=.*[a-z].*[a-z])"
    upper = "(?=.*[A-Z].*[A-Z])"
    digit = "(?=.*[0-9].*[0-9])"
    special = "(?=.*[{0}].*[{0}])".format(re.escape(string.punctuation))
    return re.match("^.*{}{}{}{}.*$".format(lower, upper, digit, special), passin)

check = passw_check(raw_input("Enter the password"))
print("Password Okay" if check else "Not Okay!")

您可以使用正则表达式,这将验证
密码是否有2个低、2个高、2个数字和2个特殊值(您可以更改:

import re, string
def passw_check(passin):
    lower = "(?=.*[a-z].*[a-z])"
    upper = "(?=.*[A-Z].*[A-Z])"
    digit = "(?=.*[0-9].*[0-9])"
    special = "(?=.*[{0}].*[{0}])".format(re.escape(string.punctuation))
    return re.match("^.*{}{}{}{}.*$".format(lower, upper, digit, special), passin)

check = passw_check(raw_input("Enter the password"))
print("Password Okay" if check else "Not Okay!")

您可以使用正则表达式,这将验证
密码是否有2个低、2个高、2个数字和2个特殊值(您可以更改:

import re, string
def passw_check(passin):
    lower = "(?=.*[a-z].*[a-z])"
    upper = "(?=.*[A-Z].*[A-Z])"
    digit = "(?=.*[0-9].*[0-9])"
    special = "(?=.*[{0}].*[{0}])".format(re.escape(string.punctuation))
    return re.match("^.*{}{}{}{}.*$".format(lower, upper, digit, special), passin)

check = passw_check(raw_input("Enter the password"))
print("Password Okay" if check else "Not Okay!")


嗯,你的else只与你的最终IF相关联。你需要在你的问题中明确你是有两个问题还是一个问题。那么,它是否应该与第一个IF缩进,因为/如果它们是嵌套的?是的,你是对的,我的IF-else循环工作不正常。我希望你是真正的公共系统上的那些人。@llmari karonen,这只会让事情变得更糟它在互联网上更安全,不是吗?不是真的,它只用于我的个人脚本!嘿!好吧,你的else只与你的最终IF相关联。你需要在问题中明确你是有两个问题还是一个问题。那么,它应该与第一个IF缩进,因为/如果它们是嵌套的吗?是的,你是对的,我的IF-else循环工作不正常。我希望如此你们是真正的公共系统上的人。@llmari karonen,这只会让互联网上的事情更安全,不是吗?不,这只是我的个人脚本!嘿!好吧,你们的else只与你们的最终IF关联。你们需要在你们的问题中弄清楚你们是有两个问题还是一个问题。那个么,它是否应该与第一个IF缩进,因为/如果they是嵌套的?是的,你是对的,我的if-else循环工作不正常。我希望你是在真正的公共系统上的。@llmari karonen,这只会让互联网上的事情更安全,不是吗?不是吗,这只是我的个人脚本!嘿!好吧,你的else只与你的最终if关联。你需要在你的问题中弄清楚你是否有两个问题还是一个问题。那么,它应该与第一个IF缩进,因为/如果它们是嵌套的吗?是的,你是对的,我的IF-else循环工作不正常。我希望你是真正的公共系统上的那些人。@llmari karonen,这只会使internet上的事情更安全,不是吗?不,这只用于我的个人脚本!嘿!这是脚本中的错误:Ent输入密码:UI((98kk回溯(最后一次调用):文件“new.py”,第22行,在passw_check()文件“new.py”,第17行,在passw_check if validate(passin)中:文件“new.py”,第10行,在validate if sum(map(is_punc,s))中!=2:返回假文件“new.py”,在is_punc def is_punc(c)中的第5行):返回字符串中的c。标点符号名称错误:全局名称“string”不是defined@sunnyp.上一次编辑答案时省略了顶部的
导入字符串
,请使用该行重试。是的,缺少的是“导入字符串”。现在工作正常。谢谢。这在脚本中给出了错误:输入密码:UI((98kk)回溯(大多数是