python 接受 8 个字符密码的脚本仅满足以下条件:2 num、2 upper、2 lower 和 2 special
python script to accept 8 char password with these conditions only: 2 num, 2 upper, 2 lower, and 2 special
这就是我到目前为止所做的。当它出错时,它不会打印 'Not Okay'。我仍然无法弄清楚如何检查特殊字符。
#!/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
分支。使用 and
一次检查所有条件:
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 以符合您的问题描述,请注意。
编辑 添加了 string.punctuation
测试而不是仅仅假设非字母数字字符是 "special" -- 如果你想要接受空格之类的东西/不想依赖于系统的语言环境。
您可以使用正则表达式,这应该验证 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!")
这就是我到目前为止所做的。当它出错时,它不会打印 'Not Okay'。我仍然无法弄清楚如何检查特殊字符。
#!/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
分支。使用 and
一次检查所有条件:
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 以符合您的问题描述,请注意。
编辑 添加了 string.punctuation
测试而不是仅仅假设非字母数字字符是 "special" -- 如果你想要接受空格之类的东西/不想依赖于系统的语言环境。
您可以使用正则表达式,这应该验证 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!")