鱼C论坛

 找回密码
 立即注册
查看: 1494|回复: 2

[已解决]第14讲动动手课后题

[复制链接]
发表于 2021-5-23 20:26:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:请写一个密码安全性检查的代码代码:check.py

# 密码安全性检查代码
#
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
#
# 中级密码要求:
#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#   2. 密码长度不能低于8位
#
# 高级密码要求:
#   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#   2. 密码只能由字母开头
#   3. 密码长度不能低于16位
代码:print('==============================RESTART==============================\n')
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
alphas = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
password = input('请输入需要检查的密码组合:')
length = len(password)
while (password.isspace()) or (length == 0):
    password = input('您输入的密码为空(或空格),请重新输入:')
    length = len(password)
if length <= 8:
    flaglen = 1
if 8 < length <= 16:
    flaglen = 2
if length >= 16:
    flaglen = 3

flagcon = 0
for i in password:
    if i in symbols:
        flagcon += 1
        break
for i in password:
    if i in nums:
        flagcon += 1
        break
for i in password:
    if i in alphas:
        flagcon += 1
        break
   
while 1:
    print('您的密码安全级别评定为:',end='')   # 这里end后面少了个等号
    if flaglen == 1 or flagcon == 1:
        print('低')
    elif flaglen == 3 and flagcon == 3 and (password[0] in alphas):
        print('高')
        print('请继续保持')
        break
    else:
        print('中')
        
    print('''请按以下方式提升您的安全级别:
                    1.密码必须由数字、字母及特殊字符三种组合
                    2.密码只能由字母开头
                    3.密码长度不能低于16位''')
    break
为什么要定义flag_con =0,然后flag_con+=1,这样编写的目的及作用是什么呢?为什么不能像前面的flag_len =1.flag_len = 2.编写进而在后面的程序中直接让flag_con 等于1 或2或3呢?
求大神指教讲解以下!先蟹蟹啦
最佳答案
2021-5-23 20:34:49


因为 flag_con 是用来判断有几种字符情况的,1、2、3 分别代表 密码有一种字符、有两种、三种 字符情况

而你如果直接进行赋值 1、2或者 3 那么 后续 flag_con 所在的 for 循环下的 if 条件全部要更改,因为 代码中的 if 只写出了一种情况

举个例子。假设你密码只含两种字符,我们可以通过 三个 for 循环 判断是否有来进行增加含有字符的情况

而你直接进行赋值,你在不更改 if 条件下,如何做到用 2 判断是 字母,和特殊符号组合,还是数字和字母?又或者 字母和数字呢

这样 if 条件就会更加繁琐,所以还是前者优于后者~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-23 20:34:49 | 显示全部楼层    本楼为最佳答案   


因为 flag_con 是用来判断有几种字符情况的,1、2、3 分别代表 密码有一种字符、有两种、三种 字符情况

而你如果直接进行赋值 1、2或者 3 那么 后续 flag_con 所在的 for 循环下的 if 条件全部要更改,因为 代码中的 if 只写出了一种情况

举个例子。假设你密码只含两种字符,我们可以通过 三个 for 循环 判断是否有来进行增加含有字符的情况

而你直接进行赋值,你在不更改 if 条件下,如何做到用 2 判断是 字母,和特殊符号组合,还是数字和字母?又或者 字母和数字呢

这样 if 条件就会更加繁琐,所以还是前者优于后者~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-23 20:53:17 | 显示全部楼层
Twilight6 发表于 2021-5-23 20:34
因为 flag_con 是用来判断有几种字符情况的,1、2、3 分别代表 密码有一种字符、有两种、三种 字符情况 ...

明白了,蟹蟹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 17:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表