小明同学xxm 发表于 2020-7-2 22:18:25

python习题014求助


https://xxx.ilovefishc.com/forum/201505/28/161625atjxbwwexay67w3c.png
如图 答案代码是

# 密码安全性检查代码
#
# 低级密码要求:
#   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 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_lenflag_con是python中已经默认的吗 表示什么意思呢?之前没有声明就可以直接用?

谢谢各位大佬 小弟感激不尽

Twilight6 发表于 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_lenflag_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



小明同学xxm 发表于 2020-7-3 15:05:26

Twilight6 发表于 2020-7-2 22:24
原始字符串 r ,可以将字符串内的转义字符失去原有的效果,比如 '\n' 表示换行符,起换行效果, ...

那么是在python中,flag_len和flag_con不需要提前声明,就可以直接使用的吗
因为之前在C中,没有提前声明flag_len是类型不可以用的

小明你咋老重名 发表于 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,但我觉得大概是这样的{:10_272:}

fazerse 发表于 2020-7-4 05:34:12

python习题是在哪里的,我要刷题, 刷大量的题

小明同学xxm 发表于 2020-7-4 08:41:28

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

哦这样啊 那请问这个代码是怎么体现密码只能以字母开头的呢

小明同学xxm 发表于 2020-7-4 08:42:30

fazerse 发表于 2020-7-4 05:34
python习题是在哪里的,我要刷题, 刷大量的题

课后习题

小明你咋老重名 发表于 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 in chars):
      print("高")
      print("请继续保持")
      break
    else:
      print("中")
打印结果这里是对各种情况的密码等级进行判断,密码只能以字母开头的判断包含在 elif 中,即 passwd in chars ,这里用到了字符串的索引,passwd 就表示输入的密码(passwd)中第一个字符

小明同学xxm 发表于 2020-7-4 15:28:08

小明你咋老重名 发表于 2020-7-4 10:58
打印结果这里是对各种情况的密码等级进行判断,密码只能以字母开头的判断包含在 elif 中,即 passwd ...

嗯嗯 谢谢

fazerse 发表于 2020-7-4 17:41:34

小明同学xxm 发表于 2020-7-4 08:42
课后习题

{:5_100:}课后习题很有代表性, 但是数量不够额, 做完了就忘
页: [1]
查看完整版本: python习题014求助