鱼C论坛

 找回密码
 立即注册
查看: 2760|回复: 12

[已解决]第14讲:设置密码安全

[复制链接]
发表于 2021-2-25 13:20:16 | 显示全部楼层 |阅读模式

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

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

x
我想要添加机会制度,但是只能多进行1次,而且第二次不会进行等级判断,这是什么原因,然后就是我感觉我写的好复杂,有没有大佬帮忙改下??
代码是这样的:
  1. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  2. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3. nums = '0123456789'

  4. times = 10

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

  6. # 判断长度
  7. length = len(passwd)

  8. while (passwd.isspace() or length == 0):
  9.     passwd = input("您输入的密码为空(或空格),请重新输入:")
  10.     length = len(passwd)

  11. if length <= 8:
  12.     flag_len = 1
  13. elif 8 < length < 16:
  14.     flag_len = 2
  15. else:
  16.     flag_len = 3

  17. flag_con = 0

  18. # 判断是否包含特殊字符
  19. for each in passwd:
  20.     if each in symbols:
  21.         flag_con += 1
  22.         break

  23. # 判断是否包含字母
  24. for each in passwd:
  25.     if each in chars:
  26.         flag_con += 1
  27.         break

  28. # 判断是否包含数字
  29. for each in passwd:
  30.     if each in nums:
  31.         flag_con += 1
  32.         break

  33.     # 打印结果
  34. while 1:
  35.     times = times - 1  # 用户每输入一次,可用机会就-1
  36.     print("您的密码安全级别评定为:", end='')
  37.     if flag_len == 1 or flag_con == 1:
  38.         print("低")
  39.         if times > 0:
  40.             question = input("是否重新输入:")
  41.             if (question == "是"):
  42.                 passwd = input("请重新输入:")
  43.                 length = len(passwd)
  44.             elif (question == "否"):
  45.                 print("设置完成!")
  46.     elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
  47.         print("高")
  48.         print("请继续保持")
  49.         break
  50.     else:
  51.         print("中")
  52.         if times > 0:
  53.             question = input("是否重新输入:")
  54.             if (question == "是"):
  55.                 passwd = input("请重新输入:")
  56.                 length = len(passwd)
  57.             elif (question == "否"):
  58.                 print("设置完成!")

  59.     print("最高安全级别设置方法:\n\
  60.     \t1. 密码必须由数字、字母及特殊字符三种组合\n\
  61.     \t2. 密码只能由字母开头\n\
  62.     \t3. 密码长度不能低于16位")
  63.     break
复制代码
最佳答案
2021-2-25 14:46:27
  1. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  2. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3. nums = '0123456789'

  4. times = 3

  5. tip = "最高安全级别设置方法:\n\
  6.     \t1. 密码必须由数字、字母及特殊字符三种组合\n\
  7.     \t2. 密码只能由字母开头\n\
  8.     \t3. 密码长度不能低于16位"
  9. while times:
  10.     times = times - 1  # 用户每输入一次,可用机会就-1
  11.     passwd = input('请输入需要检查的密码组合:')

  12.     # 判断长度
  13.     length = len(passwd)

  14.     while (passwd.isspace() or length == 0):
  15.         passwd = input("您输入的密码为空(或空格),请重新输入:")
  16.         length = len(passwd)

  17.     if length <= 8:
  18.         flag_len = 1
  19.     elif 8 < length < 16:
  20.         flag_len = 2
  21.     else:
  22.         flag_len = 3

  23.     flag_con = 0

  24.     # 判断是否包含特殊字符
  25.     for each in passwd:
  26.         if each in symbols:
  27.             flag_con += 1


  28.     # 判断是否包含字母
  29.     for each in passwd:
  30.         if each in chars:
  31.             flag_con += 1
  32.      

  33.     # 判断是否包含数字
  34.     for each in passwd:
  35.         if each in nums:
  36.             flag_con += 1


  37.     # 打印结果
  38.     print("您的密码安全级别评定为:", end='')
  39.     if flag_len == 1 or flag_con == 1:
  40.         print("低")
  41.         print(tip)
  42.         if times > 0:
  43.             question = input("是否重新输入:")
  44.             if (question == "是"):
  45.                 continue
  46.             elif (question == "否"):
  47.                 print("设置完成!")
  48.     elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
  49.         print("高")
  50.         print("请继续保持")
  51.         break
  52.     else:
  53.         print("中")
  54.         print(tip)
  55.         if times > 0:
  56.             question = input("是否重新输入:")
  57.             if (question == "是"):
  58.                 continue

  59.             elif (question == "否"):
  60.                 print("设置完成!")

  61.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-25 14:07:54 | 显示全部楼层
  1. def check_number_exist(password_str):
  2.     """
  3.         判断字符串中是否含有数字
  4.     """
  5.     has_number = False

  6.     for c in password_str:
  7.         if c.isnumeric():
  8.             has_number = True
  9.             break

  10.     return has_number


  11. def check_letter_exist(password_str):
  12.     """
  13.         判断字符串中是否含有字母
  14.     """
  15.     has_letter = False
  16.     for c in password_str:
  17.         if c.isalpha():
  18.             has_letter = True
  19.             break
  20.     return has_letter


  21. def main():
  22.     """
  23.         主函数
  24.     """

  25.     try_times = 5

  26.     while try_times > 0:
  27.         password = input('请输入密码:')

  28.         # 密码强度
  29.         strength_level = 0

  30.         # 规则1:密码长度大于9
  31.         if len(password) >= 8:
  32.             strength_level += 1
  33.         else:
  34.             print('密码长度要求至少八位!')

  35.         # 规则2:包含数字
  36.         if check_number_exist(password):
  37.             strength_level += 1
  38.         else:
  39.             print('密码要求包含数字!')

  40.         # 规则3:包含字母
  41.         if check_letter_exist(password):
  42.             strength_level += 1
  43.         else:
  44.             print('密码要求包含字母!')

  45.         if strength_level == 3:
  46.             print('恭喜!密码强度合格!')
  47.             break
  48.         else:
  49.             print('密码强度不合格!')
  50.             try_times -= 1

  51.         print('_________________')
  52.         print()

  53.     if try_times <= 0:
  54.         print('尝试次数过多,密码设置失败!')


  55. if __name__ == '__main__':
  56.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-25 14:39:59 | 显示全部楼层

大佬,你咋给全改了呢,我还是个小萌新,看不太懂你这个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 14:43:21 | 显示全部楼层
孤妓与酒 发表于 2021-2-25 14:39
大佬,你咋给全改了呢,我还是个小萌新,看不太懂你这个

...这个是一个while循环啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 14:44:54 | 显示全部楼层
这就是加了几个函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-25 14:45:21 | 显示全部楼层
yayc_zcyd 发表于 2021-2-25 14:43
...这个是一个while循环啊

,一个循环就这么长,我有点怀疑人生了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 14:46:27 | 显示全部楼层    本楼为最佳答案   
  1. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  2. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3. nums = '0123456789'

  4. times = 3

  5. tip = "最高安全级别设置方法:\n\
  6.     \t1. 密码必须由数字、字母及特殊字符三种组合\n\
  7.     \t2. 密码只能由字母开头\n\
  8.     \t3. 密码长度不能低于16位"
  9. while times:
  10.     times = times - 1  # 用户每输入一次,可用机会就-1
  11.     passwd = input('请输入需要检查的密码组合:')

  12.     # 判断长度
  13.     length = len(passwd)

  14.     while (passwd.isspace() or length == 0):
  15.         passwd = input("您输入的密码为空(或空格),请重新输入:")
  16.         length = len(passwd)

  17.     if length <= 8:
  18.         flag_len = 1
  19.     elif 8 < length < 16:
  20.         flag_len = 2
  21.     else:
  22.         flag_len = 3

  23.     flag_con = 0

  24.     # 判断是否包含特殊字符
  25.     for each in passwd:
  26.         if each in symbols:
  27.             flag_con += 1


  28.     # 判断是否包含字母
  29.     for each in passwd:
  30.         if each in chars:
  31.             flag_con += 1
  32.      

  33.     # 判断是否包含数字
  34.     for each in passwd:
  35.         if each in nums:
  36.             flag_con += 1


  37.     # 打印结果
  38.     print("您的密码安全级别评定为:", end='')
  39.     if flag_len == 1 or flag_con == 1:
  40.         print("低")
  41.         print(tip)
  42.         if times > 0:
  43.             question = input("是否重新输入:")
  44.             if (question == "是"):
  45.                 continue
  46.             elif (question == "否"):
  47.                 print("设置完成!")
  48.     elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
  49.         print("高")
  50.         print("请继续保持")
  51.         break
  52.     else:
  53.         print("中")
  54.         print(tip)
  55.         if times > 0:
  56.             question = input("是否重新输入:")
  57.             if (question == "是"):
  58.                 continue

  59.             elif (question == "否"):
  60.                 print("设置完成!")

  61.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 14:52:56 | 显示全部楼层

建议在最前面加一个:
print("一共有{}次机会。".format(times))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-25 15:14:47 | 显示全部楼层
都是大佬,谢谢你们
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-25 15:20:16 | 显示全部楼层

大佬,如果我想低中高都判定是否重新输入要怎么改合适啊,毕竟人家安全系数高但是不一定喜欢嘛,是吧,再次求助
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 15:36:28 | 显示全部楼层
孤妓与酒 发表于 2021-2-25 15:20
大佬,如果我想低中高都判定是否重新输入要怎么改合适啊,毕竟人家安全系数高但是不一定喜欢嘛,是吧,再 ...

我改一改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 16:06:02 | 显示全部楼层
  1. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  2. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3. nums = '0123456789'

  4. times = 3

  5. tip = "最高安全级别设置方法:\n\
  6.     \t1. 密码必须由数字、字母及特殊字符三种组合\n\
  7.     \t2. 密码只能由字母开头\n\
  8.     \t3. 密码长度不能低于16位"
  9. print("一共有{}次机会。".format(times))
  10. while times:
  11.    
  12.     times = times - 1  # 用户每输入一次,可用机会就-1
  13.     passwd = input('请输入需要检查的密码组合:')

  14.     # 判断长度
  15.     length = len(passwd)

  16.     while (passwd.isspace() or length == 0):
  17.         passwd = input("您输入的密码为空(或空格),请重新输入:")
  18.         length = len(passwd)

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

  25.     flag_con = 0 #特殊字符数
  26.     flag_con1 = 0 #字母数
  27.     flag_con2 = 0 #数字

  28.     # 判断是否包含特殊字符
  29.     for each in passwd:
  30.         if each in symbols:
  31.             flag_con += 1


  32.     # 判断是否包含字母
  33.     for each in passwd:
  34.         if each in chars:
  35.             flag_con1 += 1
  36.      

  37.     # 判断是否包含数字
  38.     for each in passwd:
  39.         if each in nums:
  40.             flag_con2 += 1


  41.     # 打印结果
  42.     print("您的密码安全级别评定为:", end='')
  43.     if flag_len == 1 or flag_con == 0 or flag_con1 == 0 or flag_con2 == 0:
  44.         print("低")
  45.         print(tip)
  46.         if times > 0:
  47.             question = input("是否重新输入:")
  48.             if (question == "是"):
  49.                 print("还有{}次机会。".format(times))
  50.                 continue
  51.             elif (question == "否"):
  52.                 print("设置完成!")
  53.                 break
  54.     elif flag_len == 3 and flag_con and flag_con1 and flag_con2 and (passwd[0] in chars):
  55.         print("高")
  56.         if times > 0:
  57.             question = input("是否重新输入:")
  58.             if (question == "是"):
  59.                 print("还有{}次机会。".format(times))
  60.                 continue

  61.             elif (question == "否"):
  62.                 print("设置完成!")
  63.                 break
  64.     else:
  65.         print("中")
  66.         print(tip)
  67.         if times > 0:
  68.             question = input("是否重新输入:")
  69.             if (question == "是"):
  70.                 print("还有{}次机会。".format(times))
  71.                 continue

  72.             elif (question == "否"):
  73.                 print("设置完成!")
  74.                 break

  75.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-2-25 21:16:48 | 显示全部楼层

牛批,谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 10:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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