鱼C论坛

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

[已解决]第14讲作业,请大神指点

[复制链接]
发表于 2018-3-14 10:29:13 | 显示全部楼层 |阅读模式

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

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

x
我写作业时写了如下版本,但是奇怪的是整个程序跑不起来,而且特殊符应该怎么写呢?如果按照如此框架下,应该怎么修改呢,跪求大神指定。

print("***********welcome to the the key security test*********")
a=input("请输入你所需要的判定的密码:")
key=str(a)
flag=0
if  key.isnumeric():
    flag += 1
    if  key.isalpha() :
        flag += 1
        if key.isalnum():
            flag += 2
            if  特殊符:
                flag += 3
                if  key.count() <= 8 or flag <=1:
                    print("""密码安全度:低\\ 提升密码安全度方法:\\ 1、密码必须由数字、字母及特殊字符组合
                          \\ 2、密码只能由字母开头\ \3、密码长度不能低于16
                            位""")
                    if  key.count() > 8 and 5 > flag >= 2:
                        print("密码强度中")
                        if  key.count() >=16 and  flag ==5:
                            print("密码强度高")
最佳答案
2018-3-14 13:55:26
本帖最后由 graceasyi 于 2018-3-14 14:03 编辑

还没学这一课,把你的程序改了改。我的逻辑是:
1、密码长度小于等于8位,或者密码只由一种字符类型组成,则安全度均为低;
2、密码长度大于8,并且密码由于字母,数字,特殊字符中的两种组成,安全度为中;
3、密码长度大于等于16,或者密码包含字母,数字,特殊字符,则安全度为高(密码长度大于8,由三种字符组成也包含在这里面。)
print("***********welcome to the the key security test*********")
key=input("请输入你所需要的判定的密码:")
flag=0
for sb in key:
    if  sb.isdigit():
        flag += 1
        break
for sb in key:    
    if  sb.isalpha() :
        flag += 1
        break
for sb in key:     
    if sb in "@!?"*#$%&'()[]{}/\|+-.,=<>^`~_:;":
        flag += 3
        break

if  len(key) <= 8 or flag <=1:
    print("""密码安全度:低\n提升密码安全度方法:\n1、密码必须由数字、字母及特殊字符组合\n2、密码只能由字母开头\n3、密码长度不能低于16位""")
elif  len(key) > 8 and 5 > flag >= 2:
    print("密码强度中")
elif  len(key) >=16 or flag ==5:
    print("密码强度高")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-14 10:47:40 | 显示全部楼层
  if  特殊符:  特殊符也有判断的方法。 就if 特殊符: 没有这样的写法吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 11:27:25 | 显示全部楼层
罗列所有的特殊符号,然后用 in 进行判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 13:55:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 graceasyi 于 2018-3-14 14:03 编辑

还没学这一课,把你的程序改了改。我的逻辑是:
1、密码长度小于等于8位,或者密码只由一种字符类型组成,则安全度均为低;
2、密码长度大于8,并且密码由于字母,数字,特殊字符中的两种组成,安全度为中;
3、密码长度大于等于16,或者密码包含字母,数字,特殊字符,则安全度为高(密码长度大于8,由三种字符组成也包含在这里面。)
print("***********welcome to the the key security test*********")
key=input("请输入你所需要的判定的密码:")
flag=0
for sb in key:
    if  sb.isdigit():
        flag += 1
        break
for sb in key:    
    if  sb.isalpha() :
        flag += 1
        break
for sb in key:     
    if sb in "@!?"*#$%&'()[]{}/\|+-.,=<>^`~_:;":
        flag += 3
        break

if  len(key) <= 8 or flag <=1:
    print("""密码安全度:低\n提升密码安全度方法:\n1、密码必须由数字、字母及特殊字符组合\n2、密码只能由字母开头\n3、密码长度不能低于16位""")
elif  len(key) > 8 and 5 > flag >= 2:
    print("密码强度中")
elif  len(key) >=16 or flag ==5:
    print("密码强度高")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 14:52:12 | 显示全部楼层
如果没有输出,肯定是你的if逻辑没有覆盖到所有情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 14:59:43 | 显示全部楼层
帮你测试了一下,代码如下
print("***********welcome to the the key security test*********")
a=input("请输入你所需要的判定的密码:")
#输出一个测试字符串
# key='dsadasd2313'
key=a
flag=0
# print(key.count())
if  key.isnumeric():
    flag += 1
if  key.isalpha() :
    flag += 1
if key.isalnum():
    flag += 2
#此处特舒符报错,帮你注释掉
# if  特殊符:
#     flag += 3
#Python count() 方法用于统计字符串里某个字符出现的次数。
if  len(key) <= 8 or flag <=1:
    print("""密码安全度:低\\ 提升密码安全度方法:\\ 1、密码必须由数字、字母及特殊字符组合
  \\ 2、密码只能由字母开头\ \3、密码长度不能低于16
    位""")
if  len(key) > 8 and 5 > flag >= 2:
    print("密码强度中")
if  len(key)>=16 and  flag ==5:
    print("密码强度高")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 21:51:59 | 显示全部楼层
strD="您的密码安全评定为:低"
strM="您的密码安全评定为:中"
strG="您的密码安全评定为:高"
strB="请按以下方式提升您的密码安全级别:\
\n\t1.密码必须由数字、字母及特殊字符组合。\
\n\t2.密码只能由字母开头。\n\t3.密码长度不能低于16位。"
strnum='1234567890'
strletter='abcdefghigklmnopqrstuvwxyz'
strLetter='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
specialchars=r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
mstr=""

while True:
  pw=input("请输入需要检查的密码组合:").strip()
  print(pw)
  if pw[0].isalpha():#字母开头
    for i in pw:
##      print("我是密码中的一个:",i)
      if (i in strnum) :mstr+='a'
      elif(i in strletter):mstr+='b'
      elif(i in strLetter):mstr+='b'
      elif(i in specialchars):mstr+='c'
##    print(mstr)
#定义:a=数字量,b=字母量,c=特殊字符量
    lenstr=len(mstr)  
    num=mstr.count('a')
    letter=mstr.count('b')
    spchar=mstr.count('c')
##    print("长度:",lenstr,"   数字:",num,"   字母:",letter,"    特殊字符:",spchar)
    if (num==lenstr  or letter==lenstr or(num + letter==lenstr)) or lenstr<8:#低
      print(strD+'\n'+strB)
    elif ((num>0 and letter>0 and spchar==0)\
          or (num>0 and spchar>0 and letter==0)\
          or (letter>0 and spchar>0 and num==0)\
          or (num>0 and letter>0 and spchar>0)) and 16>lenstr>=8  :#中
      print(strM+'\n'+strB)
    elif num>0 and letter>0 and spchar>0 and lenstr>=16:
      print(strG+'\n'+strB)
  else:
    print(strB)
  mstr=""
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-24 13:15:59 | 显示全部楼层
graceasyi 发表于 2018-3-14 13:55
还没学这一课,把你的程序改了改。我的逻辑是:
1、密码长度小于等于8位,或者密码只由一种字符类型组成, ...

你这个方案真是太好了!你很有天赋学代码野!还没学到这一课已经这么厉害了,说真的,我能看得懂你写了什么,好厉害的说!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 13:32:47 | 显示全部楼层
猫不理 发表于 2018-3-24 13:15
你这个方案真是太好了!你很有天赋学代码野!还没学到这一课已经这么厉害了,说真的,我能看得懂你写了什 ...

别人应该是有c基础的情况下,在学的python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 21:10:44 | 显示全部楼层
猫不理 发表于 2018-3-24 13:15
你这个方案真是太好了!你很有天赋学代码野!还没学到这一课已经这么厉害了,说真的,我能看得懂你写了什 ...

过奖了,我没有学代码的天赋,只是有一点C语言的基础。觉得python语言挺好的,就抽空自学一下,我也是新手呢,一起学习~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 09:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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