1.4.1 编程要点密码校验主要用到判断字符性质的函数:
1)vbool=str.isdigit()函数判断字符串或字符是否是数字,其中str是字符或字符串,返回值vbool是布尔变量,如果str是数字返回True,否则返回False
2)vbool=str.isalpha()函数判断字符串或字符是都是字母
3)vbool=str.isspace()函数判断字符串或字符是否是空格
4)vbool=str.isupper()函数判断字符串或字符是否是大写字母
5)vbool=str.islower()函数判断字符串或字符是否是小写字母
1.4.2 代码实现
#判断字符串是否在8位以上
def check_len(pwd):
if len(pwd)>=8:
return True
else:
return False
#检查字符串是否是由大小写字母、数字、其他符号组成
def check (pwd) :
#初始化一个列表变量
check = [0, 0, 0, 0]
for char in pwd:
#如果字符是小写,将check[0]的值置为1
if char.islower():
check[0]=1
#如果字符大写,将check[1]置为1
if char.isupper():
check[1]=1
#如果字符是数字,将check[2]的值置为1
if char.isdigit():
check[2]=1
#如果字符是其他字符,也就是字母、数字或空白字符之外的符号,将check[3]的值置为1
if not (char.isalpha()|char.isdigit()|char.isspace()):
check[3]=1
print(check)
#当列表中4个元素项的值都是1,也就是各项和位4,
#说明字符串符合四个条件(由大小写字母、数字和其他符号组成)
#当列表中4个元素项的和小于4,说明不全符合条件
if sum(check)<4:
return False
else:
return True
#检查字符串是否包含重复的、4位以上的子串,
#这里只判断4位的子串是否有重复,
#考虑到密码组成规则,当4位以上的子串重复时,必定有4位的子串重复
def check_rep(pwd):
n=len(pwd)
for i in range (n-4):
str1=pwd[i:i+4]
str2=pwd[i+4::]
if str1 in str2:
return False
return True
if __name__=='__main__':
msg='''
请设置密码,密码要求符合以下条件
1.密码长度不小于8位
2.密码必须由大小写字母、数字、其它符号组成
3.密码中不能重复包含长度超过4的子串
'''
print(msg)
while True:
#提示录入密码
pwd=input('请输入密码:')
#如果录入q,退出程序
if pwd=='q':
print('退出程序...')
break
#调用函数检查密码的位数
vcheck1=check_len(pwd)
if not vcheck1:
print('密码长度不够8位!请重新录入\n')
continue
#调用函数检查密码是否是由大小写字母、数字和其他符号组成
vcheck2=check(pwd)
if not vcheck2:
print('密码必须由大小写字母、数字和其他符号组成!请重新录入\n')
continue
#调用函数检查密码是否有重复子串
vcheck3=check_rep(pwd)
if not vcheck3:
print('密码包含两个以上重复子串(4位以上的子串)!请查看并重新录入\n')
continue
print('密码正确')
1.4.3 总结
代码定义了三个函数:
1)check_len()函数检测密码的长度是否大于大于8位
2)check()函数用于检测密码是否由大小写字母、数字和其他符号组成
3)check_rep()函数检测密码是否包含子串
主函数main调用三个函数对密码一次检测,如果密码不能通过校验,则给出提示信息,让用户重新录入,直至密码符合要求,提示“密码正确”,退出程序