def register():
while True:
# 1.让用户输入用户名和密码
print("\n注册")
username = input("请输入用户名").strip()
password = input("请输入密码").strip()
re_password = input("请确认密码").strip()
is_register = input("按任意键确认/n退出").strip().lower()
# 2.进行简单的逻辑判断
# 2.1 判断用户是否要退出
if is_register == "n":
break
# 2.2 判断两次输入的密码是否一致
if password != re_password:
print("\n两次输入的密码不一致")
continue
import re
# 2.3 检验用户名是否合法
if not re.findall('^[a-zA-Z]\w{2,9}$', username):
print('\n用户名长度必须为3-10个字符\n只能使用字母,数字和下划线组成,并只能以字母开头')
continue
# 2.4 检验密码强度
if not re.findall('^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,16}$', password):
print('\n密码太弱,必须包含大写字母,小写字母和数字,\n并且长度必须为8-16位')
continue
python注册时密码强度检验失败
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
檀越@新空间 2025-06-16 00:13关注上午好☀️☀️☀️️
本答案参考通义千问从你的代码中可以看出,你已经尝试实现了一个简单的注册功能,并且加入了对用户名和密码的基本校验逻辑。然而,你的密码强度校验部分存在问题,导致无法正确检测密码强度。以下是问题分析和解决方案。
问题分析
-
continue的误用:- 在
if not re.findall(...)条件下,你使用了continue,但continue是用于循环体内的语句,表示跳过当前迭代并继续下一次循环。在这里,它会导致程序直接跳过后续逻辑,而不会提示用户重新输入密码。
- 在
-
逻辑错误:
- 在密码强度校验部分,如果密码不符合要求,应该提示用户重新输入密码,而不是直接跳过。
-
缺少明确的错误提示:
- 当前代码在密码强度校验失败时,只打印了一条提示信息,但没有让用户有机会重新输入密码。
解决方案
为了修复这些问题,我们需要调整逻辑,确保在密码强度校验失败时能够提示用户重新输入密码,并且避免使用
continue错误地中断流程。以下是改进后的代码:def register(): while True: # 1. 让用户输入用户名和密码 print("\n注册") username = input("请输入用户名: ").strip() password = input("请输入密码: ").strip() re_password = input("请确认密码: ").strip() # 2. 进行简单的逻辑判断 # 2.1 判断用户是否要退出 is_register = input("按任意键继续注册,输入 'n' 退出: ").strip().lower() if is_register == "n": break # 2.2 判断两次输入的密码是否一致 if password != re_password: print("\n两次输入的密码不一致,请重新注册!") continue # 2.3 检验用户名是否合法 import re if not re.match(r'^[a-zA-Z]\w{2,9}$', username): print('\n用户名长度必须为3-10个字符\n只能使用字母、数字和下划线组成,并只能以字母开头') continue # 2.4 检验密码强度 if not re.match(r'^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,16}$', password): print('\n密码太弱,必须包含大写字母、小写字母和数字,并且长度必须为8-16位') continue # 如果所有校验都通过,则注册成功 print("\n注册成功!") break
代码改进点
-
移除错误的
continue:- 将
continue替换为if嵌套结构,确保只有在满足条件时才执行跳过逻辑。
- 将
-
增加退出选项:
- 在输入
n时,允许用户退出注册流程。
- 在输入
-
增强提示信息:
- 提供更清晰的提示信息,告知用户具体需要满足的规则。
-
使用
re.match而非re.findall:re.findall返回的是匹配结果的列表,而re.match更适合用来检查整个字符串是否符合正则表达式。
运行示例
假设用户输入如下内容:
注册 请输入用户名: user123 请输入密码: Pass1234 请确认密码: Pass1234 按任意键继续注册,输入 'n' 退出: y 注册成功!如果用户输入的密码不符合要求:
注册 请输入用户名: user123 请输入密码: pass 请确认密码: pass 按任意键继续注册,输入 'n' 退出: y 密码太弱,必须包含大写字母、小写字母和数字,并且长度必须为8-16位这样,代码就能正确处理各种情况,并引导用户完成注册流程。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报-