QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
63
查看: 299|回复: 9

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

[复制链接]
最佳答案
1 
累计签到:1 天
连续签到:1 天
猫不理 发表于 2018-3-14 10:29:13 2999 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

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,由三种字符组成也包含在这里面。)

  1. print("***********welcome to the the key security test*********")
  2. key=input("请输入你所需要的判定的密码:")
  3. flag=0
  4. for sb in key:
  5.     if  sb.isdigit():
  6.         flag += 1
  7.         break
  8. for sb in key:   
  9.     if  sb.isalpha() :
  10.         flag += 1
  11.         break
  12. for sb in key:     
  13.     if sb in "@!?"*#$%&'()[]{}/\|+-.,=<>^`~_:;":
  14.         flag += 3
  15.         break

  16. if  len(key) <= 8 or flag <=1:
  17.     print("""密码安全度:低\n提升密码安全度方法:\n1、密码必须由数字、字母及特殊字符组合\n2、密码只能由字母开头\n3、密码长度不能低于16位""")
  18. elif  len(key) > 8 and 5 > flag >= 2:
  19.     print("密码强度中")
  20. elif  len(key) >=16 or flag ==5:
  21.     print("密码强度高")
复制代码
楼层
跳转到指定楼层
最佳答案
854 
累计签到:372 天
连续签到:112 天
ba21 发表于 2018-3-14 10:47:40 | 显示全部楼层
  if  特殊符:  特殊符也有判断的方法。 就if 特殊符: 没有这样的写法吧
最佳答案
1119 
累计签到:362 天
连续签到:5 天
BngThea 发表于 2018-3-14 11:27:25 | 显示全部楼层
罗列所有的特殊符号,然后用 in 进行判断
最佳答案
2 
累计签到:42 天
连续签到:2 天
graceasyi 发表于 2018-3-14 13:55:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 graceasyi 于 2018-3-14 14:03 编辑

还没学这一课,把你的程序改了改。我的逻辑是:
1、密码长度小于等于8位,或者密码只由一种字符类型组成,则安全度均为低;
2、密码长度大于8,并且密码由于字母,数字,特殊字符中的两种组成,安全度为中;
3、密码长度大于等于16,或者密码包含字母,数字,特殊字符,则安全度为高(密码长度大于8,由三种字符组成也包含在这里面。)

  1. print("***********welcome to the the key security test*********")
  2. key=input("请输入你所需要的判定的密码:")
  3. flag=0
  4. for sb in key:
  5.     if  sb.isdigit():
  6.         flag += 1
  7.         break
  8. for sb in key:   
  9.     if  sb.isalpha() :
  10.         flag += 1
  11.         break
  12. for sb in key:     
  13.     if sb in "@!?"*#$%&'()[]{}/\|+-.,=<>^`~_:;":
  14.         flag += 3
  15.         break

  16. if  len(key) <= 8 or flag <=1:
  17.     print("""密码安全度:低\n提升密码安全度方法:\n1、密码必须由数字、字母及特殊字符组合\n2、密码只能由字母开头\n3、密码长度不能低于16位""")
  18. elif  len(key) > 8 and 5 > flag >= 2:
  19.     print("密码强度中")
  20. elif  len(key) >=16 or flag ==5:
  21.     print("密码强度高")
复制代码
最佳答案
1 
累计签到:36 天
连续签到:1 天
喵叔 发表于 2018-3-15 14:52:12 | 显示全部楼层
如果没有输出,肯定是你的if逻辑没有覆盖到所有情况
最佳答案
1 
累计签到:36 天
连续签到:1 天
喵叔 发表于 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("密码强度高")
最佳答案
0 
累计签到:69 天
连续签到:1 天
咖啡的旅游记 发表于 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=""
最佳答案
1 
累计签到:1 天
连续签到:1 天
猫不理  楼主| 发表于 2018-3-24 13:15:59 | 显示全部楼层
graceasyi 发表于 2018-3-14 13:55
还没学这一课,把你的程序改了改。我的逻辑是:
1、密码长度小于等于8位,或者密码只由一种字符类型组成, ...

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

别人应该是有c基础的情况下,在学的python
最佳答案
2 
累计签到:42 天
连续签到:2 天
graceasyi 发表于 2018-3-24 21:10:44 | 显示全部楼层
猫不理 发表于 2018-3-24 13:15
你这个方案真是太好了!你很有天赋学代码野!还没学到这一课已经这么厉害了,说真的,我能看得懂你写了什 ...

过奖了,我没有学代码的天赋,只是有一点C语言的基础。觉得python语言挺好的,就抽空自学一下,我也是新手呢,一起学习~

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /1 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.3 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2018-6-20 00:41

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