鱼C论坛

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

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

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

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

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

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

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

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

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

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

        else :
             i = False

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

剩下部分省略。。。。。



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

while True:
    password = input("请输入需要检查的密码组合:")
    for each in password:
        if (each not in str1) and (each not in str2) and (each not in str3):
            print("密码包含无效特殊字符,请更换密码")
            break
    else:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

while True:
    password = input("请输入需要检查的密码组合:")
    for each in password:
        if (each not in str1) and (each not in str2) and (each not in str3):
            print("密码包含无效特殊字符,请更换密码")
            break
    else:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

if len(password)<8 or password.isdigit() or password.isalpha():
    print("""您的密码安全级别评定为:低
请按以下方式提升您的密码安全级别:
        1.密码必须由数字、字母及特殊字符三种组合
        2.密码只能由字母开头
        3.密码长度不低于16位""")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 21:36:11 | 显示全部楼层
由于特殊字符的密码只在中级和高级密码处出现,所以您可以在满足中级或高级密码的情况下,设置条件来进行判断。
想知道小甲鱼最近在做啥?请访问 -> 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有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我刚学 ...

啊啊啊……写代码的时候没带脑子,你的理解是正确的,感谢你的指正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 19:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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