|
本帖最后由 尉尉的可乐 于 2025-9-4 19:50 编辑
你的代码存在变量未定义、循环逻辑不完整、判定条件缺失三个核心问题,导致报错且无法正常运行。以下是具体问题、修复方案及完整代码:
一、直接报错的2个原因
1.变量num未定义:判断“是否包含数字”时用了if apple in num,但未定义数字集合num,Python找不到该变量会报错。
2.has_letter和has_symbol循环逻辑不完整:检查字母/符号的for循环内,未写has_letter = True和has_symbol = True,即使检测到目标字符,标志位也不会激活,后续判定永远为False。
二、“输完密码不继续”的原因
现有判定只覆盖“低(1+1)、中(2+2)、高(3+3+1)”三种情况,若密码是其他组合(如first=3+second=2),while循环内无匹配if,会空转不输出结果。
三、完整修复代码
- #补充定义数字集合num,修复未定义问题
- num = '0123456789'
- letter = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM'
- symbol = '!@#$%^&()_+|}{:>?<.,;][=-'
- first = 0 # 记录密码包含的字符类型数量(数字/字母/符号)
- second = 0 # 记录密码长度等级
- third = 0 # 记录是否为首字母大写(istitle()判定)
- temp = input('请输入密码:')
- #检查是否包含数字(修复num未定义,补充激活标志位)
- has_num = False
- for apple in temp:
- if apple in num:
- has_num = True
- if has_num:
- first += 1
- #检查是否包含字母(补充激活标志位)
- has_letter = False
- for apple in temp:
- if apple in letter:
- has_letter = True # 关键:之前缺失这行
- if has_letter:
- first += 1
- #检查是否包含符号(补充激活标志位)
- has_symbol = False
- for apple in temp:
- if apple in symbol:
- has_symbol = True # 关键:之前缺失这行
- if has_symbol:
- first += 1
- #判定密码长度等级(优化逻辑顺序,更直观)
- length = len(temp)
- if length <= 8:
- second = 1
- elif 8 < length <= 16:
- second = 2
- else: # 等价于length >16
- second = 3
- #判定是否为首字母大写(istitle():所有单词首字母大写,其他小写)
- if temp.istitle():
- third = 1
- #修复判定条件缺失:覆盖所有可能情况,删除无用while循环
- if first == 3 and second == 3 and third == 1:
- print('高')
- elif (first == 2 and second == 2) or (first == 3 and second == 2): # 补充中等级其他可能
- print('中')
- elif first >= 1 and second == 1: # 补充低等级其他可能
- print('低')
- else:
- print('中') # 兜底:未匹配情况默认“中”(可按需调整)
复制代码 |
|