鱼C论坛

 找回密码
 立即注册
查看: 1814|回复: 15

[已解决]如何解析一下这道题

[复制链接]
发表于 2018-3-4 04:03:00 | 显示全部楼层 |阅读模式

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

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

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
最佳答案
2018-3-4 08:32:36
无情老兔兔 发表于 2018-3-4 08:10
flag_len,这个是什么意思呢

给你写了点注释
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 #当密码长度小于等于8位的时候,判断为第一个长度等级,使flag_len=1
elif 8 < length < 16:
    flag_len = 2#当密码长度大于8位小于16位的时候,判断为第二个长度等级,使flag_len=2
else:   #当密码长度大于16位的时候,判断为第三个长度等级,使flag_len=3
    flag_len = 3

flag_con = 0 

# 判断是否包含特殊字符
for each in passwd:
    if each in symbols:
        flag_con += 1#当密码包含特殊字符时复杂等级加1
        break
    
# 判断是否包含字母
for each in passwd:
    if each in chars:
        flag_con += 1#当密码包含字母时复杂等级加1
        break

# 判断是否包含数字
for each in passwd:
    if each in nums:
        flag_con += 1#当密码包含数字时复杂等级加1
        break    

# 打印结果
while 1 :
    print("您的密码安全级别评定为:", end='')
    if flag_len == 1 or flag_con == 1 : #如果密码的长度等级或者复杂等级只有1的时候判定为低安全级别
        print("低")
    elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):#如果密码长度等级和复杂等级都达到3且以字母开头,则判定密码为高安全级别
        print("高")
        print("请继续保持")
        break
    else:
        print("中")#其他情况判定密码等级为中级

    print("请按以下方式提升您的密码安全级别:\n\
    \t1. 密码必须由数字、字母及特殊字符三种组合\n\
    \t2. 密码只能由字母开头\n\
    \t3. 密码长度不能低于16位")
    break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-4 04:24:43 | 显示全部楼层
temp = input('请输入需要检查的密码组合')
number = len(temp)
liebiao =['~','!','@','#','$','%','^','&','*','(',')','_',\
          '=','-','/',',','.','?','<','>',';',':','[',']',\
          '{','}','|',]

if number <= 8 and temp.isalnum():
    print('您的密码安全级别评定为:低')
    print('请按以下方式提升您的密码安全级别:')
    print('  1.密码必须有数字、字母及特殊字符三种组合')
    print('  2.密码只能由字母开头')
    print('  密码长度不能低于16位')
我是想用列表查询有没有,这样到底能做出来么,还有’\'这个符号使用完以后后面的就都是字符串形式了这是怎么回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 08:08:38 | 显示全部楼层
无情老兔兔 发表于 2018-3-4 04:24
temp = input('请输入需要检查的密码组合')
number = len(temp)
liebiao =['~','!','@','#','$','%','^', ...

\是转移符 你想要字符串的\的话应该是 "\\"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-4 08:10:45 | 显示全部楼层
2012277033 发表于 2018-3-4 08:08
\是转移符 你想要字符串的\的话应该是 "\\"

flag_len,这个是什么意思呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 08:23:29 | 显示全部楼层
无情老兔兔 发表于 2018-3-4 08:10
flag_len,这个是什么意思呢

用来判断密码长度的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 08:32:36 | 显示全部楼层    本楼为最佳答案   
无情老兔兔 发表于 2018-3-4 08:10
flag_len,这个是什么意思呢

给你写了点注释
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 #当密码长度小于等于8位的时候,判断为第一个长度等级,使flag_len=1
elif 8 < length < 16:
    flag_len = 2#当密码长度大于8位小于16位的时候,判断为第二个长度等级,使flag_len=2
else:   #当密码长度大于16位的时候,判断为第三个长度等级,使flag_len=3
    flag_len = 3

flag_con = 0 

# 判断是否包含特殊字符
for each in passwd:
    if each in symbols:
        flag_con += 1#当密码包含特殊字符时复杂等级加1
        break
    
# 判断是否包含字母
for each in passwd:
    if each in chars:
        flag_con += 1#当密码包含字母时复杂等级加1
        break

# 判断是否包含数字
for each in passwd:
    if each in nums:
        flag_con += 1#当密码包含数字时复杂等级加1
        break    

# 打印结果
while 1 :
    print("您的密码安全级别评定为:", end='')
    if flag_len == 1 or flag_con == 1 : #如果密码的长度等级或者复杂等级只有1的时候判定为低安全级别
        print("低")
    elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):#如果密码长度等级和复杂等级都达到3且以字母开头,则判定密码为高安全级别
        print("高")
        print("请继续保持")
        break
    else:
        print("中")#其他情况判定密码等级为中级

    print("请按以下方式提升您的密码安全级别:\n\
    \t1. 密码必须由数字、字母及特殊字符三种组合\n\
    \t2. 密码只能由字母开头\n\
    \t3. 密码长度不能低于16位")
    break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-4 08:54:27 | 显示全部楼层

chars 这个是所谓的 字母的意思么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 09:41:15 | 显示全部楼层
无情老兔兔 发表于 2018-3-4 08:54
chars 这个是所谓的 字母的意思么

不是啊,chars不是上面定义的一段由所有大小写字母组成的字符串吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 14:10:35 | 显示全部楼层
chars flag_len 等等这些东西 是作者为了让编程人员看到以后能很快理解作者意图,如果你愿意 你也可以用别的字母数字等代替
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-5 01:59:23 From FishC Mobile | 显示全部楼层
2012277033 发表于 2018-3-4 08:08
\是转移符 你想要字符串的\的话应该是 "\\"

for   each in  passwd
   If  each  in   num
这两句能产生什么,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-5 14:22:43 | 显示全部楼层
无情老兔兔 发表于 2018-3-5 01:59
for   each in  passwd
   If  each  in   num
这两句能产生什么,

循环判断,对passwd的每个字符进行判断,判断是否在num里面也存在相同的字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-6 03:55:59 | 显示全部楼层
2012277033 发表于 2018-3-5 14:22
循环判断,对passwd的每个字符进行判断,判断是否在num里面也存在相同的字符。

如果有相同字符他会怎么样
那和for  i  in range(1,10):
         for b in range (1,10):
                      有什么区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-6 04:06:46 | 显示全部楼层
2012277033 发表于 2018-3-5 14:22
循环判断,对passwd的每个字符进行判断,判断是否在num里面也存在相同的字符。

明白了我把底下的也以为是for了原来是if
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-6 09:17:37 | 显示全部楼层
无情老兔兔 发表于 2018-3-6 03:55
如果有相同字符他会怎么样
那和for  i  in range(1,10):
         for b in range (1,10):

这样的话就是双循环了,比如说
a=[]
for i in range(1,3):
   for b in range(1,3):
      a.append(str(i)+str(b))
print(a)
打印出的结果就是:
['11', '12', '21', '22']
这个顺序应该能懂吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-7 05:14:45 From FishC Mobile | 显示全部楼层
2012277033 发表于 2018-3-4 09:41
不是啊,chars不是上面定义的一段由所有大小写字母组成的字符串吗

这道题的最后为什么要加while呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 07:59:40 | 显示全部楼层
while就是循环,就是在你判断完一次之后可以接着判断,如果去掉while,那么判断完一次之后程序就结束了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 23:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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