鱼C论坛

 找回密码
 立即注册
查看: 1034|回复: 3

萌新求告知!

[复制链接]
发表于 2018-6-18 17:34:00 | 显示全部楼层 |阅读模式

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

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

x
passwd = input('请输入您的密码:')
sybols = "!@#$%^&*()_+-=[];\',./{}:\">"
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
nums = '1234567890'
length = len(passwd)
while (passwd.isspace() or length == 0):
    print('密码中不能含有空格或者密码不能为空')
    length = len(passwd)

if length <= 8:
    flag_len = 1
        
if 16 > length > 8:
    flag_len = 2
        
if 16 < length:
    flag_len = 3
        
passwd_con = 0
for i in passwd:
    if i in sybols:
        passwd_con += 1
        break
for i in passwd:
    if i in chars:
        passwd_con += 1
        break
for i in passwd:
    if i in nums:
        passwd_con += 1
        break
while 1:
    print('您的密码安全等级为:', end = ' ')
    if length == 1 or passwd_con == 1:
        print('低')
    elif flag_len == 3 and passwd_con == 3 and passwd[0] in chars:
        print('高')
        break
    else:
        print('中')
        
    print('请按以下方式提高密码安全等级:\n\t1.密码必须由数字、字母及特殊字符\n\t2.密码只能由字母开头\n\t3.密码长度不能低于16位')
    break
这里是代码 在自己打代码的过程中将第二个while循环里的elif打成if,运行代码的结果,如果密码安全等级为低,会在下一行出现一个“中”字,但是如果密码等级为高就不会出现这种情况。。。求大神告知!!!另外还有在每个for语句后面都要加上break?还有第二个while循环的break为什么在else之前???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-19 10:23:33 | 显示全部楼层
第6行的括号也可以不写。
第28行,for i in passwd:,这里的冒号错了,你使用了中文冒号,应该是英文冒号。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-19 10:31:53 | 显示全部楼层
本帖最后由 allen-xy 于 2018-6-19 10:34 编辑

将第二个while循环里的elif打成if,运行代码的结果,如果密码安全等级为低,会在下一行出现一个“中”字。因为代码判断密码是低级别,下一步运行下一个if语句,判断为不是高级密码,就去执行else语句,打印出了“中”字。if后面没有层次关系,所以会挨个执行if语句。最后的else语句是与第二个if关联的。
每个for语句后面都要加上break?因为只要找到有匹配就可以了,没必要全部匹配,这样可以提高代码效率。而且代码后面的的还有+=1的操作,如果全部都匹配一遍,那么这个数字就会很大,与上面的代码级别判断会冲突。
第二个while循环的break为什么在else之前?因为密码已经判断为高了,就没必要再继续判断是不是中级。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-19 10:46:57 | 显示全部楼层
我也是新人,只针对问题:我的理解是
1,你把elif换成if的时候,上下就会形成单独的判断,也就是第一个if判断的结果不影响继续进行第二个if的判断
    所以进行第二个if的判断后会出现‘中’,因为从条件来看满足了第一个if了,所以肯定不满足第二个if,最终就是执行
   第二个if的else条件
2,如果不加break,你的passwd_con 在最后应该是超过3的,最后while 循环上只会满足是‘中’的判断
3,至于最后一个break为什么在else之前,我的理解是不是你原先设想的是必须要设置符合‘高’等级才能通过密码设置?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 09:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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