鱼C论坛

 找回密码
 立即注册
查看: 750|回复: 3

[已解决]【课后习题】密码安全性检查

[复制链接]
发表于 2019-5-31 11:41:50 | 显示全部楼层 |阅读模式

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

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

x
# 密码安全性检查代码
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
#
# 中级密码要求:
#&#160; &#160;1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#&#160; &#160;2. 密码长度不能低于8位
#
# 高级密码要求:
#&#160; &#160;1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#&#160; &#160;2. 密码只能由字母开头
#&#160; &#160;3. 密码长度不能低于16位


num = '0123456789'
char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''

pw = input('请输入您的密码:')
      
#判断长度
length = len(pw)

if length <= 8:
    flag_len = 1
elif 8 < length < 16:
    flag_len = 2
else:
    flag_len = 3


flag_con = 0
#判断是否包含字母
for each in pw:
    if each in num:
        flag_con = flag_con + 1
        break

#判断是否包含数字
for each in pw:
    if each in char:
        flag_con += 1
        break

#判断是否包含特殊字符
for each in pw:
    if each in symbols:
        flag_con += 1
        break
   
#鉴定结果
    while True:
        print('您的安全等级为:')
        if flag_len == 1 or flag_con == 1:
            print('低')
            
        elif flag_len == 2 or flag_con == 2:
            print('中')
            
        else:
            print('高')
            
        break
----------------------------------------------------------------------------------
我模仿小甲鱼的代码写了以上密码安全性检查的代码,但是在输入密码后会产生好几次的结果循环,希望能大神们交流下个中缘由。
最佳答案
2019-5-31 12:02:53
如上面所说,你把while的代码放在了for里面可以改成这样

  1. # 密码安全性检查代码
  2. # 低级密码要求:
  3. #&#160; &#160;1. 密码由单纯的数字或字母组成
  4. #&#160; &#160;2. 密码长度小于等于8位
  5. #
  6. # 中级密码要求:
  7. #&#160; &#160;1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
  8. #&#160; &#160;2. 密码长度不能低于8位
  9. #
  10. # 高级密码要求:
  11. #&#160; &#160;1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
  12. #&#160; &#160;2. 密码只能由字母开头
  13. #&#160; &#160;3. 密码长度不能低于16位


  14. num = '0123456789'
  15. char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  16. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''

  17. pw = input('请输入您的密码:')
  18.       
  19. #判断长度
  20. length = len(pw)

  21. if length <= 8:
  22.     flag_len = 1
  23. elif 8 < length < 16:
  24.     flag_len = 2
  25. else:
  26.     flag_len = 3


  27. flag_con = 0
  28. #判断是否包含字母
  29. for each in pw:
  30.     if each in num:
  31.         flag_con = flag_con + 1
  32.         break

  33. #判断是否包含数字
  34. for each in pw:
  35.     if each in char:
  36.         flag_con += 1
  37.         break

  38. #判断是否包含特殊字符
  39. for each in pw:
  40.     if each in symbols:
  41.         flag_con += 1
  42.         break
  43.    
  44. #鉴定结果
  45. while True:
  46.     print('您的安全等级为:')
  47.     if flag_len == 1 or flag_con == 1:
  48.         print('低')
  49.             
  50.     elif flag_len == 2 or flag_con == 2:
  51.         print('中')
  52.             
  53.     else:
  54.         print('高')
  55.             
  56.     break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-31 11:56:37 | 显示全部楼层
最后while代码块整体缩进错误。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-31 12:02:53 | 显示全部楼层    本楼为最佳答案   
如上面所说,你把while的代码放在了for里面可以改成这样

  1. # 密码安全性检查代码
  2. # 低级密码要求:
  3. #&#160; &#160;1. 密码由单纯的数字或字母组成
  4. #&#160; &#160;2. 密码长度小于等于8位
  5. #
  6. # 中级密码要求:
  7. #&#160; &#160;1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
  8. #&#160; &#160;2. 密码长度不能低于8位
  9. #
  10. # 高级密码要求:
  11. #&#160; &#160;1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
  12. #&#160; &#160;2. 密码只能由字母开头
  13. #&#160; &#160;3. 密码长度不能低于16位


  14. num = '0123456789'
  15. char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  16. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''

  17. pw = input('请输入您的密码:')
  18.       
  19. #判断长度
  20. length = len(pw)

  21. if length <= 8:
  22.     flag_len = 1
  23. elif 8 < length < 16:
  24.     flag_len = 2
  25. else:
  26.     flag_len = 3


  27. flag_con = 0
  28. #判断是否包含字母
  29. for each in pw:
  30.     if each in num:
  31.         flag_con = flag_con + 1
  32.         break

  33. #判断是否包含数字
  34. for each in pw:
  35.     if each in char:
  36.         flag_con += 1
  37.         break

  38. #判断是否包含特殊字符
  39. for each in pw:
  40.     if each in symbols:
  41.         flag_con += 1
  42.         break
  43.    
  44. #鉴定结果
  45. while True:
  46.     print('您的安全等级为:')
  47.     if flag_len == 1 or flag_con == 1:
  48.         print('低')
  49.             
  50.     elif flag_len == 2 or flag_con == 2:
  51.         print('中')
  52.             
  53.     else:
  54.         print('高')
  55.             
  56.     break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-31 12:20:07 | 显示全部楼层
还有很严重的错误呀,最后逻辑不对,用and连接,最后判断都是错的。比如密码:!这不属于任何一种级别的密码,又,密码:1234567890,这也是错的,还有....很多错误。
我把我自己写的,贴一下,参考下。
  1. number = "0123456789"
  2. letter = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
  3. symbool = r"~!@#$%^&*()_=-/,.?<>;:[]{}|""\"
  4. i = 1
  5. j = 0
  6. k = 0
  7. m = 0
  8. while i:
  9.     mima = input("请输入密码:")
  10.     if len(mima) <= 8 and (mima.isdigit() or mima.isalpha()):
  11.         print("这是一个低级密码")
  12.         break
  13.         continue
  14.     if len(mima) > 8:
  15.         for each in mima:# 判断是否包含数字
  16.             if each in number:
  17.                 j += 1
  18.                 break
  19.         for each in mima:# 判断是否含有字母
  20.             if each in letter:
  21.                 k += 1
  22.                 break
  23.         for each in mima:# 判断是否含有特殊符号
  24.             if each in symbool:
  25.                 m += 1
  26.                 break
  27.     if j + k + m == 2:
  28.         print("这是一个中级密码")
  29.         break
  30.         continue
  31.     n = 1 if mima[0] in letter else 0
  32.     if j + k + m == 3 and len(mima) >= 16 and n:
  33.         print("这是一个高级密码")
  34.         break
  35.         continue
  36.     print("无法识别,不属于三种密码中任何一种!!!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 16:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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