Cminglyer 发表于 2020-3-31 21:15:52

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

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

BngThea 发表于 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

永恒的蓝色梦想 发表于 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位""")

Herrzwei 发表于 2020-3-31 21:36:11

由于特殊字符的密码只在中级和高级密码处出现,所以您可以在满足中级或高级密码的情况下,设置条件来进行判断。

Cminglyer 发表于 2020-4-1 20:14:31

永恒的蓝色梦想 发表于 2020-3-31 21:22


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

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

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

永恒的蓝色梦想 发表于 2020-4-1 21:23:17

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

我刚学 ...

啊啊啊……写代码的时候没带脑子{:10_262:},你的理解是正确的,感谢你的指正
页: [1]
查看完整版本: 014 课后练习求助 关于“密码安全性检查的代码“”