bigV 发表于 2020-8-20 15:36:05

为啥要用 while 1,就实现“如果结果是低或中则打印如...

课后练习题
请写一个密码安全性检查的代码代码:check.py

# 密码安全性检查代码
#
# 低级密码要求:
#   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


为什么while 1 就是为了实现“如果结果是低或中则打印如何提升密码安全级别的提示,而高则直接退出”呢,不用循环语句,不是也一样吗??

_2_ 发表于 2020-8-20 15:38:04

while 1:
等价于
while True:

zltzlt 发表于 2020-8-20 15:38:24

因为如果用户输入的密码等级为高就直接退出了循环,不会执行后面的代码了

bigV 发表于 2020-8-20 16:07:33

_2_ 发表于 2020-8-20 15:38
等价于

这个我懂,但是还是没明白,while在这里的意义是什么,因为1就是true,就意味着,无论前面的运算是怎样的,一定会执行这个while语句啊

bigV 发表于 2020-8-20 16:09:08

zltzlt 发表于 2020-8-20 15:38
因为如果用户输入的密码等级为高就直接退出了循环,不会执行后面的代码了

while 1 是一个永远为真的执行条件啊,所以和前面的等级没关系,都要执行下面的语句。所以,还是没懂

zltzlt 发表于 2020-8-20 16:13:16

bigV 发表于 2020-8-20 16:09
while 1 是一个永远为真的执行条件啊,所以和前面的等级没关系,都要执行下面的语句。所以,还是没懂

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    # 这里有个 break

bigV 发表于 2020-8-20 16:20:51

zltzlt 发表于 2020-8-20 16:13


去掉着while 1 可以不

zltzlt 发表于 2020-8-20 16:25:22

bigV 发表于 2020-8-20 16:20
去掉着while 1 可以不

不可以

bigV 发表于 2020-8-20 16:31:12

zltzlt 发表于 2020-8-20 16:25
不可以

我哭,还是没懂

zltzlt 发表于 2020-8-20 16:36:46

bigV 发表于 2020-8-20 16:31
我哭,还是没懂

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    # 这里有个 break

如果密码等级为高在这里就已经退出这个循环体了,就不会执行后面的 print()

yhhpf 发表于 2020-8-20 17:13:12

bigV 发表于 2020-8-20 16:31
我哭,还是没懂

while 1:
      输入密码
      判断密码是否为高级
      如果不是:继续
      如果是:通过break跳出循环;

sunrise085 发表于 2020-8-20 17:27:34

本帖最后由 sunrise085 于 2020-8-20 17:29 编辑

while 1 这一段语句
第9含有个break,若评价等级为 高,则会直接break,那样就不会执行第12行以后的语句,否则,会继续执行12航以后的语句
看下面的注释
# 打印结果
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#这里有个break,若评价等级为 高,则会直接break
    else:
      print("中")
    #在while 1 中,若等级评价不是 高 ,才会执行下面的语句,若评价等级为 高,则会直接break,而不执行下面的语句。
    print("请按以下方式提升您的密码安全级别:\n\
    \t1. 密码必须由数字、字母及特殊字符三种组合\n\
    \t2. 密码只能由字母开头\n\
    \t3. 密码长度不能低于16位")
    break

_2_ 发表于 2020-8-20 17:55:46

bigV 发表于 2020-8-20 16:07
这个我懂,但是还是没明白,while在这里的意义是什么,因为1就是true,就意味着,无论前面的运算是怎样的 ...

因为每次 for 判断的时候里面都有一个 break,就是当满足 if 的条件之后,就会跳出循环体
页: [1]
查看完整版本: 为啥要用 while 1,就实现“如果结果是低或中则打印如...