今天在写小甲鱼课后作业的时候又出现了一个问题 求帮助
answer=Falseprint('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
while len(temp)<16 and temp.isdigit()==True and temp.isalpha==True and answer==False:
iflen(temp)<16:
print('您的密码小于16位,安全强度低,请更改')
temp=input('在此键入您的新密码')
iftemp.isdigit()==True:
print('您的密码安全评级为:低')
print('请以以下方法提升您的密码安全级别')
print('1,密码必须由数字,字母及特殊字符三种组合')
print('2,密码只能由字母开头')
while temp.isdigit()==True:
print('您的密码不符合要求')
temp=input('请键入您的新密码')
iftemp.isalpha==True:
print('您的密码中不能只含有字母')
while temp.isalpha==True:
print('密码必须由数字,字母及特殊字符三种组合')
temp=input('在此键入您的新密码')
iftemp.isalpha==False:
print('您的密码未以字母为开头')
while temp.isalpha==False:
print('密码只能由字母开头')
temp=input('在此键入您的新密码')
for i in temp:
if i in r"'~!@#$%^&*()_=-/,.?<>;:[]{}|\'":
answer=True
else:
answer=False
ifanswer==False:
print('您的密码安全评级为:低')
print('请以以下方法提升您的密码安全级别')
print('密码必须由数字,字母及特殊字符三种组合')
while answer==False:
print('密码中必须包含有合法的字符')
print('该程序所支持的合法字符有:')
print(r"'~!@#$%^&*()_=-/,.?<>;:[]{}|\'")
temp=input('在此键入您的新密码')
print('您的密码安全评级为:高')
print('请继续保持')
以上是代码 想做一个程序可以看密码强度 要求是必须大于16位 需要有字母和数字的混合且第一个为字母 带有~!@#$%^&*()_=-/,.?<>;:[]{}|\中的任意符号 我写的这个跑起来随便输入一个都是直接到了最后 好像第一个while之后的所有都没有进行 怎么修改一下啊 各位大佬{:5_100:} 第四行,while循环的条件,第三部分 isalpha后面没有写小括号,导致不管你输入什么都不可能进入while循环
另外,你再仔细看看你的while循环的这四个条件是否合适 sunrise085 发表于 2020-9-3 15:26
第四行,while循环的条件,第三部分 isalpha后面没有写小括号,导致不管你输入什么都不可能进入while循环
...
已经加上了 但是好像还是不太行 不管我输入怎样的密码 都是直接显示最后的评级为高
想要让len(temp)<16 and temp.isdigit()==True and temp.isalpha()==True and answer==False:这四个条件同时不满足时直接进入最后 如果出现任意一个满足的情况就进入下面的循环 但是怎样才能达到这样的效果啊 自己看了好久也每台弄明白{:5_104:} 孙赖 发表于 2020-9-3 16:03
已经加上了 但是好像还是不太行 不管我输入怎样的密码 都是直接显示最后的评级为高
想要让len(temp)
用or
while len(temp)<16 or temp.isdigit()==True or temp.isalpha()==True or answer==False
另外,你的这个answer,一开始是直接赋值的啊,都没有进行判断哎,万一人家第一次键入的密码就含有特殊字符呢,那你这程序岂不是冤枉人家了啊 sunrise085 发表于 2020-9-3 16:10
用or
谢谢大佬 好像确实是应该用or 用了or程序可以进行了 但是又出现了一个问题 就是下面的for循环走不通啊好像 这个我是没有用对吗{:5_104:} 把你代码改成这样了,试试看
answer = False
print('--------密码安全性检查程序-------')
while answer == False:
temp = input('请键入您的密码')
if len(temp) < 2:
print('您的密码小于16位,安全强度低,请更改')
answer = False
continue
elif temp.isdigit() == True:
print('您的密码安全评级为:低')
print('请以以下方法提升您的密码安全级别')
print('1,密码必须由数字,字母及特殊字符三种组合')
print('2,密码只能由字母开头')
print('您的密码不符合要求')
answer = False
continue
elif temp.isalpha() == False:
print('您的密码未以字母为开头')
print('密码只能由字母开头')
answer = False
continue
elif temp.isalpha() == True:
print('您的密码中不能只含有字母')
print('密码必须由数字,字母及特殊字符三种组合')
answer = False
continue
else:
standard = r"'~!@#$%^&*()_=-/,.?<>;:[]{}|\'"
for i in temp:
answer = True if standard.find(i) > 0 else False
if answer == True:
print('您的密码安全评级为:高')
print('请继续保持')
break
else:
print('您的密码安全评级为:低')
print('请以以下方法提升您的密码安全级别')
print('密码必须由数字,字母及特殊字符三种组合')
print('密码中必须包含有合法的字符')
print('该程序所支持的合法字符有:')
print(r"'~!@#$%^&*()_=-/,.?<>;:[]{}|\'")
continue
疾风怪盗 发表于 2020-9-3 16:48
把你代码改成这样了,试试看
刚刚跑了一下好像还是不太行 密码中加了特殊符号但是还是会提醒需要特殊符号{:5_104:} 疾风怪盗 发表于 2020-9-3 16:48
把你代码改成这样了,试试看
请键入您的密码a=1111111111111111111111111111111111111111111111
您的密码安全评级为:低
请以以下方法提升您的密码安全级别
密码必须由数字,字母及特殊字符三种组合
密码中必须包含有合法的字符
该程序所支持的合法字符有:
'~!@#$%^&*()_=-/,.?<>;:[]{}|\'
请键入您的密码a11111111111111111111111111111111=
您的密码安全评级为:高
请继续保持
这是什么情况啊 按说这两种输入的密码不应该是一样的吗
孙赖 发表于 2020-9-3 17:18
刚刚跑了一下好像还是不太行 密码中加了特殊符号但是还是会提醒需要特殊符号
用的我写的代码么?不会啊,我试过,能识别出特殊符号啊 本帖最后由 疾风怪盗 于 2020-9-3 17:27 编辑
孙赖 发表于 2020-9-3 17:20
请键入您的密码a=1111111111111111111111111111111111111111111111
您的密码安全评级为:低
请以以下方 ...
standard = r"'~!@#$%^&*()_=-/,.?<>;:[]{}|\'"
for i in temp:
if standard.find(i) > 0:
answer = True
break
else:
answer = False
这段改成这样
我之前都是把特殊符号写在最后,之前那个循环,最后一位是数字时重新判断为Flase了 疾风怪盗 发表于 2020-9-3 16:48
把你代码改成这样了,试试看
你这样写的确不对
这样写的话,最终answer的值是看最后一个字符是不是在standard中,与前面的其他字符就没关系了,因为没循每循环一次,answer就改变一次
sunrise085 发表于 2020-9-3 17:34
你这样写的确不对
这样写的话,最终answer的值是看最后一个字符是不是在standard中,与前面的其他字符就 ...
本来想错了,想写的简单点
现在改过来了,加个break退出应该就没问题了 疾风怪盗 发表于 2020-9-3 17:36
本来想错了,想写的简单点
现在改过来了,加个break退出应该就没问题了
在哪加个break退出呢 我也发现这个问题了就是最后的结果好像只看最后一次 本帖最后由 疾风怪盗 于 2020-9-3 18:25 编辑
孙赖 发表于 2020-9-3 18:15
在哪加个break退出呢 我也发现这个问题了就是最后的结果好像只看最后一次
standard = r"'~!@#$%^&*()_=-/,.?<>;:[]{}|\'"
for i in temp:
if standard.find(i) > 0:
answer = True
break
else:
answer = False
就是这一段,改成这样就行了,一旦找到一个符合的就break,后面的就不用管了
但是还有个问题,如果有一个合法字符,再来一个非法字符,就无法判断了
你要做这个判断密码,最好还是用正则表达式来匹配吧 孙赖 发表于 2020-9-3 18:15
在哪加个break退出呢 我也发现这个问题了就是最后的结果好像只看最后一次
import re
answer = False
print('--------密码安全性检查程序-------')
while answer == False:
temp = input('请键入您的密码')
if len(temp) < 2:
print('您的密码小于16位,安全强度低,请更改')
answer = False
continue
elif temp.isdigit() == True:
print('您的密码安全评级为:低')
print('请以以下方法提升您的密码安全级别')
print('1,密码必须由数字,字母及特殊字符三种组合')
print('2,密码只能由字母开头')
print('您的密码不符合要求')
answer = False
continue
elif temp.isalpha() == False:
print('您的密码未以字母为开头')
print('密码只能由字母开头')
answer = False
continue
elif temp.isalpha() == True:
print('您的密码中不能只含有字母')
print('密码必须由数字,字母及特殊字符三种组合')
answer = False
continue
else:
standard = '[~!@#$%^&*()_=-\\\/\\,.?\\<\\>;:\\[\\]\\{\\}\\|a-z0-9A-Z]+'
#print(re.fullmatch(standard, temp))
if re.fullmatch(standard, temp) !=None:
print('您的密码安全评级为:高')
print('请继续保持')
answer = True
break
else:
print('您的密码安全评级为:低')
print('请以以下方法提升您的密码安全级别')
print('密码必须由数字,字母及特殊字符三种组合')
print('密码中必须包含有合法的字符')
print('该程序所支持的合法字符有:')
print(r"'~!@#$%^&*()_=-/,.?<>;:[]{}|\'")
answer = False
continue
正则不太会写,不知道写的对不对,如果用正则就可以匹配出非法字符了 疾风怪盗 发表于 2020-9-3 18:57
正则不太会写,不知道写的对不对,如果用正则就可以匹配出非法字符了
太感谢了 已经懂了
页:
[1]