# 判断字符串长度是否在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调用三个函数对密码依次检测,如果密码的设定不能通过校验,则给出提示信息,让用户重新输入,直至密码符合要求,提示 密码输入正确 退出程序