求大佬看看我的代码哪里错了
求大佬看看我的代码哪里错了,为什么有时候输入多个数字和特殊字符会出现多个“高”。原题目是零基础入门学习python(旧)中的14讲课后作业检查密码安全评级的题,代码如下。secret=input('请输入需要检查的密码组合:')
alpha='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string1=r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
math='1234567890'
length=len(secret)
if secret.isalpha() or secret.isdigit() or length<8:
print('您的密码安全级别评定为:低')
elif length>=16 and (secret in alpha):
for each in secret:
if each in string1:
for i in secret:
if i in math:
print('您的密码安全级别评定为:高')
break
else:
print('您的密码安全级别评定为:中')
print('请通过以下方式提升您的密码安全级别:\n\
1.密码必须由数字、字母及特殊字符三种组合\n\
2.密码只能由字母开头\n\
3.密码长度不能低于16位') for each in secret: #然而这个循环还是一直在走啊?(阅读顺序:3)
if each in string1:
for i in secret: #对应这~~~(阅读顺序:2)
if i in math:
print('您的密码安全级别评定为:高')
break #这个跳出循环对应我给你标记的循环,注意看缩进(阅读顺序:1) 笨鸟学飞 发表于 2020-10-21 22:30
for each in secret: #然而这个循环还是一直在走啊?(阅 ...
如果把缩进调到和print一起,也还是会出现这种情况啊,这就很不解
for循环嵌套判断又嵌套for循环很容易出现跳出一个循环却跳不出上级循环的状况
所以还是建议三项分开判断
参考答案:
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
passwd = input('请输入需要检查的密码组合:')
# 判断长度
length = len(passwd)
while (passwd.isspace() or length == 0) :
passwd = input("您输入的密码为空(或空格),请重新输入:")
length = len(passwd)
if length <= 8:
flag_len = 1
elif 8 < length < 16:
flag_len = 2
else:
flag_len = 3
flag_con = 0
# 判断是否包含特殊字符
for each in passwd:
if each in symbols:
flag_con += 1
break
# 判断是否包含字母
for each in passwd:
if each in chars:
flag_con += 1
break
# 判断是否包含数字
for each in passwd:
if each in nums:
flag_con += 1
break
# 打印结果
while 1 :
print("您的密码安全级别评定为:", end='')
if flag_len == 1 or flag_con == 1 :
print("低")
elif flag_len == 3 and flag_con == 3 and (passwd in chars):
print("高")
print("请继续保持")
break
else:
print("中")
print("请按以下方式提升您的密码安全级别:\n\
\t1. 密码必须由数字、字母及特殊字符三种组合\n\
\t2. 密码只能由字母开头\n\
\t3. 密码长度不能低于16位")
break 老哥一语惊醒梦中人啊,一个break只能停止一个for循环,所以我在第一for循环后面加了一个break就ok了
页:
[1]