鱼C论坛

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

14将课后check.py

[复制链接]
发表于 2020-3-15 21:18:09 | 显示全部楼层 |阅读模式

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

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

x
代码如下。这题是不是没有包括所有的情况,例如“非字母开头但是超过16位且包含字母、数字、特殊符号”的密码,就无法判断级别了?
  1. # 定义特殊字符串
  2. spestr = "~!@#$%^&*()_=-/,.?<>;:[]{}|\"
  3. # 定义数字字符串
  4. numstr = '1234567890'
  5. # 定义字母字符串
  6. alpstr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

  7. passwd = input('输入密码:')
  8. passcap = passwd[0]

  9. # 密码是否包含特殊字符
  10. for i in range(len(spestr)):
  11.     if passwd.find(spestr[i]) != -1:
  12.         spe = 'True'
  13.         break
  14.     else:
  15.         spe = 'False'
  16. # 密码是否包含数字
  17. for i in range(len(numstr)):
  18.     if passwd.find(numstr[i]) != -1:
  19.         num = 'True'
  20.         break
  21.     else:
  22.         num = 'False'

  23. # 密码是否包含字母
  24. for i in range(len(alpstr)):
  25.     if passwd.find(alpstr[i]) != -1:
  26.         alp = 'True'
  27.         break
  28.     else:
  29.         alp = 'False'

  30. # 密码是否为字母开头
  31. if passcap.isalpha() == True:
  32.     cap = 'True'
  33. else:
  34.     cap = 'False'

  35. a = '密码安全级别评定为:'
  36. #低级密码
  37. if len(passwd) <= 8 or passwd.isdigit() == True or passwd.isalpha() == True:
  38.     print(a, '低')
  39. # 中级密码
  40. elif len(passwd) >8 and (passwd.isdigit() == False or passwd.isalpha() == False) and (spe == 'False' or num == 'False' or alp == 'False'):
  41.     print(a, '中')
  42. # 高级密码
  43. elif len(passwd) >= 16 and spe == 'True' and num == 'True' and alp == 'True' and cap == 'True':
  44.     print(a, '高')
  45.    
  46.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-15 22:12:02 | 显示全部楼层
自己回答一下:看了答案之后发现,除了高和低都是中。继续改代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 22:39:43 | 显示全部楼层
改完的代码如下,结果应该和小甲鱼的一样了。
  1. # 定义特殊字符串
  2. spestr = "~!@#$%^&*()_=-/,.?<>;:[]{}|\"
  3. # 定义数字字符串
  4. numstr = '1234567890'
  5. # 定义字母字符串
  6. alpstr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

  7. passwd = input('输入密码:')
  8. # 获取psswd的第一个字符
  9. passcap = passwd[0]

  10. # 密码是否包含特殊字符
  11. for i in range(len(spestr)): # 从特殊字符串顺序取值,从0至特殊字符串长度
  12.     if passwd.find(spestr[i]) != -1: # 如果passwd里能找到特殊字符串里的字符则为true并退出for循环,否则为false并继续for循环
  13.         spe = 'True'
  14.         break
  15.     else:
  16.         spe = 'False'
  17. # 密码是否包含数字
  18. for i in range(len(numstr)): # 从数字字符串顺序取值,从0至数字符串长度
  19.      if passwd.find(numstr[i]) != -1: # 如果passwd里能获取数字字符串里的字符则为true并退出for循环,否则为false并继续for循环
  20.         num = 'True'
  21.         break
  22.      else:
  23.         num = 'False'
  24. # 密码是否包含字母
  25. for i in range(len(alpstr)): # 从字母字符串顺序取值,从0至字母符串长度
  26.     if passwd.find(alpstr[i]) != -1: # 如果passwd里能获取字母字符串里的字符则为true并退出for循环,否则为false并继续for循环
  27.         alp = 'True'
  28.         break
  29.     else:
  30.         alp = 'False'
  31. # 密码是否为字母开头
  32. if passcap.isalpha() == True:
  33.     cap = 'True'
  34. else:
  35.     cap = 'False'

  36. a = '密码安全级别评定为:'
  37. while True:
  38.     #低级密码
  39.     if len(passwd) <= 8 or passwd.isdigit() == True or passwd.isalpha() == True:
  40.         print(a, '低')
  41.     #高级密码
  42.     elif len(passwd) >= 16 and spe == 'True' and num == 'True' and alp == 'True' and cap == 'True':
  43.         print(a, '高')
  44.         print('请继续保持')
  45.         break
  46.     #中级密码
  47.     else:   
  48.         print(a, '中')
  49.     print('请按一下方式提升您的密码安全级别: \n 1.密码必须由数字、字母及特殊字符三种组合 \n 2.密码只能由字母开头 \n 3.密码长度不能低于16位')
  50.     break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 09:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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