『无为则无心』Python基础 — 14、Python流程控制语句(while循环语句)
为了方便我们控制程序的运行流程,编程语言一般都会有基本的流程控制结构,包括:顺序结构、选择结构、循环结构。
本篇文章主要说明Pyhton循环结构的while
循环语句。
1、什么是循环结构
(1)概念
循环结构是指在实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。为解决此类常见的问题而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。
(2)循环语句的作用
思考:假如我有个女朋友,有一天我们闹矛盾生气了,女朋友说:道歉,说100遍“媳妇儿,我错了”。这个时候程序员会怎么做?
答:100遍
print('媳妇儿,我错了')
思考:复制粘贴100次吗?
答:重复执行100次一样的代码,程序中循环即可。
循环的作用:让代码更高效的重复执行。
(3)循环语句的分类
在Python中,循环分为while
和for
两种,最终实现效果相同。
2、while
循环
(1)while
循环的语法
while 条件表达式:
# 循环体(代码块)
条件成立重复执行的代码1
条件成立重复执行的代码2
......
执行流程:
while
语句在执行时,会先对while
后的条件表达式进行求值判断,
如果判断结果为True,则执行循环体(代码块),
循环体执行完毕,继续对条件表达式进行求值判断,以此类推,
直到判断结果为False,则循环终止。
快速体验:
需求:复现重复执行100次print('媳妇儿,我错了')
(输出更简洁一些,我们这里设置5次)。
分析:初始值是0次,终点是5次,重复做的事情输出“媳妇儿, 我错了”。
# 循环的计数器(表示循环的次数)
i = 0 # 计数器默认习惯从0开始
while i < 5:
print('媳妇儿,我错了')
# 计数器+1
i += 1
print('任务结束')
(2)while
循环的应用
1)应用一:计算1-100累加和
分析:1-100的累加和,即1 + 2 + 3 + 4 +….,即前两个数字的相加结果 + 下一个数字( 前一个数字 + 1)。
"""
1. 准备做计数器
2. 准备变量,保存将来运算的结果
3. 循环做加法运算
4. 打印结果
"""
i = 1 # 计数器
result = 0 # 累加结果
# 累加运算
while i <= 100:
# 加法运算 前两个数的结果 + 第三个数
# 每计算一次执行加法,则更新一次result变量的值
result += i
# 计数器+1
i += 1
# 打印最终结果:输出5050
print(result)
注意:为了验证程序的准确性,可以先改小数值,验证结果正确后,再改成1-100做累加。
2)应用二:计算1-100偶数累加和
分析:1-100的偶数和,即 2 + 4 + 6 + 8....,得到偶数的方法如下:
- 偶数即是和2取余结果为0的数字,可以加入条件语句判断是否为偶数,为偶数则累加
- 初始值为0 / 2 , 计数器每次累加2
方法一:条件判断和2取余数则累加
# 方法一:条件判断和2取余数为0则累加计算
"""
1. 准备计数器变量
2. 准备保存结果的变量result
3. 循环加法运算
如果是偶数才加法运算,和2取余数为0
4. 输出结果
"""
i = 1
result = 0
while i <= 100:
if i % 2 == 0:
result += i
i += 1
# 输出2550
print(result)
方法二:计数器控制偶数累加
# 方法二:计数器控制增量为2
i = 0
result = 0
while i <= 100:
result += i
i += 2
# 输出2550
print(result)
"""
两种实现方式都可以正确实现,
但是更推荐使用第一种方式,
因为第一种是程序去判断一个数是否是偶数,
而第二种方式,是根据我们的经验,
使用的简便方法。
所以推荐使用计算机计算的方式。
但是在实际开发中,在正确实现功能的前提下,
我们可能更注重代码的简洁性和可读性,
还有就是代码的空间复杂度和时间复杂度。
"""
3)应用三:获得1000内的水仙花数
分析:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
# 获取1000以内的三位数
# 因为水仙花数是一个三位数,所以从100开始
i = 100
while i < 1000:
# 获取三位数的百位数,十位数,个位数
# 假设,i的百位数是a,十位数b,个位数c
# 求i的百位数,对100整除
a = i // 100
# 求i的十位数,有很多算法,可以自己拓展。
# 方式一
# 先整除10.获得的结果在模以10,就得到10位上的数字了。
# b = i // 10 % 10
# 方式二
# (i - a * 100)得到十位和个位数,在模以10
b = (i - a * 100) // 10
# 求i的个位数字
c = i % 10
# print(i , a , b , c)
# 判断i是否是水仙花数
if a**3 + b**3 + c**3 == i :
print(f'水仙花数{i}')
i += 1
3、while
语句的死循环
(1)概念
在编程中,一个靠自身控制无法终止的程序称为“死循环”。在while
循环语句中,条件表达式恒为True的循环语句,称为就是while
死循环语句,它会一直运行,慎用!
# 死循环示例:
while True :
print('hello')
(2)总结
循环结构的三个要素(表达式)
# 1、初始化表达式,
# 通过初始化表达式初始化一个变量,
# 也就是计数器。
i = 0
# 2、条件表达式,
# 条件表达式用来设置循环执行的条件
while i < 10 :
print(i)
# 3、更新表达式,让计数器自增或自减,
# 条件变量一定要更新,保证循环能够正常结束。
i += 1
4、break
和continue
break
和continue
是循环中满足一定条件退出循环的两种不同方式。
举例:一共吃5个苹果,吃完第一个,吃第二个…,这里"吃苹果"的动作是不是重复执行?
情况一:如果吃的过程中,吃完第三个吃饱了,则不需要再吃第4个和第五个苹果,即是吃苹果的动作停止,这里就是break
控制循环流程,即用来立即退出循环语句(包括else中的语句也不执行)。
情况二:如果吃的过程中,吃到第三个吃出一个大虫子...,是不是这个苹果就不吃了,开始吃第四个苹果,这里就是continue
控制循环流程,即退出当前的循环,继而执行下一次循环代码。
(1)情况一:break
"""
执行结果:
吃了第1个苹果
吃了第2个苹果
吃了第3个苹果
吃饱了不吃了
"""
i = 1 # 应该0开始,写1是为了方便输出
while i <= 5:
if i == 4: # 吃饱的条件
print(f'吃饱了不吃了')
# 满足条件,退出整个while循环
break
print(f'吃了第{i}个苹果')
i += 1
(2)情况二:continue
"""
执行结果:
吃了第1个苹果
吃了第2个苹果
大虫子,第3个不吃了
吃了第4个苹果
吃了第5个苹果
"""
i = 1
while i <= 5:
if i == 3:
print(f'大虫子,第{i}个不吃了')
# 在执行continue之前一定要修改计数器,
# 否则会陷入死循环
i += 1
continue
print(f'吃了第{i}个苹果')
i += 1
注意:如果在嵌套循环中,也就是循环中还嵌套着循环的时候,break和continue都是只对离他最近的循环起作用。
5、while
循环嵌套
(1)应用场景
故事梗概:有天女朋友又生气了,惩罚:说3遍“媳妇儿, 我错了”,这个程序是不是循环即可?但如果女朋友说:还要刷今天晚饭的碗,这个程序怎么书写?
while 条件表达式:
print('媳妇儿, 我错了')
print('刷晚饭的碗')
但如果女朋友还是生气,把这套惩罚要连续3天都执行,有如何书写程序?
while 条件表达式:
while 条件表达式:
print('媳妇儿, 我错了')
print('刷晚饭的碗')
(2)语法
while 条件表达式1:
条件1成立执行的代码
......
while 条件表达式2:
条件2成立执行的代码
......
总结:所谓
while
循环嵌套,就是一个while
里面嵌套一个while
的写法,每个while
和之前的基础语法是相同的。
(3)快速体验:复现场景
"""
步骤1. 循环打印3次媳妇儿,我错了。
步骤2. 今天晚饭后刷碗
步骤3. 上面是一套惩罚,这一套惩罚要重复执行3天
一套惩罚要重复执行,
放到一个while循环里面。
"""
j = 0 # 天数计数器
while j < 3:
i = 0 # 道歉计数器
while i < 3:
print('媳妇儿,我错了')
i += 1
print('刷晚饭的碗')
print(f'一套惩罚结束---第{j + 1}天---------')
j += 1
"""
执行结果:
媳妇儿,我错了
媳妇儿,我错了
媳妇儿,我错了
刷晚饭的碗
一套惩罚结束---第1天---------
媳妇儿,我错了
媳妇儿,我错了
媳妇儿,我错了
刷晚饭的碗
一套惩罚结束---第2天---------
媳妇儿,我错了
媳妇儿,我错了
媳妇儿,我错了
刷晚饭的碗
一套惩罚结束---第3天---------
"""
(4)while
循环嵌套执行流程
当内部循环执行完成之后,再执行下一次外部循环的条件判断。
6、while
循环嵌套应用
(1)应用一:打印星号(正方形)
需求:
*****
*****
*****
*****
*****
分析:一行输出5个星号,重复打印5行。
代码如下:
"""
步骤1. 打印1个星星
步骤2. 打印一行5个星星: 循环5次步骤1
步骤3. 打印5行星星: 循环5次步骤2
"""
# 重复打印5行星星
j = 0
while j <= 4:
# 一行星星的打印
i = 0
while i <= 4:
# 一行内的星星不能换行,取消print默认结束符\n
print('*', end='')
i += 1
# 每行结束要换行,这里借助一个空的print()函数,
# 利用print()默认结束符换行.
print()
j += 1
总结一下:
- 外层循环控制图形的高度。
- 内层循环控制图形的宽度。
- 循环嵌套时,外层循环没执行一次,内存循环就要执行一圈。
(2)应用二:打印星号(三角形)
需求:
*
**
***
****
*****
分析:
- 一行输出星星的个数和行号是相等的,
也就是每行要重复打印行号数字个星号。 - 将打印行星号的命令重复执行5次实现打印5行。
代码如下:
# 重复打印5行星星
# j表示行号
j = 0
while j <= 4:
# 一行星星的打印
i = 0
# i表示每行里面星星的个数,这个数字要和行号相等
# 所以i要和j联动
while i <= j:
print('*', end='')
i += 1
print()
j += 1
(3)打印九九乘法表
从上边打印三角形的思路引入,来实现代码。
执行结果:
代码如下:
"""
步骤1. 打印一个乘法表达式:x * x = x*x
步骤2. 一行打印多个表达式,
一行表达式的个数和行号数相等,
循环行号次,
一个行内不换行。
步骤3. 打印多行表达式,步骤2循环9次。
**** 一行表达式的个数和行号数相等
"""
# 重复打印9行表达式
j = 1
while j <= 9:
# 打印一行里面的表达式 a * b = a*b
i = 1
while i <= j:
# 乘法表达式 x * x = x*x
print(f'{i}*{j}={j*i}', end='\t')
i += 1
print() # 换行
j += 1
(4)求100以内所有的质数
# 创建一个循环,求1-100以内所有的数
i = 2
while i <= 100:
# 创建一个变量,记录i的状态,默认认为i是质数
flag = True
# 判断i是否是质数
# 获取所有可能成为i的因数的数
j = 2
# while j < i:
# 如36,6之前的因数和6之后的因数是对称的
# 所以不用循环整个i,循环根号就可以了
while j <= i ** 0.5:
# 判断i能否被j整除
if i % j == 0:
# i能被j整除,证明i不是质数,修改flag为False
flag = False
# 一旦进入判断,则证明i一定不是质数,
# 此时内层循环没有继续执行的必要,
# 使用break来退出内层的循环.
break
j += 1
# 验证结果并输出
if flag :
print(i)
i += 1
『无为则无心』Python基础 — 14、Python流程控制语句(while循环语句)的更多相关文章
- 『无为则无心』Python基础 — 4、Python代码常用调试工具
目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...
- 『无为则无心』Python基础 — 6、Python的注释
目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...
- 『无为则无心』Python基础 — 7、Python的变量
目录 1.变量的定义 2.Python变量说明 3.Python中定义变量 (1)定义语法 (2)标识符定义规则 (3)内置关键字 (4)标识符命名习惯 4.使用变量 1.变量的定义 程序中,数据都是 ...
- 『无为则无心』Python基础 — 10、Python字符串的格式化输出
目录 1.什么是格式化输出 2.Python格式化输出的五种方式 方式一:字符串之间用+号拼接 方式二:print()函数可同时输出多个字符串 方式三:占位符方式 方式四:f格式化方式(推荐) 方式五 ...
- 『无为则无心』Python基础 — 12、Python运算符详细介绍
目录 1.表达式介绍 2.运算符 (1)运算符的分类 (2)算数运算符 (3)赋值运算符 (4)复合赋值运算符 (5)比较运算符 3.逻辑运算符 拓展1:数字之间的逻辑运算 拓展2:Python中逻辑 ...
- 『无为则无心』Python基础 — 13、Python流程控制语句(条件语句)
目录 1.流程控制基本概念 2.选择结构(条件语句) (1)条件语句概念 (2)if语句语法 (3)if...else...语句 (4)多重判断 (5)if语句嵌套 3.应用:猜拳游戏 4.三元运算符 ...
- 『无为则无心』Python基础 — 15、Python流程控制语句(for循环语句)
目录 1.for循环语法 2.for循环中的break和continue 3.循环+else结构 (1)while...else (2)while...else退出循环的方式 (3)for...els ...
- 『无为则无心』Python序列 — 24、Python序列的推导式
目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...
- 『无为则无心』Python函数 — 29、Python变量和参数传递
目录 1.Python的变量 (1)Python变量不能独立存在 (2)变量是内存中数据的引用 (3)注意点 2.了解变量的引用 3.Python的参数传递(重点) (1)示例 (2)结论 (3)总结 ...
随机推荐
- LVHA爱恨原则
关于link 和 visited是否访问过,讲得应该是对浏览器而言该网页之前是否访问过, 而不是只对单次生成页面而言
- ubuntu下载安装软件并创建图标
本列以安装webstorm软件 1.官网下载软件的压缩包 2.解压 umlinux@umlinux-PC:~/idea$ tar -zxvf ideaIU-2020.3.1.tar.gz 3.找到we ...
- Mybatis-plus在原有的select查询语句中动态追加查询条件
一.适用场景 1.使用了xml形式的mapper.2.不想在select查询中大量使用<if>标签来判断条件是否存在而加入条件. 二.步骤 1.自定义wrapper继承QueryWrapp ...
- .NET程序崩溃了怎么抓 Dump ? 我总结了三种方案
一:背景 1. 讲故事 最近几天接到了几个crash的求助,可能这几个朋友没玩过怎么去生成dump,只能手把手教,感觉也不是一个办法,所以有必要总结一下,后续再有朋友咨询的话,我就可以把这篇文章丢过去 ...
- sosreport -a --report
sosreport -a --report 时间:2019-09-28 本文章向大家介绍sosreport -a --report,主要包括sosreport -a --report使用实例.应用技巧 ...
- date命令月日时分年
# date +%Y/%m/%d2019/09/29[root@a-3e5 lpts-20190910-keyan-v0.2]# date +%H:%M20:00
- 如何用WINPE备份电脑系统;电脑备份 听语音
如何用WINPE备份电脑系统:电脑备份 听语音 原创 | 浏览:1046 | 更新:2017-09-30 15:09 1 2 3 4 5 6 7 分步阅读 备份系统已经成为一种常态,我们在安装完成系统 ...
- iozone的使用与介绍-20191105
https://www.jianshu.com/p/faf82e400aa6 iozone的使用与介绍 0.0722017.05.10 07:40:41字数 550阅读 1817 iozone的使用与 ...
- Windows10查看电脑的USB接口是2.0还是3.0
Windows10查看电脑的USB接口是2.0还是3.0原创小晓酱手记 最后发布于2019-08-22 16:09:48 阅读数 3662 收藏展开 同事要拷贝资料给我,问我电脑的USB接口是2.0还 ...
- C++的构造函数为何不能为虚函数
1. 存储空间角度:虚函数对应一个vtable,vtable存储于对象的内存空间 若构造函数是虚的,则需要通过 vtable来调用,若对象还未实例化,即内存空间还没有,无法找到vtable 2. 使用 ...