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)回溯(大多数是