鱼C论坛

 找回密码
 立即注册
查看: 1822|回复: 10

[已解决]第14讲课后题密码

[复制链接]
发表于 2020-7-13 13:44:41 | 显示全部楼层 |阅读模式

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

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

x
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[0] 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循环呢
最佳答案
2020-7-13 14:25:55

别的for循环判断也都是同理。

简单来说,你自己input的密码中,任一个字符满足你的三个特征库,flag_con就会累加,累加到3。

累加只够1,就是低。累加够3,就是高。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-13 13:50:01 | 显示全部楼层


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 开始一个个拿出来循环判断是不是 字母、特殊字符、数字


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

使用道具 举报

发表于 2020-7-13 13:54:53 | 显示全部楼层
问题描述:1,flag_con == 1   代表一个类型(特殊字符或者数字或字母)吗?
                     flag_con == 3   代表三个字符类型(特殊字符and数字and字母)吗?


               
解答: flag_con只是一个变量名,跟啥都没关系,之所以设置,从for循环判断里可以看到:

①、当满足条件的时候,flag_con就自增1,当三个条件都满足的时候,flag_con就自增为3.

②、之所以设置这么一个变量,主要是为了方便记录状态。

你可以简单理解为:满足单一条件的时候,这个开关就开一次,三个条件都满足的时候,这个开关就开三次。

当满足不同的状态的时候,可以输出不同的结果。


2.输入的密码类型为什么用for循环呢?

解答:

用for循环是为了遍历你输入密码的每一个字符。

因为你需要判断是否包含字母,大小写等,判断的都是单一的字符,所以这里必须用for循环,for循环也是最省事的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-13 14:04:29 | 显示全部楼层
Twilight6 发表于 2020-7-13 13:50
这上面注释都写的很清楚了,分别判断什么类型的 ,只要符合条件就 + 1 然后退出循环,执行下面 ...

大佬好,如果 flag_con = 1 时候说明只包含 数字、字母、特殊字符这三种的其中一种,是不是就是题意错了
低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
说好低密码是有数字或者字母组成,那万一是特殊字符也给的是低吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-13 14:05:50 | 显示全部楼层
今天又起雾了 发表于 2020-7-13 14:04
大佬好,如果 flag_con = 1 时候说明只包含 数字、字母、特殊字符这三种的其中一种,是不是就是题意错了
...

对的 题意没错的,小于 8 位肯定是低级密码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-13 14:10:19 | 显示全部楼层
今天又起雾了 发表于 2020-7-13 14:04
大佬好,如果 flag_con = 1 时候说明只包含 数字、字母、特殊字符这三种的其中一种,是不是就是题意错了
...



高级密码的前提是 大于 16 位,这个不满足,其他条件在怎么满足也没有用的哈

不用太过研究题目的严谨性,能达到大致题意就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-13 14:11:03 | 显示全部楼层
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了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-13 14:16:34 | 显示全部楼层
Twilight6 发表于 2020-7-13 14:10
高级密码的前提是 大于 16 位,这个不满足,其他条件在怎么满足也没有用的哈

不用太过研究题目的 ...

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

使用道具 举报

发表于 2020-7-13 14:17:01 | 显示全部楼层
今天又起雾了 发表于 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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-13 14:22:02 | 显示全部楼层
heidern0612 发表于 2020-7-13 14:17
each指的是你输入的密码,比如你输入的是abc123.

each在for循环第一次的时候,each就是你输入密码中的 ...

谢谢大佬我明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-13 14:25:55 | 显示全部楼层    本楼为最佳答案   

别的for循环判断也都是同理。

简单来说,你自己input的密码中,任一个字符满足你的三个特征库,flag_con就会累加,累加到3。

累加只够1,就是低。累加够3,就是高。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 11:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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