1 跳转语句
Python语言支持多种跳转语句,如break跳转语句、continue跳转语句和pass语句。
1.1 break 跳转语句
break跳转语句可以用在for循环、while循环中,用于强行终止循环。只要程序执行到break跳转语句,就会终止循环体的执行,即使没有达到Flase条件或者序列还没被递归完,也会停止执行循环语句。如果使用嵌套循环,程序执行到break跳转语句将跳出当前的循环体。在某些场景中,如果需要在某种条件出现时强行终止循环,而不是等到循环条件为False时才退出循环,就可以使用break跳转语句来完成这个功能。
在while循环语句中使用break跳转语句的形式如下:
while 表达式1:
语句块
if 表达式2:
break
在for循环语句中使用break跳转语句的形式如下:
for 迭代变量 in 对象:
if 表达式:
break
【例1-1】使用break跳转语句跳出for循环。
for i in range(0,10):
print("i的值是:",i)
if i == 2:
# 执行该语句时将结束循环
break
上面代码的执行结果如下:
i的值是: 0
i的值是: 1
i的值是: 2
从执行结果可以看出,当执行到 i 的值为2时,程序就退出了循环。
【例1-2】使用break跳转语句跳出while循环。
x = 1
while True:
x += 1
print(x)
if x >= 4:
break
上面代码的执行结果如下:
2
3
4
从执行结果可以看出,当执行到 x 的值为4时,程序就退出了循环。
【例1-3】使用break跳转语句跳出嵌套循环的内层循环。
for i in range(0,3):
print("此时i的值为:",i)
for j in range(5):
print("此时j的值为:",j)
if j == 1:
break
print("跳出内层循环")
上面代码的执行结果如下:
此时i的值为: 0
此时j的值为: 0
此时j的值为: 1
跳出内层循环
此时i的值为: 1
此时j的值为: 0
此时j的值为: 1
跳出内层循环
此时i的值为: 2
此时j的值为: 0
此时j的值为: 1
跳出内层循环
从执行结果可以看出,在内层循环中,每当执行到 j 的值为1时,程序就会跳出内层循环,转而执行外层循环的代码。
如果想达到break跳转语句不仅跳出当前所在循环,而且跳出外层循环的目的,可以先定义布尔类型的变量来标志是否需要跳出外层循环,然后在内层循环、外层循环中分别使用两条break跳转语句来实现。
【例1-4】使用break跳转语句跳出嵌套循环的内层循环和外层循环。
exit_flag = False
# 外层循环
for i in range(0,5):
# 内层循环
for j in range(0,3):
print("i的值为:%d, j的值为:%d" % (i,j))
if j == 1:
exit_flag = True
# 跳出内层循环
break
# 如果exit_flag为True,跳出外层循环
if exit_flag:
break
上面代码的执行结果如下:
i的值为:0, j的值为:0
i的值为:0, j的值为:1
从执行结果可以看出,当执行到 i 的值为0并且 j 的值为1时,程序不仅跳出了内层循环,也跳出了外层循环,程序执行结束。
1.2 continue 跳转语句
continue跳转语句和break跳转语句不同,break跳转语句跳出整个循环,而continue跳转语句跳出本次循环,也就是说,程序遇到continue跳转语句后,会跳过当前循环的剩余语句,然后继续进行下一轮循环。
在while循环语句中使用continue跳转语句的形式如下:
while 表达式1:
语句块
if 表达式2:
continue
在for循环语句中使用continue跳转语句的形式如下:
for 迭代变量 in 对象:
if 表达式:
continue
【例1-5】使用continue跳转语句跳出for循环的某次循环。
for i in range(5):
if i == 3:
continue
print("i的值是:",i)
上面代码的执行结果如下:
i的值是: 0
i的值是: 1
i的值是: 2
i的值是: 4
从执行结果可以看出,当执行到 i 等于3时,程序跳出了该次循环,没有执行打印语句,继续执行下一次循环。
【例1-6】使用continue跳转语句跳出while循环的某次循环。
i = 0
while i < 5:
i += 1
if i == 3:
continue
print("i的值是:",i)
上面代码的执行结果如下:
i的值是: 1
i的值是: 2
i的值是: 4
i的值是: 5
从执行结果可以看出,当执行到 i 等于3时,程序跳出了该次循环,没有执行打印语句,继续执行下一次循环。
【例1-7】计算从0到100所有奇数的和。
sum = 0
x = 0
while True:
x = x + 1
if x > 100:
break
if x % 2 == 0:
continue
sum += x
print(sum
上面代码的执行结果如下:
2500
1.3 pass 语句
Python中还有一个pass语句,表示空语句,它不做任何事情,一般起到占位作用。
【例1-8】应用for循环输出1-10的偶数,在不是偶数时,应用pass语句占个位置,方便以后对不是偶数的数进行处理。
for i in range(1,10):
if i % 2 == 0:
print(i,end=' ')
else:
pass
上面代码的执行结果如下:
2 4 6 8
2 综合实例
【例1-9】利用蒙特卡罗方法计算圆周率。
蒙特卡罗方法是一种计算方法。原理是通过大量随机样本去了解一个系统,进而得到所要计算的值。它非常强大和灵活,又相当简单易懂,很容易实现。对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法。
这里介绍一下使用蒙特卡罗方法计算圆周率 π \pi π 的基本原理。如下图(左)所示,假设有一个正方形的边长是2r,内部有一个与之相切的圆,圆的半径为r,则它们的面积之比是 π \pi π/4,即用圆的面积( π \pi πr2)除以正方形的面积(4r2)。
现在,如下图(右)所示,在这个正方形内部,随机产生10000个点(即10000个坐标对(x, y)),计算它们与中心点的距离,从而判断它们是否落在圆的内部。如果这些点均匀分布,那么圆内的点应该占到所有点的
π
\pi
π/4,因此,将这个比值乘以4,就是
π
\pi
π的值。
程序代码如下:
from random import random
n = 10000
N = 0
for i in range(1,n):
x, y = random(),random() # random()函数用于生成一个0到1之间的随机数
dis = pow(x**2 + y**2, 0.5) # pow(a,b)函数返回a的b次幂
if dis <= 1:
N = N+1
pi = 4*N/n
print("圆周率为{}".format(pi))
上面代码的执行结果如下:
圆周率为3.1344
在上面的代码中,随机产生的点的个数n的值越大,计算得到的圆周率的值越精确。
【例1-10】实现一个斐波那契数列。
斐波那契数列,又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,
⋯
\cdots
⋯在数学上,斐波那契数列以如下递归的方法定义:
F(0)=0 (n=0)
F(1)=1 (n=1)
F(n)=F(n-1)+F(n-2) (n
≥
\geq
≥ 2,n
∈
\in
∈ N)
实现一个斐波那契数列的程序代码如下:
i, j = 0, 1
while i < 10000:
print(i)
i, j = j, i+j
上面代码的执行结果如下:
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
【例1-11】求出100-200的所有素数(素数只能被1和该数本身整除)。
import math
i = 0
for n in range(100,201):
prime = 1
k = int(math.sqrt(n)) # sqrt(n)方法返回数字n的平方根
for i in range(2,k+1):
if n % i == 0:
prime = 0
if prime == 1:
print("%d是素数" % n)
上面代码的执行结果如下:
101是素数
103是素数
107是素数
109是素数
113是素数
127是素数
131是素数
137是素数
139是素数
149是素数
151是素数
157是素数
163是素数
167是素数
173是素数
179是素数
181是素数
191是素数
193是素数
197是素数
199是素数
【例1-12】打印出如下效果的实心三角形:
代码如下:
num = int(input("请输入打印行数:"))
for i in range(num):
tab = False # 控制是否换行
for j in range(i+1):
print('*',end='') # 打印星号,不换行
if j == i:
tab=True #控制是否换行
if tab:
print('\n',end='') # 换行
【例1-13】打印出如下效果的空心三角形:
代码如下:
num = int(input("请输入打印行数:"))
for i in range(num):
tab = False # 控制是否换行
for j in range(i+1):
# 判断是否最后一行
if i != num-1:
# 循环完成,修改换行标识符
if j == i:
tab = True
# 判断打印空格还是星号
if(i == j or j == 0):
print('*',end='') # 打印星号,不换行
else:
print(' ',end='') # 打印空格,不换行
# 最后一行,全部打印星号
else:
print('*',end='') # 打印星号,不换行
if tab:
print('\n',end='') # 换行
【例1-14】将一张面值为100元的人民币等值换成10元、5元和1元的零钞,有哪些组合?
for i in range(100//1+1):
for j in range((100-i*1)//5+1):
for k in range((100-i*1-j*5)//10+1):
if i*1+j*5+k*10 == 100:
print("1元%d张,5元%d张,10元%d张" % (i,j,k))
【例1-15】求100以内能被3和7整除的数。
for i in range(1,101):
if i%3==0 and i%7==0:
print(i)
上面代码的执行结果如下:
21
42
63
84
参考书籍:
Python程序设计基础教程(微课版) 林子雨 赵江声 陶继平编著