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

编程入门 行业动态 更新时间:2024-10-11 01:10:12

【Python打卡日:20220513】for循环中的break<a href=https://www.elefans.com/category/jswz/34/1770772.html style=语句陷阱"/>

【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 = 2print("半途而废!!!")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='')continueprint('<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):passelse:        print("\r" + string[:string_length-1-i] + "%", end="")time.sleep(0.10)print('<3> 打印标志!', end='')
else:print('\n'+"半途而废!!!")print('----------------------------------')

输出结果:

当前的字符串长度为:12蜀道难,难%<3> 打印标志!
半途而废!!!
----------------------------------
[Finished in 263ms]

更多推荐

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

本文发布于:2024-02-11 16:09:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1681932.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语句   陷阱   Python   break

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!