欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python编程基础08:循环结构

程序员文章站 2022-10-03 13:18:07
文章目录一、为什么要用循环(一)老老实实的笨方法(二)采用循环结构的巧方法1、采用计数循环(for循环)(2)采用条件循环(while循环)二、条件循环 - while循环三、计数循环 - for循环跑道是一圈一圈的,可以看作是循环的一、为什么要用循环现在有一个任务,要求你输出一百遍“好好学习,天天向上!”,想一想,你会怎么做?(一)老老实实的笨方法print("第1遍写:好好学习,天天向上!")print("第2遍写:好好学习,天天向上!")print("第3遍写:好好学习,天天向上!...

文章目录


Python编程基础08:循环结构

  • 跑道是一圈一圈的,可以看作是循环的

一、为什么要用循环

现在有一个任务,要求你输出一百遍“好好学习,天天向上!”,想一想,你会怎么做?

(一)老老实实的笨方法

print("第1遍写:好好学习,天天向上!")
print("第2遍写:好好学习,天天向上!")
print("第3遍写:好好学习,天天向上!")
print("第4遍写:好好学习,天天向上!")
……
print("第100遍写:好好学习,天天向上!")    

采用此方法,当然可以完成任务,但是显然很糟糕,如果要求你输出一万遍,那得有一万行打印语句,那样看起来岂不令人崩溃?

(二)采用循环结构的巧方法

1、采用for循环输出百遍口号

  • 编写程序 - 采用for循环输出百遍口号.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构
  • 你看,两行代码,就可以输出百行口号,是不是感觉挺爽?

2、采用while循环输出百遍口号

  • 编写程序 - 采用while循环输出百遍口号.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构
  • 你看,殊途同归,不一样的循环语句,一样的输出结果!

二、条件循环 - while循环

(一)语法格式

  • 一般格式
while 条件表达式:
	循环体
  • 具体格式
初始条件
while 循环条件:
	循环体
	[break|continue]
	更新条件

(二)执行情况

Python编程基础08:循环结构

  • 当条件表达式的返回值为真时,则执行循环体中的语句,执行完毕后,重新判断条件表达式的返回值,直到表达式返回的结果为假时,退出循环。
  • 现实生活中的例子来理解while循环的执行流程。在体育课上,体育老师要求同学们沿着环形操场跑圈,要求当听到老师吹的哨子声时就停下来。同学们每跑一圈,可能会请求一次老师吹哨子。如果老师吹哨子,则停下来,即循环结束,否则继续跑步,即执行循环。
  • 好友聚会,开怀畅饮,不醉不休。一杯接着一杯地喝下去,直到喝趴下,喝酒循环才结束。

(三)案例演示

任务1、永不消逝的电波 - 死循环

  • 编写程序 - 永不消逝的电波.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构
  • 循环永不结束,除非用户强制终止。

任务2、采用while循环计算1 + 2 + 3 + …… + 100的值

  • 这是一个非常经典的数学计算问题:公差为1的等差数列求和。
  • 编写程序 - 采用while计算1 + 2 + 3 + …… + 100的值.py
    Python编程基础08:循环结构
  • 只要i <= 100成立,循环都会继续,直到i = 101,不满足条件了,循环才终止
  • 运行程序,查看结果
    Python编程基础08:循环结构
  • 修改一下代码,输出循环结束后循环变量i的值
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构

课堂练习:采用while循环计算1 + 3 + 5 + …… + 99的值

  • 提示:有三种方法可以解决此问题。
    (1)修改循环的更新条件:i = i + 2
    (2)在循环结构里嵌套一个过滤器:if i % 2 == 1: sum = sum + i
    (3)修改循环条件:i <= 50,修改累加语句 sum = sum + 2 * i - 1
  • 运行程序,查看结果
    Python编程基础08:循环结构

任务3、采用while循环打印水仙花数

水仙花数:是指等于其各位数字立方和的三位数。

153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33
370 = 3 3 + 7 3 + 0 3 370=3^3+7^3+0^3 370=33+73+03
371 = 3 3 + 7 3 + 1 3 371=3^3+7^3+1^3 371=33+73+13
407 = 4 3 + 0 3 + 7 3 407=4^3+0^3+7^3 407=43+03+73

分析问题,首先水仙花数是三位数,那么我们可以确定范围:100~999,这个我们可以通过循环结构来搞定:

n = 100
while n <= 999:
    n = n + 1

然后对于这个范围的每个数n,我们要去判断它是否等于其各位数字的立方和,这里的难点或关键在于如何分解一个三位数,得到它的每位数字。

假设我们已经把三位数n分解成百位数p3,十位数p2,个位数p1,
这样我们的筛选条件就可以写出来:n == p3 * p3 * p3 + p2 * p2 * p2 + p1 * p1 * p1。

如何拆分一个三位数n呢?

首先求n的个位数:n % 10
然后要将三位数变成两位数:n = n // 10
对于新的两位数n,又求它的个位数:n % 10
然后要将两位数变成一位数:n = n // 10

也就是说我们可以交替使用求余和整除运算将一个三位数拆分,得到它的个位数、十位数和百位数。当然这个分解方法可以推广到任何多位数的拆分。

  • 编写程序 - 采用while循环打印水仙花数.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构

任务4、采用while循环破解令狐大侠难题

  • 编写程序 - 采用while循环破解令狐大侠难题.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构

三、计数循环 - for循环

(一)语法格式

for 迭代变量 in 对象:
	循环体
  • for循环是一个依次重复执行的循环。通常适用于枚举或遍历序列,以及迭代对象中的元素。

(二)执行情况

Python编程基础08:循环结构

  • 迭代变量用于保存读取出的值;对象为要遍历或迭代的对象,该对象可以是任何有序的序列对象,如字符串、列表和元组等;循环体为一组被重复执行的语句。

(三)案例演示

任务1、采用for循环计算1 + 2 + 3 + …… + 100的值

  • 编写程序 - 采用for循环计算1 + 2 + 3 + …… + 100的值.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构

任务2、采用for循环打印水仙花数

  • 编写程序 - 采用for循环打印水仙花数.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构

任务3、采用for循环破解令狐大侠难题

  • 编写程序 - 采用for循环破解令狐大侠难题.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构
  • 思考题:这个程序无论如何都要循环99次,有必要吗?其实,当找到满足条件的cups值,就应该终止循环,不必再浪费资源继续循环了。此时,就会用到循环的跳转语句。

四、跳转语句

(一)跳转概述

当循环条件一直满足时,程序将会一直执行下去。如果希望在中间离开循环,也就是for循环结束重复之前,或者while循环找到结束条件之前。

  • 使用continue语句直奔下次循环
  • 使用break语句完全中止整个循环

(二)break语句

1、在while循环中使用break语句

  • 语法格式
while 条件表达式1:
	执行代码
	if 条件表达式2:
		break
  • 执行情况
    Python编程基础08:循环结构

2、在for循环中使用break语句

  • 语法格式
for 迭代变量 in 对象:
	if 条件表达式:
		break
  • 执行情况
    Python编程基础08:循环结构

3、案例演示

任务1、采用for循环破解令狐大侠难题 - 完善版

  • 编写程序 - 采用for循环破解令狐大侠难题 - 完善版.py
    Python编程基础08:循环结构
  • 运行程序,查看程序
    Python编程基础08:循环结构
  • 修改程序,计算循环次数
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构
  • 修改【采用for循环破解令狐大侠难题.py】
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构

任务2、判断一个整数是否是素数

  • 概念:什么叫素数(Prime Number)?一个整数除了1和它本身之外没有其它因子,这个整数就叫素数,否则就叫合数,但是有一个特殊情况,1既不是素数,也不是合数。比如:2、3、5、7都是素数,它们除了1和本身都没有其它因子,但是6就是合数,除了1和6之外,还有2和3都是其因子(6 = 2 * 3)。

  • 方法:判断一个整数是不是素数的方法 - 比如我们考虑一个整数 n ( n ≥ 2 ) n(n\ge2) nn2,就要看从 2 2 2 n − 1 n-1 n1的每个数能否整除 n n n,如果能整除,那么 n n n就不是素数;如果从头到尾都不能整除,那么 n n n就是素数。

  • 编程思路:我们采用一个布尔型的标志变量is_prime_number来表示待判断的整数n是不是素数,如果is_prime_number = True表明是素数,如果is_prime_number = False表明不是素数。先假定待判断的整数n是素数,设置is_prime_number = True,一旦在循环里找到能整除n的真因子,说明n不是素数,立马设置is_prime_number = False,并跳出循环结果。循环之后就根据is_prime_number的真假来输出n是素数还是合数。(这个编程思路,有点类似于法院断案,先假定你是好人,只有找到犯罪证据,才能断定你是罪犯。)

  • 编写程序 - 判断一个整数是否是素数.py
    Python编程基础08:循环结构

  • 运行程序,查看结果
    Python编程基础08:循环结构

  • 其实该程序可以优化的,为了说明方便起见,我们考虑 n = 100 n = 100 n=100的情况:

2 * 50 = 100
4 * 25 = 100
5 * 20 = 100
10 * 10 = 100
20 * 5 = 100
25 * 4 = 100
50 * 2 = 100
  • 因子乘积是以100的平方根10的乘积(10 * 10)为中心对称的。于是循环范围就可以缩小,本来是从 2 2 2 99 99 99,现在可以缩小到从 2 2 2 100 \sqrt{100} 100

  • 根据刚才的分析,代码可以优化如下:
    Python编程基础08:循环结构

  • 循环次数明显减少,因此这是一个更好的算法。

  • 运行程序,查看结果
    Python编程基础08:循环结构

思考题:实现合数分解

  • 如果一个整数是合数,编程将其分解成素数乘积形式
  • 比如 45 = 3 × 3 × 5 , 24 = 2 × 2 × 2 × 3 … … 45=3×3×5,24=2\times2\times2\times3…… 45=3×3×524=2×2×2×3

(三)continue语句

1、在while循环中使用continue语句

  • 语法格式
while 条件表达式1:
	执行代码
	if 条件表达式2:
		continue
	执行代码
  • 执行情况
    Python编程基础08:循环结构
  • 如果条件表达式2为True,跳过continue之后的执行代码部分,直奔下一次循环
  • 如果条件表达式2为False,执行continue之后的执行代码部分,才进入下一次循环

2、在for循环中使用continue语句

  • 语法格式
for 迭代变量 in 对象:
    执行代码
	if 条件表达式:
		continue
	执行代码
  • 执行情况
    Python编程基础08:循环结构
  • 如果条件表达式为True,跳过continue之后的执行代码部分,直奔下一次循环
  • 如果条件表达式为False,执行continue之后的执行代码部分,才进入下一次循环

3、案例演示

任务1、计算1 + 3 + 5 + …… + 99的值

  • 之前我们已经使用for循环来完成过这个计算任务,步长是2
    Python编程基础08:循环结构
  • 现在我们换种方式来处理,步长依然是1,在循环里嵌套一个选择结构,通过使用continue语句过滤掉偶数,然后累加的就是全部奇数。
  • 修改程序 - 计算1 + 3 + 5 + …… + 99的值.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构

任务2、逢七拍腿员工拓展小游戏

  • 场景模拟:宜宾五粮液酒类销售有限公司对2020年度新入职员工进行拓展训练,其中开展的一项小游戏叫做“逢七拍腿游戏”。游戏规则是每个员工从1开始依次数数,当数到尾数是7的数或7的倍数时,则该员工不报出该数,而是拍一下腿。凡是出错的员工将会受到小惩罚——做10个俯卧撑。
  • 假设在一次游戏中,参加活动的员工循环报数,从1数到99,每个人都没有出错,即无人受到惩罚。现在编写程序,在本次游戏中,计算新员工一共要拍多少次腿。
  • 编写程序 - 逢七拍腿员工拓展小游戏.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构
  • 不使用continue,代码如下所示
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构

五、循环嵌套

六、pass语句

(一)占位作用

在Python中还有一个pass语句,表示空语句。它不做任何事情,—般起到占位作用。

(二)案例演示

  • 在应用for循环输出1〜10之间(不包括10)的偶数时,在不是偶数时,应用pass语句占个位置,方便以后对不是偶数的数进行处理。
  • 编写程序 - 占位语句pass.py
    Python编程基础08:循环结构
  • 运行程序,查看结果
    Python编程基础08:循环结构

七、课后作业

任务1、完成猜数游戏

  • 游戏规则:程序产生一个[1, 100]之间的随机整数,用户输入整数进行猜测,如果猜对了,就会循环你是否要继续玩游戏;如果猜错了,程序会提示你是猜高了还是猜低了,然后让你继续输入整数进行猜测。
    Python编程基础08:循环结构

任务2、计算阶乘之和

  • 计算 1! + 2! + 3! + … + 10! 的值
    Python编程基础08:循环结构

任务3、用米粒填充国际象棋盘

国际象棋盘中,第1 格放1 粒米,第2 格放2 粒米,第3格放4 粒米,第4 格放8 粒米,第5 格放16粒米,……问:64个格子总共可以放多少粒米?
Python编程基础08:循环结构
Python编程基础08:循环结构

任务4、求20个学生的平均成绩

本文地址:https://blog.csdn.net/howard2005/article/details/109645171

相关标签: Python编程基础