Python程序控制结构(三)

1 跳转语句

Python语言支持多种跳转语句,如break跳转语句、continue跳转语句和pass语句。

1.1 break 跳转语句

break跳转语句可以用在for循环、while循环中,用于强行终止循环。只要程序执行到break跳转语句,就会终止循环体的执行,即使没有达到Flase条件或者序列还没被递归完,也会停止执行循环语句。如果使用嵌套循环,程序执行到break跳转语句将跳出当前的循环体。在某些场景中,如果需要在某种条件出现时强行终止循环,而不是等到循环条件为False时才退出循环,就可以使用break跳转语句来完成这个功能。

在while循环语句中使用break跳转语句的形式如下:

while 表达式1:
	语句块
	if 表达式2break

在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 表达式2continue

在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程序设计基础教程(微课版) 林子雨 赵江声 陶继平编著

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值