鱼C论坛

 找回密码
 立即注册
查看: 2724|回复: 6

[已解决]请大神解答while循环里的条件问题

[复制链接]
发表于 2017-9-10 23:23:44 | 显示全部楼层 |阅读模式

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

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

x
版本3.6.2 windows系统

检查密码的安全等级

num = '0123456789'
chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
special = "~!@#$%^&*()_=-/\,.?<>;:[]{}|"

while 1':
    password = input('请输入要检查的密码组合:')
    length = len(password)

    while password.isspace() or length==0:
        password = input('您输入的密码为空或空格,请重新输入:')
   
    if length<=8:
        a=1
    if 8<length<16:
        a=2
    if length>=16:
        a=3

    e=0
    for i in password:
        if i in num:
            e+=1
            break

    for i in password:
        if i in chars:
            e+=1
            break

    for i in password:
        if i in special:
            e+=1
            break
            
    while 1:
        if a==1 or e==1:
            level = '低'
        elif a==2 or e==2:
            level = '中'
        elif password[0].isalpha() and a==3 and e==3:
            level = '高'
        else:
            level = '介于中高之间'
        print('您的密码安全等级:%s'%level)

        if level== '高':
            print("请继续保持")
        else:
            print("""请按以下方式提升您的密码安全级别:
            1.必须由数字、字母及特殊字符三种组合(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}\|)
            2.密码只能由字母开头
            3.密码长度不能低于16位""")
        break
        

   第二个while循环条件里, password=='' 和  length==0,这个两个条件效果应该是一样的, 但是为什么用password=='',就可以正常运行; 而如果换成length==0的话, 连续回车两三次,循环两三次以后,就无法正常检测密码的安全等级了呢?

请教各位老师解答

最佳答案
2017-9-11 10:24:30
就用你的代码运行,没有出现你所说的问题。

不过你代码里:
  1. while password.isspace() or length==0:
  2.         password = input('您输入的密码为空或空格,请重新输入:')
复制代码

这个循环一旦进入不可能跳出,因为length在循环内不会改变,正常的逻辑应该增加一个语句变为:
  1. while password.isspace() or length==0:
  2.         password = input('您输入的密码为空或空格,请重新输入:')
  3.         length = len(password)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-9-10 23:43:20 | 显示全部楼层
Python isspace() 方法检测字符串是否只由空格组成。
len()是计算字符串(列表,字典等)长度
]9JXBTHB~B[A4C~11%FWQL6.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-11 10:04:08 | 显示全部楼层
本帖最后由 python小能手 于 2017-9-11 10:05 编辑
ButcherRabbit 发表于 2017-9-10 23:43
Python isspace() 方法检测字符串是否只由空格组成。
len()是计算字符串(列表,字典等)长度


你好,Rabbit,  谢谢解答,可能是我没有表达清楚......

我的是意思   在这段代码里,第二个while循环里使用password == ''和 length==0  区别

1 使用password==''的时候,代码运行没有问题
2 使用length==0的时候,运行代码后,直接回车(相当于输入为空),又会返回到循环'您输入的密码为空或空格,请重新输入:' , while循环两三次后, 任凭输入什么字符,一直都是while死循环了

所以我现在迷惑的是password =='' 和length==0,其实效果应该是一样的,为什么使用length==0的时候,运行就会出现bug呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-11 10:24:30 | 显示全部楼层    本楼为最佳答案   
就用你的代码运行,没有出现你所说的问题。

不过你代码里:
  1. while password.isspace() or length==0:
  2.         password = input('您输入的密码为空或空格,请重新输入:')
复制代码

这个循环一旦进入不可能跳出,因为length在循环内不会改变,正常的逻辑应该增加一个语句变为:
  1. while password.isspace() or length==0:
  2.         password = input('您输入的密码为空或空格,请重新输入:')
  3.         length = len(password)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-11 10:50:04 | 显示全部楼层
python小能手 发表于 2017-9-11 10:04
你好,Rabbit,  谢谢解答,可能是我没有表达清楚......

我的是意思   在这段代码里,第二个while循环里 ...

4楼解答了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-11 15:38:15 | 显示全部楼层
Greenland 发表于 2017-9-11 10:24
就用你的代码运行,没有出现你所说的问题。

不过你代码里:

一语点醒梦中人....谢谢你 Greenland
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-11 15:38:56 | 显示全部楼层

也非常感谢Rabbit,感谢感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-2 07:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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