栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python打卡日:20220513】for循环中的break语句陷阱

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python打卡日:20220513】for循环中的break语句陷阱

今天,抽点空闲,复习一下几个和 for 关键字 联系起来用的关键字。

一、for ... else ...
import os
import sys
import time
string = "吁!危乎高哉!!蜀道难,难于上青天!!!"
string_length = len(string)
for i in range(string_length):
    if i == int(string_length/2):
        print("r" + string[:string_length-1-i] + "|", end="")
        print('位置一半处,打印标志!') 
    else:       # postion = 1 
        print("r" + string[:string_length-1-i] + "%", end="")
        time.sleep(0.10)
else:  # postion = 2
    print("半途而废!!!")

print('----------------------------------')
二、for ... break ... else .... 

我们可以看到,这里for 紧连着跟了两个 else 语句。当然,postion =1 处的else 是针对 if 语句的分支。这很容易理解。而 position = 2 处的else 语句,才是今天我们谈的主角。

这里,Python 规定,for ... else ...  是合法语句。且,只有for 循环变量 i 取尽了 所有 0~string_length 之间的取值,然后 else 语句才会执行。

我们看输出结果:

吁!危乎高哉!!蜀道难,难于上青天!!%
吁!危乎高哉!!蜀道难,难于上青天!%
吁!危乎高哉!!蜀道难,难于上青天%
吁!危乎高哉!!蜀道难,难于上青%
吁!危乎高哉!!蜀道难,难于上%
吁!危乎高哉!!蜀道难,难于%
吁!危乎高哉!!蜀道难,难%
吁!危乎高哉!!蜀道难,%
吁!危乎高哉!!蜀道难%
吁!危乎高哉!!蜀道%
吁!危乎高哉!!蜀|位置一半处,打印标志!

吁!危乎高哉!!%
吁!危乎高哉!%
吁!危乎高哉%
吁!危乎高%
吁!危乎%
吁!危%
吁!%
吁%
%半途而废!!!
----------------------------------

语句“半途而废”,在最后被打印出来。

【陷阱】疑问来了,什么叫 只有for 循环变量 i 取尽了 所有 0~string_length 之间的取值,然后 else 语句才会执行 ???

对上面的例子,我们进行变形如下:

import os
import sys
import time
string = "吁!危乎高哉!!蜀道难,难于上青天!!!"
string_length = len(string)
for i in range(string_length):
    if i == int(string_length/2):
        print("r" + string[:string_length-1-i] + "|", end="")
        print('位置一半处,打印标志!')
        break   # 我们此处加了 break 语句
    else:        
        print("r" + string[:string_length-1-i] + "%", end="")
        time.sleep(0.10)
else:
    print("半途而废!!!")

print('----------------------------------')

我们添加了 “break” 语句。知道,break 语句就是跳出本次 for 循环。指的注意点是,for 同一级的else 语句却没有被执行。而是直接打印最后一句的输出“------------------------------------”。

吁!危乎高哉!!蜀道难,难于上青天!!%
吁!危乎高哉!!蜀道难,难于上青天!%
吁!危乎高哉!!蜀道难,难于上青天%
吁!危乎高哉!!蜀道难,难于上青%
吁!危乎高哉!!蜀道难,难于上%
吁!危乎高哉!!蜀道难,难于%
吁!危乎高哉!!蜀道难,难%
吁!危乎高哉!!蜀道难,%
吁!危乎高哉!!蜀道难%
吁!危乎高哉!!蜀道%
吁!危乎高哉!!蜀|位置一半处,打印标志!
----------------------------------
三、for...continue...else

应用中,还有一种经常使用的结构为: for...continue...else...

例子:

import os
import sys
import time
string = "蜀道难,难于上青天!!!"
string_length = len(string)
print('当前的字符串长度为:{}'.format(string_length))
for i in range(string_length):
    if i == int(string_length/2):
        print("r" + string[:string_length-1-i] + "|", end="")
        print('<1> 打印标志!', end='')
        continue
        print('<2> 打印标志!', end='')
    else:        
        print("r" + string[:string_length-1-i] + "%", end="")
        time.sleep(0.10)
    print('<3> 打印标志!', end='')
else:
    print('n'+"半途而废!!!")

print('----------------------------------')

输出结果:

当前的字符串长度为:12

蜀道难,难于上青天!!%<3> 打印标志!
蜀道难,难于上青天!%<3> 打印标志!
蜀道难,难于上青天%<3> 打印标志!
蜀道难,难于上青%<3> 打印标志!
蜀道难,难于上%<3> 打印标志!
蜀道难,难于%<3> 打印标志!
蜀道难,难|<1> 打印标志!
蜀道难,%<3> 打印标志!
蜀道难%<3> 打印标志!
蜀道%<3> 打印标志!
蜀%<3> 打印标志!
%<3> 打印标志!
半途而废!!!
----------------------------------
[Finished in 1.4s]

可以知道,<1> 打印标志! 在被打印出来之后,并没有继打印 <3> 打印标志!

即:跳过本次循环剩余语句的执行,直接进行下次循环。

四、for...pass...else

pass 语句放在这里讲解,其实有点牵强。因为,pass 语句使用的场合很多。

import os
import sys
import time
string = "蜀道难,难于上青天!!!"
string_length = len(string)
print('当前的字符串长度为:{}'.format(string_length))
for i in range(string_length):
    if i != int(string_length/2):
        pass
    else:        
        print("r" + string[:string_length-1-i] + "%", end="")
        time.sleep(0.10)
        print('<3> 打印标志!', end='')
else:
    print('n'+"半途而废!!!")

print('----------------------------------')

输出结果:

当前的字符串长度为:12

蜀道难,难%<3> 打印标志!
半途而废!!!
----------------------------------
[Finished in 263ms]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/915974.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号