|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
求大佬看看我的代码哪里错了,为什么有时候输入多个数字和特殊字符会出现多个“高”。原题目是零基础入门学习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[0] 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循环嵌套判断又嵌套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[0] in chars):
- print("高")
- print("请继续保持")
- break
- else:
- print("中")
- print("请按以下方式提升您的密码安全级别:\n\
- \t1. 密码必须由数字、字母及特殊字符三种组合\n\
- \t2. 密码只能由字母开头\n\
- \t3. 密码长度不能低于16位")
- break
复制代码
|
|