鱼C论坛

 找回密码
 立即注册
查看: 782|回复: 5

[已解决]关于break的问题

[复制链接]
发表于 2019-3-18 16:31:08 | 显示全部楼层 |阅读模式

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

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

x
# 密码安全性检查代码
#
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
#
# 中级密码要求:
#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#   2. 密码长度不能低于8位
#
# 高级密码要求:
#   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#   2. 密码只能由字母开头
#   3. 密码长度不能低于16位


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

passwd = input('请输入要验证的密码:')         
lenght = len(passwd)

while (passwd.isspace() or lenght == 0 ):
    passwd = input('输入为空格,或者输入为0,请重新输入:')
    lenght = len(passwd)

falg_len = 0

if lenght <= 8:
    falg_len = 1
elif 8 < lenght < 16:
    falg_len = 2
else:
    falg_len = 3

falg_con = 0

for each in passwd:
    if each in chara:
        falg_con += 1
        break
for each in passwd:
    if each in num:
        falg_con += 1
        break
for each in passwd:
    if each in connt:
        falg_con += 1
        break

while 1:
    print('你的密码安全评级为:',end=' ')
    if falg_con == 1 or falg_len == 1:
        print('低')
    elif falg_con == 3 and (passwd[0] in connt) and falg_len == 3:
        print('高')
        print('请继续保持')
        break
    else:
        print('中')


    print('请按以下方法提升你的密码安全级别:\n\
               \t1.密码必须由数字、字母及特殊字符三种组合\n\
               \t2.密码只能由字母开头\n\
               \t3.密码长度不能低于16位')
    break





在最后一段中,我把break位置 和判断高的可以 摆在了第一个if的条件,
while 1:
    print('你的密码安全评级为:',end=' ')
    if falg_con == 3 and (passwd[0] in connt) and falg_len == 3:
        print('高')
        print('请继续保持')
        break
    elif falg_con == 1 or falg_len == 1:
        print('低')
    else:
        print('中')

请问这样会影响到程序的正常走向吗,自己试了几次 好像没有试出来区别,
如果有区别的话 请大佬们说说,改了会发生什么样的逻辑区别。
如果没有区别的话,是为什么呢
最佳答案
2019-3-18 16:36:18
几乎没区别,有点区别的是先经过哪个判断,类似于树形结构
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-3-18 16:36:18 | 显示全部楼层    本楼为最佳答案   
几乎没区别,有点区别的是先经过哪个判断,类似于树形结构
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-18 16:37:25 | 显示全部楼层
没有区别
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-18 16:41:35 | 显示全部楼层
falg_con = 0

for each in passwd:
    if each in chara:
        falg_con += 1
        break
for each in passwd:
    if each in num:
        falg_con += 1
        break
for each in passwd:
    if each in connt:
        falg_con += 1
        break


还有这一段,如果改成:

for each in passwd:
    if each in chara:
        falg_con = 1
        break
for each in passwd:
    if each in num:
        falg_con = 2
        break
for each in passwd:
    if each in connt:
        falg_con = 3
        break

不给falg_con 赋值为0,直接通过for来得到falg_con的值
这样会不会引起正常逻辑的变动
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-18 16:44:59 | 显示全部楼层
本帖最后由 jackz007 于 2019-3-18 16:46 编辑

        你这个代码中,为了输出信息使用 while 1 循环,非常的莫名其妙,就再别说 break 了,请恕我直言,非常的没有必要和多余!
        原代码不论 passwd 是什么评价最终都可以跳出循环,你改的代码则只有当 passwd 被评价为高时才会跳出循环,其他情况会直接陷入死循环。   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-18 16:59:18 | 显示全部楼层
jackz007 发表于 2019-3-18 16:44
你这个代码中,为了输出信息使用 while 1 循环,非常的莫名其妙,就再别说 break 了,请恕我直言, ...

while 的最后 也有一个break
小甲鱼的参考答案 最后也是用的while 1循环
如果不用while 1 循环的话,请问还有什么方式可以循环这列行数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-4 02:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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