鱼C论坛

 找回密码
 立即注册
查看: 2485|回复: 9

[已解决]密码检测只能检测出错低和中,检测不出高,求指点。

[复制链接]
发表于 2020-5-6 20:16:20 | 显示全部楼层 |阅读模式

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

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

x
大神莫笑,小白求助:我用下面的代码,可以检测出错误和中低等级,但怎么也查不出高。为什么,

#check.py

list1=['0','1','2','3','4','5','6','7','8','9']           #老师的方案里直接用‘0213324’。好笨拉
list2=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']#必须加引号,作字符串用
list3=['!','@','#','$','%','^','&','*','(',')','_','=','-','/',',','.','?','<','>',';',':','[',']','{','}','|']

code=str(input('请输入需要检查的密码组合:'))
count_num=0
count_alp=0
count_spe=0

for each in code:
    if each in list1:
        count_num+=1

for each in code:
    if each in list2:
        count_num+=1

for each in code:
    if each in list3:
        count_spe+=1

if count_num==0 and count_alp!=0:
    len(code)<=8
    print('您的安全级别评定为:低')
    print('''请你按以下方式提升您的安全级别:\n1.密码必须由数字字母及特殊符号三种组合\n2.密码只能字母开头''')

elif count_num>0 and count_alp>0 and  count_spe>0:
    count_num+count_alp+count_alp>=16
    str(code[0]) in list2                         #这一句是不是有问题,我始终得不到高的评级
    print('您的安全级别评定为:高')
    pring('请继续保持')

elif count_num!=0 and count_alp!=0 or count_num!=0 and count_spe!=0 or count_spe!=0 and count_alp!=0:
    len(code)>=8
    print('您的密码安全级别评定为:中')
    print('''请你按以下方式提升您的安全级别:\n1.密码必须由数字字母及特殊符号三种组合\n2.密码只能字母开头''')

else:
    print('输入错误,请重新输入')
    print('''请你按以下方式提升您的安全级别:\n1.密码必须由数字字母及特殊符号三种组合\n2.密码只能字母开头''')

最佳答案
2020-5-7 09:56:18
本帖最后由 heidern0612 于 2020-5-7 09:59 编辑


你用if套if的方法比较好些,这种广度判断的情况,要写的条件太多,不好判断。

像这种审核机制,用深度判断。

8位以上、以下做个if判断:

        ---8位以上、16位以下做个if判断:

                ----首字母是否小写判断:

                        ----是否包含特殊字符和数字判断:       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 08:01:46 | 显示全部楼层
你的条件语句审核的范围不合适,len和str[code[0]]本身就是条件的一部分,为啥要写在if分支的内部。

写在if的内部了,那还判断个啥?

重复代码比较多,想一想改进一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-7 09:52:56 | 显示全部楼层
heidern0612 发表于 2020-5-7 08:01
你的条件语句审核的范围不合适,len和str[code[0]]本身就是条件的一部分,为啥要写在if分支的内部。

写 ...

当然想
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-7 09:55:48 | 显示全部楼层
heidern0612 发表于 2020-5-7 08:01
你的条件语句审核的范围不合适,len和str[code[0]]本身就是条件的一部分,为啥要写在if分支的内部。

写 ...

当时想到了不写在if内部,但觉得写在if语句中太长,就---
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-7 09:56:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 heidern0612 于 2020-5-7 09:59 编辑


你用if套if的方法比较好些,这种广度判断的情况,要写的条件太多,不好判断。

像这种审核机制,用深度判断。

8位以上、以下做个if判断:

        ---8位以上、16位以下做个if判断:

                ----首字母是否小写判断:

                        ----是否包含特殊字符和数字判断:       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-7 09:58:22 | 显示全部楼层
heidern0612 发表于 2020-5-7 09:56
你用if套if的方法比较好些,这种广度判断的情况,要写的条件太多,不好判断。

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

使用道具 举报

发表于 2020-5-7 10:22:06 | 显示全部楼层
本帖最后由 heidern0612 于 2020-5-7 10:39 编辑

给你个样子,看看能不能理解。
list1=['0','1','2','3','4','5','6','7','8','9']          
list2=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
list3=['!','@','#',','%','^','&','*','(',')','_','=','-','/',',','.','?','<','>',';',':','[',']','{','}','|']


code=input('请输入需要检查的密码组合:')


def  pswresult(code):
    flag_alp = flag_num =flag_infi =flag= 0
    for each in code:
        if each in list1:
            flag_num=1
            
    for each in code:
        if each in list2:
            flag_alp=1
    
    for each in code:
        if each in list3:
            flag_infi=1

    flag = flag_alp+ flag_infi+flag_num    

    if len(code) >= 16 and flag ==3 :
        print("当前密码符合要求,评定为高级")
    else:
        print("当前密码符合要求,评定为中级")


def main(code):
    if len(code) < 8 :
        print("当前密码长度不符合要求。")
    else:
        if code[0] not in list2 :
            print("当前密码不符合要求,要求首字母为小写字母")
        else:
            pswresult(code)
            
main(code)

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

使用道具 举报

 楼主| 发表于 2020-5-7 10:50:08 | 显示全部楼层
heidern0612 发表于 2020-5-7 10:22
给你个样子,看看能不能理解。

条件的分解很科学。就是我没明白,中级里面,按您的代码,中级与高级的区别只是第一个字符不是字母,但中级要求是有两种就行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-7 10:57:43 | 显示全部楼层
liuzg123 发表于 2020-5-7 10:50
条件的分解很科学。就是我没明白,中级里面,按您的代码,中级与高级的区别只是第一个字符不是字母,但中 ...

不,中级和高级的区别在于len(code) >= 16 and flag ==3 :这一句

也就是长度超过16位,并且密码里包含字母、数字和特殊字符才算高级密码,

其余的不符合的,都算中级密码。

这两个中级和高级密码的判断,都是在密码长度超过或等于8,并且首位都是小写字母的情况下判断的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-8 23:48:46 | 显示全部楼层
heidern0612 发表于 2020-5-7 10:57
不,中级和高级的区别在于len(code) >= 16 and flag ==3 :这一句

也就是长度超过16位,并且密码里包含 ...

仔细想了下,确实
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 18:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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