# 判断字符串长度是否在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
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位的子串重复
# 注意本函数当发现包含重复的4位以上的子串时返回的时False
def check_rep(pwd):
n = len(pwd)
# 通过循环依次取出4个字符组成的子串
# 只要它后面的字符串包含有一个这样的字串,重复就为真
for i in range(n - 4):
# 取4个字符组成子串str1
str1 = pwd[i:i + 4]
# 取在str1后面剩余的所有字符作为str2
str2 = pwd[i + 4::]
# 如果str2 中存在一个str1,说明重复
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('退出程序.....')
# 调用函数检查密码的位数
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('密码正确')
break
1.代码开头定义了check_len()、check()和check_rep()三个函数,check_len函数用于检测密码长度是否超过或等于8位。check()函数用于检测密码是否由大小写字母、数字和其他符号组成,该函数运用islower()、isupper()、isdigit()和isspace()等函数判断每个字符的性质,一旦有字符符合某个条件,就把该函数生成的一个列表变量check
2.主函数main调用三个函数对密码依次检测,如果密码的设定不能通过校验,则给出提示信息,让用户重新输入,直至密码符合要求,提示 密码输入正确 退出程序