鱼C论坛

 找回密码
 立即注册
查看: 1176|回复: 5

[已解决]014 课后练习求助 关于“密码安全性检查的代码“”

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

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

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

x
014 课后练习,写一个密码安全性检查的代码,课后答案我理解了,但是我想多实现一个功能:

原题目基本上设定了所有的特殊字符“~!@#$%^&*()_=-/,.?<>;:[]{}|\”,   我想设定特殊字符仅允许其中的一部分,比如允许输入的特殊字符范围为“~!@#$%^&*()” ,  输入其他的特殊字符会报错。
我草拟的代码如下,运行起来会有BUG,达不到预期。  我感觉逻辑上的确有问题,但是又没有办法,想请教下各位大神。。。。


  1. str1 = """~!@#$%^&*()"""
  2. str2 ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWZYZ"
  3. str3 ="0123456789"
  4. i = True

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

  6. while i == True:
  7.     for each in password:
  8.         if (each not in str1) and (each not in str2) and (each not in str3):
  9.             print("密码包含无效特殊字符,请更换密码")
  10.             password = input("请输入需要检查的密码组合:")
  11.             i = True

  12.         else :
  13.              i = False

  14. if len(password) <8 or password.isdigit()== True or password.isalpha()== True:
  15.     print("""您的密码安全级别评定为:低
  16. 请按以下方式提升您的密码安全级别:
  17.         1.密码必须由数字、字母及特殊字符三种组合
  18.         2.密码只能由字母开头
  19.         3.密码长度不低于16位""")
复制代码


剩下部分省略。。。。。



原题目
0. 请写一个密码安全性检查的代码代码:check.py
批注 2020-03-31 210831.png
最佳答案
2020-3-31 21:21:08
  1. str1 = """~!@#$%^&*()"""
  2. str2 ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWZYZ"
  3. str3 ="0123456789"

  4. while True:
  5.     password = input("请输入需要检查的密码组合:")
  6.     for each in password:
  7.         if (each not in str1) and (each not in str2) and (each not in str3):
  8.             print("密码包含无效特殊字符,请更换密码")
  9.             break
  10.     else:
  11.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-31 21:21:08 | 显示全部楼层    本楼为最佳答案   
  1. str1 = """~!@#$%^&*()"""
  2. str2 ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWZYZ"
  3. str3 ="0123456789"

  4. while True:
  5.     password = input("请输入需要检查的密码组合:")
  6.     for each in password:
  7.         if (each not in str1) and (each not in str2) and (each not in str3):
  8.             print("密码包含无效特殊字符,请更换密码")
  9.             break
  10.     else:
  11.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 21:22:56 | 显示全部楼层
  1. str1 = """~!@#$%^&*()"""
  2. str2 ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWZYZ"
  3. str3 ="0123456789"


  4. while True:
  5.     password=input("请输入需要检查的密码组合:")
  6.     for each in password:
  7.         if not (each in str1 or each in str2 or each in str3):
  8.             print("密码包含无效特殊字符,请更换密码")
  9.             continue
  10.     break

  11. if len(password)<8 or password.isdigit() or password.isalpha():
  12.     print("""您的密码安全级别评定为:低
  13. 请按以下方式提升您的密码安全级别:
  14.         1.密码必须由数字、字母及特殊字符三种组合
  15.         2.密码只能由字母开头
  16.         3.密码长度不低于16位""")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 21:36:11 | 显示全部楼层
由于特殊字符的密码只在中级和高级密码处出现,所以您可以在满足中级或高级密码的情况下,设置条件来进行判断。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-1 20:14:31 | 显示全部楼层


感谢回复,但是第11行用 continue, 实际代码跑起来,会达不到效果, 2楼的答案跑起来是OK的

我刚学PYTHON, 冒昧说下我的理解:
第11行,continue 写在for循环最后一句,相当于没有写。代码跑起来会出现,输入的字符里,有多少不符合要求的字符,就会打印多少次“密码包含无效特殊字符,请更换密码”

如果用continue, 那无论如何,for 循环一定会跑完所有each, 之后就会执行 break, 跳出整个while,  也就是这段代码 不会再次历经while 循环,出现让人重新输入密码组合

评分

参与人数 1荣誉 +1 收起 理由
永恒的蓝色梦想 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2020-4-1 21:23:17 | 显示全部楼层
Cminglyer 发表于 2020-4-1 20:14
感谢回复,但是第11行用 continue, 实际代码跑起来,会达不到效果, 2楼的答案跑起来是OK的

我刚学 ...

啊啊啊……写代码的时候没带脑子,你的理解是正确的,感谢你的指正
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 23:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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