鱼C论坛

 找回密码
 立即注册
查看: 1854|回复: 9

[已解决]python习题014求助

[复制链接]
发表于 2020-7-2 22:18:25 | 显示全部楼层 |阅读模式

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

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

x


                               
登录/注册后可看大图

如图 答案代码是

# 密码安全性检查代码
#
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
#
# 中级密码要求:
#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#   2. 密码长度不能低于8位
#
# 高级密码要求:
#   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#   2. 密码只能由字母开头
#   3. 密码长度不能低于16位
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. 为什么symbol命名时要有r呢 r代表什么意思(源码?) 什么情况会用到呢
2.在判断长度的代码中 已经有length = len(passwd) 为什么while循环中还要有这行代码呢?可以去掉吗
3.   flag_len  flag_con是python中已经默认的吗 表示什么意思呢?之前没有声明就可以直接用?

谢谢各位大佬 小弟感激不尽
最佳答案
2020-7-2 22:24:22



1. 为什么symbol命名时要有r呢 r代表什么意思(源码?) 什么情况会用到呢


原始字符串 r ,可以将字符串内的转义字符失去原有的效果,比如 '\n' 表示换行符,起换行效果,但是当你加上个 r 后,\n 就不会起到换行的效果,而单纯的是个 \n 字符串

2.在判断长度的代码中 已经有length = len(passwd) 为什么while循环中还要有这行代码呢?可以去掉吗


因为 while 循环里面重新输入了密码,导致密码长度改变,如果你不重新赋值新的密码长度,就会导致当你一开始输入空格时候,进入 while 循环后永远出不了 while循环

3.   flag_len  flag_con是python中已经默认的吗 表示什么意思呢?之前没有声明就可以直接用?


全部都初始化过了,前面的 flag_len 和 flag_con 都在这里进行赋值,这两个就是普通的变量名而已,不是Python 内置的:
if length <= 8:
    flag_len = 1
elif 8 < length < 16:
    flag_len = 2
else:
    flag_len = 3
flag_con = 0




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

使用道具 举报

发表于 2020-7-2 22:24:22 | 显示全部楼层    本楼为最佳答案   



1. 为什么symbol命名时要有r呢 r代表什么意思(源码?) 什么情况会用到呢


原始字符串 r ,可以将字符串内的转义字符失去原有的效果,比如 '\n' 表示换行符,起换行效果,但是当你加上个 r 后,\n 就不会起到换行的效果,而单纯的是个 \n 字符串

2.在判断长度的代码中 已经有length = len(passwd) 为什么while循环中还要有这行代码呢?可以去掉吗


因为 while 循环里面重新输入了密码,导致密码长度改变,如果你不重新赋值新的密码长度,就会导致当你一开始输入空格时候,进入 while 循环后永远出不了 while循环

3.   flag_len  flag_con是python中已经默认的吗 表示什么意思呢?之前没有声明就可以直接用?


全部都初始化过了,前面的 flag_len 和 flag_con 都在这里进行赋值,这两个就是普通的变量名而已,不是Python 内置的:
if length <= 8:
    flag_len = 1
elif 8 < length < 16:
    flag_len = 2
else:
    flag_len = 3
flag_con = 0




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

使用道具 举报

 楼主| 发表于 2020-7-3 15:05:26 | 显示全部楼层
Twilight6 发表于 2020-7-2 22:24
原始字符串 r ,可以将字符串内的转义字符失去原有的效果,比如 '\n' 表示换行符,起换行效果, ...

那么是在python中,flag_len和flag_con不需要提前声明,就可以直接使用的吗
因为之前在C中,没有提前声明flag_len是类型不可以用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-3 17:56:59 | 显示全部楼层
小明同学xxm 发表于 2020-7-3 15:05
那么是在python中,flag_len和flag_con不需要提前声明,就可以直接使用的吗
因为之前在C中,没有提前声 ...

不需要的吧,flag_len 和 flag_con 是变量名,在赋值的时候就已经匹配类型了吧,感觉跟一开始的 nums = '0123456789' 没什么区别,只是没有写在开始的位置罢了。
>>> flag_con = 1
>>> type(flag_con)
<class 'int'>
>>> nums = '0123456789'
>>> type(nums)
<class 'str'>
数据类型在赋值时就决定了的吧

---------分割线----------
没学过C,但我觉得大概是这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-4 05:34:12 | 显示全部楼层
python  习题是在哪里的,我要刷题, 刷大量的题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-4 08:41:28 | 显示全部楼层
小明你咋老重名 发表于 2020-7-3 17:56
不需要的吧,flag_len 和 flag_con 是变量名,在赋值的时候就已经匹配类型了吧,感觉跟一开始的 nums = ' ...

哦这样啊 那请问这个代码是怎么体现密码只能以字母开头的呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-4 08:42:30 | 显示全部楼层
fazerse 发表于 2020-7-4 05:34
python  习题是在哪里的,我要刷题, 刷大量的题

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

使用道具 举报

发表于 2020-7-4 10:58:51 | 显示全部楼层
小明同学xxm 发表于 2020-7-4 08:41
哦这样啊 那请问这个代码是怎么体现密码只能以字母开头的呢
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("中")
打印结果这里是对各种情况的密码等级进行判断,密码只能以字母开头的判断包含在 elif 中,即 passwd[0] in chars ,这里用到了字符串的索引,passwd[0] 就表示输入的密码(passwd)中第一个字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-4 15:28:08 | 显示全部楼层
小明你咋老重名 发表于 2020-7-4 10:58
打印结果这里是对各种情况的密码等级进行判断,密码只能以字母开头的判断包含在 elif 中,即 passwd[0] ...

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

使用道具 举报

发表于 2020-7-4 17:41:34 | 显示全部楼层

  课后习题  很有代表性, 但是数量不够额, 做完了就忘
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 14:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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