i'love'le'e 发表于 2021-9-5 00:37:35

第十四课作业最后一题

#密码安全性检查代码
#
#低级密码要求
#1.密码由单纯的数字或字母组成
#2.密码长度小于等于8位
#
#中级密码要求:
#1.密码必须由数字,字母或特殊字符(仅限:~!@%^&*()_=-/,.?<>;:[]{}/\)任何两种组合
#2.密码长度不能低于8位
#
#高级密码要求:
#1.密码必须由数字、字母及特殊字符(仅限:~!@%^&*()_=-/,.?<>;:[]{}/\)三种组合
#2.密码只能由字母开头
#3.密码长度不能低于16位
print("请输入需要检查的密码组合:",end="")
secret=input()
length=len(secret)
while True:
    if secret.isdigit() or secret.isalpha() or length<=8:
      print("您的密码评级为:低")
      print("""#1.密码必须由数字、字母及特殊字符(仅限:~!@%^&*()_=-/,.?<>;:[]{}/\)三种组合
#2.密码只能由字母开头
#3.密码长度不能低于16位""")
      break
    if secret.isalnum() or length<16:
      print("你的密码评级为:中")
      print("""#1.密码必须由数字、字母及特殊字符(仅限:~!@%^&*()_=-/,.?<>;:[]{}/\\)三种组合
#2.密码只能由字母开头
#3.密码长度不能低于16位""")
      break
    secretson=","{","}","/","\\"]]                            #走到这里代表一定有字符
    a=""
    secretson1=a.join(secretson)
    print(secretson1)
    if secretson1.isdigit or secretson1.isalpha:                                                                                                                      ##############怀疑错误原因
      print("你的密码评级为:中")
      print("""#1.密码必须由数字、字母及特殊字符(仅限:~!@%^&*()_=-/,.?<>;:[]{}/\\)三种组合
#2.密码只能由字母开头
#3.密码长度不能低于16位""")
      break
    else:
      print("你的密码评级为:高")
      print("继续保持")
      break
      
这是第十四课最后一题,错误原因可能是 if secretson1.isdigit or secretson1.isalpha:这一行,因为即使我输入aaaaaaaaaaaa111111!!!!!,它还是输出print("你的密码评级为:中")
      print("""#1.密码必须由数字、字母及特殊字符(仅限:~!@%^&*()_=-/,.?<>;:[]{}/\\)三种组合
#2.密码只能由字母开头
#3.密码长度不能低于16位""")
在线等,谢谢

白two 发表于 2021-9-5 00:38:30

你想问啥?

白two 发表于 2021-9-5 00:40:14

看到了,抱歉,主要是太乱了,没看清

i'love'le'e 发表于 2021-9-5 00:50:06

白two 发表于 2021-9-5 00:38
你想问啥?

我想问的是为什么我输入明明是等级高的密码,它也会走进 if secretson1.isdigit or secretson1.isalpha,
操作结果:请输入需要检查的密码组合:asdfghjasdfgh!!!!!!!!
asdfghjasdfgh
你的密码评级为:中5555
#1.密码必须由数字、字母及特殊字符(仅限:~!@%^&*()_=-/,.?<>;:[]{}/\)三种组合
#2.密码只能由字母开头
#3.密码长度不能低于16位

白two 发表于 2021-9-5 00:50:49

你看一下你最后 if 哪里,根本没有调用isdigit 和 isalpha 方法,要加括号的,第 19 行
print("请输入需要检查的密码组合:", end="")
# secret = input()
secret = 'aaaaaaaaaaaa111111!!!!!'
length = len(secret)
while True:
    if secret.isdigit() or secret.isalpha() or length <= 8:
      print("您的密码评级为:低")
      break
    if secret.isalnum() or length < 16:
      print("你的密码评级为:中")
      break
    secretson = [i for i in secret if
               not i in ["~", "!", "@", "%", "^", "&", "*", "(", ")", "_", "=", "-", "/", ",", ".", "?", "<", ">",
                           ";", ":", "[", "]", "{", "}", "/", "\\"]]
    a = ""
    print(secretson)
    secretson1 = a.join(secretson)
    print(secretson1)
    if secretson1.isdigit() or secretson1.isalpha():
      print("你的密码评级为:中")
      break
    else:
      print("你的密码评级为:高")
      print("继续保持")
      break

i'love'le'e 发表于 2021-9-5 00:51:20

i'love'le'e 发表于 2021-9-5 00:50
我想问的是为什么我输入明明是等级高的密码,它也会走进 if secretson1.isdigit or secretson1.isalpha, ...

结果发错了,应该是这个:请输入需要检查的密码组合:aaaaaaaaaaaaa1111111!!!!!!
aaaaaaaaaaaaa1111111
你的密码评级为:中5555
#1.密码必须由数字、字母及特殊字符(仅限:~!@%^&*()_=-/,.?<>;:[]{}/\)三种组合
#2.密码只能由字母开头
#3.密码长度不能低于16位

白two 发表于 2021-9-5 00:55:19

本帖最后由 白two 于 2021-9-5 10:15 编辑

secret = 'aaaaaaaaaaaa111111!!!!!'
print(secret.isdigit)

<built-in method isdigit of str object at 0x00000246607E2E40>

你看哈,不加括号就是内置方法,而 python 只要不是 0 或 False ,就按 True 来处理,说一你那样写就相当于恒为 True

i'love'le'e 发表于 2021-9-5 10:22:29

白two 发表于 2021-9-5 00:55
你看哈,不加括号就是内置方法,而 python 只要不是 0 或 False ,就按 True 来处理,说一你那样写 ...

但是它不是false吗?isdigit是检查str是不是全数字,而aaaaaaa1111!!!不是全数字啊

i'love'le'e 发表于 2021-9-5 10:24:43

白two 发表于 2021-9-5 00:55
你看哈,不加括号就是内置方法,而 python 只要不是 0 或 False ,就按 True 来处理,说一你那样写 ...

哦懂了,谢谢大哥
页: [1]
查看完整版本: 第十四课作业最后一题