今天,抽点空闲,复习一下几个和 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 &#61;&#61; int(string_length/2):print("\r" &#43; string[:string_length-1-i] &#43; "|", end&#61;"")print(&#39;<1> 打印标志&#xff01;&#39;, end&#61;&#39;&#39;)continueprint(&#39;<2> 打印标志&#xff01;&#39;, end&#61;&#39;&#39;)else: print("\r" &#43; string[:string_length-1-i] &#43; "%", end&#61;"")time.sleep(0.10)print(&#39;<3> 打印标志&#xff01;&#39;, end&#61;&#39;&#39;)
else:print(&#39;\n&#39;&#43;"半途而废&#xff01;&#xff01;&#xff01;")print(&#39;----------------------------------&#39;)
输出结果&#xff1a;
当前的字符串长度为&#xff1a;12蜀道难&#xff0c;难于上青天&#xff01;&#xff01;%<3> 打印标志&#xff01;
蜀道难&#xff0c;难于上青天&#xff01;%<3> 打印标志&#xff01;
蜀道难&#xff0c;难于上青天%<3> 打印标志&#xff01;
蜀道难&#xff0c;难于上青%<3> 打印标志&#xff01;
蜀道难&#xff0c;难于上%<3> 打印标志&#xff01;
蜀道难&#xff0c;难于%<3> 打印标志&#xff01;
蜀道难&#xff0c;难|<1> 打印标志&#xff01;
蜀道难&#xff0c;%<3> 打印标志&#xff01;
蜀道难%<3> 打印标志&#xff01;
蜀道%<3> 打印标志&#xff01;
蜀%<3> 打印标志&#xff01;
%<3> 打印标志&#xff01;
半途而废&#xff01;&#xff01;&#xff01;
----------------------------------
[Finished in 1.4s]
可以知道&#xff0c;<1> 打印标志&#xff01; 在被打印出来之后&#xff0c;并没有继打印 <3> 打印标志&#xff01;
即&#xff1a;跳过本次循环剩余语句的执行&#xff0c;直接进行下次循环。
四、for...pass...else
pass 语句放在这里讲解&#xff0c;其实有点牵强。因为&#xff0c;pass 语句使用的场合很多。
import os
import sys
import time
string &#61; "蜀道难&#xff0c;难于上青天&#xff01;&#xff01;&#xff01;"
string_length &#61; len(string)
print(&#39;当前的字符串长度为&#xff1a;{}&#39;.format(string_length))
for i in range(string_length):if i !&#61; int(string_length/2):passelse: print("\r" &#43; string[:string_length-1-i] &#43; "%", end&#61;"")time.sleep(0.10)print(&#39;<3> 打印标志&#xff01;&#39;, end&#61;&#39;&#39;)
else:print(&#39;\n&#39;&#43;"半途而废&#xff01;&#xff01;&#xff01;")print(&#39;----------------------------------&#39;)
输出结果&#xff1a;
当前的字符串长度为&#xff1a;12蜀道难&#xff0c;难%<3> 打印标志&#xff01;
半途而废&#xff01;&#xff01;&#xff01;
----------------------------------
[Finished in 263ms]