第14讲课后题密码
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
passwd = input('请输入需要检查的密码组合:')
# 判断长度
length = len(passwd)
while (passwd.isspace() or length == 0) :
passwd = input("您输入的密码为空(或空格),请重新输入:")
length = len(passwd)
if length <= 8:
flag_len = 1
elif 8 < length < 16:
flag_len = 2
else:
flag_len = 3
flag_con = 0
# 判断是否包含特殊字符
for each in passwd:
if each in symbols:
flag_con += 1
break
# 判断是否包含字母
for each in passwd:
if each in chars:
flag_con += 1
break
# 判断是否包含数字
for each in passwd:
if each in nums:
flag_con += 1
break
# 打印结果
while 1 :
print("您的密码安全级别评定为:", end='')
if flag_len == 1 or flag_con == 1 :
print("低")
elif flag_len == 3 and flag_con == 3 and (passwd in chars):
print("高")
print("请继续保持")
break
else:
print("中")
print("请按以下方式提升您的密码安全级别:\n\
\t1. 密码必须由数字、字母及特殊字符三种组合\n\
\t2. 密码只能由字母开头\n\
\t3. 密码长度不能低于16位")
break
这道题不太明白求大佬指点
问题描述:1,flag_con == 1 代表一个类型(特殊字符或者数字或字母)吗?
flag_con == 3 代表三个字符类型(特殊字符and数字and字母)吗?
2.输入的密码类型为什么用for循环呢
1,flag_con == 1 代表一个类型(特殊字符或者数字或字母)吗?
# 判断是否包含特殊字符
for each in passwd:
if each in symbols:
flag_con += 1
break
# 判断是否包含字母
for each in passwd:
if each in chars:
flag_con += 1
break
# 判断是否包含数字
for each in passwd:
if each in nums:
flag_con += 1
break
这上面注释都写的很清楚了,分别判断什么类型的 ,只要符合条件就 + 1 然后退出循环,执行下面的代码
flag_con 是个用来统计密码字符串包含哪几种类型的字符用的
当 flag_con = 1 时候说明只包含 数字、字母、特殊字符这三种的其中一种
同理 flag_con = 2 时候说明只包含 数字、字母、特殊字符这三种的其中两种
flag_con = 3 时候就说明密码中包含全包含了数字、字母、特殊字符这三种
2.输入的密码类型为什么用for循环呢?
用 for 循环来一个个将你 输入的密码字符串拿出来循环判断呀,比如你输入 'abc123' 他就从 a 开始一个个拿出来循环判断是不是 字母、特殊字符、数字
问题描述:1,flag_con == 1 代表一个类型(特殊字符或者数字或字母)吗?
flag_con == 3 代表三个字符类型(特殊字符and数字and字母)吗?
解答: flag_con只是一个变量名,跟啥都没关系,之所以设置,从for循环判断里可以看到:
①、当满足条件的时候,flag_con就自增1,当三个条件都满足的时候,flag_con就自增为3.
②、之所以设置这么一个变量,主要是为了方便记录状态。
你可以简单理解为:满足单一条件的时候,这个开关就开一次,三个条件都满足的时候,这个开关就开三次。
当满足不同的状态的时候,可以输出不同的结果。
2.输入的密码类型为什么用for循环呢?
解答:
用for循环是为了遍历你输入密码的每一个字符。
因为你需要判断是否包含字母,大小写等,判断的都是单一的字符,所以这里必须用for循环,for循环也是最省事的。
Twilight6 发表于 2020-7-13 13:50
这上面注释都写的很清楚了,分别判断什么类型的 ,只要符合条件就 + 1 然后退出循环,执行下面 ...
大佬好,如果 flag_con = 1 时候说明只包含 数字、字母、特殊字符这三种的其中一种,是不是就是题意错了
低级密码要求:
# 1. 密码由单纯的数字或字母组成
# 2. 密码长度小于等于8位
说好低密码是有数字或者字母组成,那万一是特殊字符也给的是低吧 今天又起雾了 发表于 2020-7-13 14:04
大佬好,如果 flag_con = 1 时候说明只包含 数字、字母、特殊字符这三种的其中一种,是不是就是题意错了
...
对的 题意没错的,小于 8 位肯定是低级密码了 今天又起雾了 发表于 2020-7-13 14:04
大佬好,如果 flag_con = 1 时候说明只包含 数字、字母、特殊字符这三种的其中一种,是不是就是题意错了
...
高级密码的前提是 大于 16 位,这个不满足,其他条件在怎么满足也没有用的哈
不用太过研究题目的严谨性,能达到大致题意就好
heidern0612 发表于 2020-7-13 13:54
问题描述:1,flag_con == 1 代表一个类型(特殊字符或者数字或字母)吗?
flag_c ...
大佬好,,
for each in passwd:
if each in symbols:
flag_con += 1
break
按照您的思路,你看我理解的对吗。each代表passd里的每个字符假设字符是"¥%123" if each in symbols:
先去判断¥ 然后% 再1、到1这就不满足这个循环,就不用+1了吧 Twilight6 发表于 2020-7-13 14:10
高级密码的前提是 大于 16 位,这个不满足,其他条件在怎么满足也没有用的哈
不用太过研究题目的 ...
好的,谢谢大佬 今天又起雾了 发表于 2020-7-13 14:11
大佬好,,
for each in passwd:
if each in symbols:
each指的是你输入的密码,比如你输入的是abc123.
each在for循环第一次的时候,each就是你输入密码中的a,然后跳到if判断。
if a(也就是each)在你的symbol特征里, flag_con += 1,也就是说在的话,flag_con就变成1,不在的话继续..
下面依次判断,b、c、1、2、3,只要碰到满足1次each在symbol里,程序就成立,flag_con就变成1. heidern0612 发表于 2020-7-13 14:17
each指的是你输入的密码,比如你输入的是abc123.
each在for循环第一次的时候,each就是你输入密码中的 ...
谢谢大佬我明白了 今天又起雾了 发表于 2020-7-13 14:22
谢谢大佬我明白了
别的for循环判断也都是同理。
简单来说,你自己input的密码中,任一个字符满足你的三个特征库,flag_con就会累加,累加到3。
累加只够1,就是低。累加够3,就是高。
页:
[1]