Python基础之遍历循环、条件循环、嵌套循环

Python基础之程序控制结构(二)


文章目录

  • 循环结构
    • 一、遍历循环结构
      • 1、遍历for循环的语法格式
      • 2、range()函数用法
      • 3、遍历循环扩展模式
      • 4、遍历for循环的应用实例
    • 二、条件循环
      • 1、条件循环语法格式
      • 2、条件循环应用实例
    • 三、循环嵌套
      • 1、循环嵌套的语法格式
      • 2、循环嵌套的应用实例


循环结构

循环结构:程序根据条件判断结果向后反向执行的一种运行方式。根据循环体除法条件不同,循环结构包括条件循环和遍历循环结构。

一、遍历循环结构

1、遍历for循环的语法格式

for  <变量>  in  <序列>:
	<循环体>

Python基础之遍历循环、条件循环、嵌套循环_第1张图片
for循环语句是通过遍历某一序列来完成循环,循环结束的条件就是序列被遍历完成。<变量>每经过一次循环就会得到序列中的一个元素,并通过循环体处理它。<序列>通常是字符串、文件、列表、range()等。<循环体>是for循环语句缩进的内容。当序列中的元素全部遍历完成后,程序就会自动退出循环,继续执行后面的语句。
遍历是指根据数据之间的逻辑结构,遵循一定的顺序,依次对<序列>中的的所有元素做一次且只有一次访问。
遍历循环可以理解为从<序列>中逐一提取元素,放在循环体变量中,对于所提取的每个元素执行一个语句块。
温馨提示:
(1) for循环语句<序列>后面必须要用英文输入法输入冒号。
(2) 循环体要向右缩进4个空格,或按1次Tab(制表)键。
(3) 循环次数采用<序列>中的元素个数来体现。

'''对字符串的遍历'''
for x in "apple":          
    print(x)
-------------------------------
输出结果:
a
p
p
l
e

2、range()函数用法

range(起始点,终点,步长)
range(x)是控制x的取值范围,x表示终点,从0开始取值,但是取不到终点x值。
range(i,x),i表示起始点,x表示终点,从起始点i开始取值,但是取不到终点x值。
range(i,x,y),i表示起始点,x表示终点,y表示步长,即间隔y。
温馨提示:
(1) 起始点默认为0,步长默认为1,终点取不到!
(2) for循环语句中循环的次数取决于range(x)函数中x的取值,x能取到几个值,就能循环几次。

for <变量>  in range(x):
	<循环体>
for i in range(5):
    print(i)
---------------------------------
输出结果:
0
1
2
3
4
for i in range(1,5):
    print(i)
---------------------------------
输出结果:
1
2
3
4
for i in range(1,10,3):
    print(i)
---------------------------------
输出结果:
1
4
7

3、遍历循环扩展模式

for  <变量>  in  <序列>:
	<循环体>
else:
	<语句块>

当for循环正常执行后,程序会继续执行else语句中的内容,else语句只在循环正常执行并结束后才执行。

for s in "BIT":
	print("循环进行中:" + s)
else:
	s="循环正常结束"
print(s)
--------------------------------------
输出结果:
循环进行中:B
循环进行中:I
循环进行中:T
循环正常结束

4、遍历for循环的应用实例

1、淮安民间广为流传的故事——“韩信点兵”。
秦朝末年,楚汉相争,大将军韩信带1500名兵士与楚国交战,楚军不敌,战死四五百人,为快速统计剩余兵将人数,韩信命令士兵3人一排,结果多出2人;接着命令士兵站5人一排,结果多出3人;又命令士兵站7人一排,多出2人。根据这些数据,如何编写程序快速计算出剩余的士兵人数?
1. 问题分析
利用for循环筛选出剩余士兵要同时满足被3除余2、被5除余3、被7除余2这三个条件的数。
2.编程步骤
(1)确定剩余的士兵人数范围。
(2)判断剩余的士兵是否同时满足被3除余2、被5除余3、被7除余2这三个条件
(3)如果同时满足三个条件,那么输出“剩余的士兵人数”
3.编写代码

for i in range(1000,1101):
    if (i%3==2 and i%5==3 and i%7==2):
        print("剩余的士兵人数:",i)
------------------------------------------------
输出结果:
剩余的士兵人数: 1073

2、统计2000到2022年是闰年的个数。
1. 问题分析
判断闰年的条件:能被4整除且不能被100整除或者能够被400整除的年。
2.编程步骤
(1)确定年份的范围,利用for循环遍历年份。
(2)判断年份是否满足被4整除且不能被100整除或者能够被400整除这三个条件
(3)如果是闰年,统计个数
(4)遍历结束,输出闰年的年份和个数。
3.编写代码

sum=0
for year in range(2000,2023):
    if year%4==0 and year%100!=0 or year%400==0:
        print(year,"是闰年")
        sum +=1
print("2000年到2022年有",sum,"个闰年")
--------------------------------------------------------
输出结果:
2000 是闰年
2004 是闰年
2008 是闰年
2012 是闰年
2016 是闰年
2020 是闰年
2000年到2022年有 6 个闰年

二、条件循环

1、条件循环语法格式

很多应用无法在执行之初确定循环次数,这就需要提供根据条件进行循环

while  <条件>:
	<循环体>

其中 <条件>与if语句中的判断条件一样,结果为True和False。
当条件判断为True时,重复执行循环体的内容;当当条件判断为False时,终止循环
Python基础之遍历循环、条件循环、嵌套循环_第2张图片
条件循环也有扩展模式

while  <条件>:
	<循环体>
else:
	<语句块>

当while循环正常执行后,程序会继续执行else语句中的内容,else语句只在循环正常执行并结束后才执行。

s = "BIT"
idx = 0  # 计时器idx进行初始化
while idx < len(s):  # 循环条件
    print("循环进行中:" + s[idx]) #s[idx]表示字符串索引
    idx +=1 # 对计数器累加
else:
    s="循环正常结束"
print(s)
-------------------------------------------
输出结果:
循环进行中:B
循环进行中:I
循环进行中:T
循环正常结束

如果通过while实现一个计数循环,需要在循环之前对计数器idx进行初始化,并在每次循环中对计数器idx进行累加。
总结:
while计数循环语法格式

初始条件设置------如计数器初始化
while <条件>:
	<当条件满足时,执行循环体>
	处理条件(计数器+1)
i=1  #定义重复次数--计数器
while i < 5:  #使用while判断条件
    print("hello python") 
    i +=1  #计数器+1 不要遗忘,否则会进入死循环。
print("循环结束后i={}".format(i)) #循环结束后,之前定义的计数器条件的数值是依旧存在的
------------------------------------------------------------------------------
输出结果:
hello python
hello python
hello python
hello python
循环结束后i=5

死循环
由于程序员的原因,忘记在循环内部修改循环的判断条件,导致循环持续执行,程序无法终止!
Python 中的计数方法
常见的计数方法有两种,可以分别称为:
自然计数法(从 1 开始)—— 更符合人类的习惯
程序计数法(从 0 开始)—— 几乎所有的程序语言都选择从 0 开始计数
因此,大家在编写程序时,应该尽量养成习惯:除非需求的特殊要求,否则循环的计数都从0开始。

2、条件循环应用实例

'''计算 0 ~ 100 之间所有数字的累计求和结果'''
R=eval(input("请输入正整数:"))
i,sum = 0,0
while (i<=R):
    sum = sum+i
    i=i+1
print("1+2+3...+{}={}:".format(R,sum))
--------------------------------------------------
输出结果:
请输入正整数:100
1+2+3...+100=5050
'''计算 0 ~ 100 之间所有偶数的累计求和结果'''
R=eval(input("请输入正整数:"))
i,sum = 0,0
while (i<=R):
    if i%2==0:
        sum = sum+i
    i=i+1
print("0-100所有偶数之和:",sum)
--------------------------------------------------
输出结果:
请输入正整数:100
0-100所有偶数之和: 2550    

三、循环嵌套

1、循环嵌套的语法格式

Python基础之遍历循环、条件循环、嵌套循环_第3张图片

for <变量> in <序列>:
	for <变量> in <序列>:
		<循环体>

Python基础之遍历循环、条件循环、嵌套循环_第4张图片
例如打印九九乘法表
Python基础之遍历循环、条件循环、嵌套循环_第5张图片

for i in range(1,10):  #行
    for j in range(1,i+1):  #列
       	print(j,end="")  #显示列号
       	print("×",end="")  #显示乘号
       	print(i,end="")    #显示行号
       	print("=",end="")  #显示等于号
       	print(j*i,end="")   #显示列与行相乘的值
       	print(end="\t")  # 后面加4个空格
print()  #内循环结束之后,在后面加个换行

这个程序有2个for循环。第一个for循环是for i in range(1,10),共循环9次,i值从1到9,让计算机从第1行显示到第9行,共显示9行第一个for循环称为外循环。第二个循环是for j in range(1,i+1),让计算机从第1列显示到第i列;当i等于1时,只显示第1列,当i等于2时,显示2列,以此类推。end=""表示用空字符串来结束,即不要空格。在python中,“\t”是指制表符,作用是对齐表格数据的各列,代表着四个空格,也就是一个tab键,end=“\t”是以4个空格结束。
优化上面的程序,内循环用一个print语句就可以打印出“九九乘法表”。

for i in range(1,10):
    for j in range(1,i+1):      
        print("{}×{}={}".format(j,i,j*i),end="\t") #用format()格式化
      # print("%d×%d=%d"%(j,i,j*i),end="\t") #用%格式化
    print()
-------------------------------------------------------------
输出结果:
1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81	
row=1 #定义起始行
while row<=9: #最多打印9行
    col=1 #定义起始列
    while col<=row: # 最多打印row列
        print("{}×{}={}".format(col,row,col*row),end="\t") # end=""表示输出结束后,不换行。"\t"在控制台输出一个制表符,协助输出文本时对齐。
        col +=1 # 列数+1
    print("") #一行打印完换行
    row +=1 #行数+1
----------------------------------------------------------------------------------
输出结果:
1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81	

2、循环嵌套的应用实例

《孙子算经》的著名趣题-“鸡兔同笼问题”。
鸡兔同笼是中国古代重要的数学著作《孙子算经》中的著名趣题,书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”《孙子算经》里的鸡兔同笼问题的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?
1.问题分析
假设鸡的数量保存到变量chicken中,总头数为35,说明鸡和兔共有35只,鸡的数量是0到35之间的某⼀个数,可以⽤for循环遍历。兔⼦的数量保存到变量rabbit中,根据鸡和兔共有35只,得到兔的数量rabbit=35-chicken。鸡有两只脚,兔⼦有四只脚,因此脚的总数为:chicken2+rabbit4=94。最后输出鸡的数量和兔的数量。
2.编写步骤
(1)鸡的数量范围是0到35之间的一个数。
(2)兔的数量范围是0到35之间的一个数。
(3)判断鸡和兔的总数是否是35且鸡的脚数与兔的脚数总数是否为94。
(4)输出鸡的数量和兔的数量。
3.编写代码

for chicken in range(36):
	for rabbit in range(36):
		if rabbit +chicken=35 and 2 * chicken + 4 * rabbit == 94:
	    	print("鸡有",chicken,"只")
	        print("兔有",rabbit,"只")
----------------------------------------------------------------------
输出结果:
鸡有 23 只
兔有 12

4.优化程序
减少一个内循环

for chicken in range(36):
    rabbit = 35 - chicken
    if 2*chicken + 4*rabbit == 94:
       	print("鸡有",chicken,"只")
        print("兔有",rabbit,"只")

使用嵌套循环打印各种图形:
例如打印下面的图形
Python基础之遍历循环、条件循环、嵌套循环_第6张图片

for i in range(5): 
    for j in range(i+1):
        print("*",end="")
    print() 
---------------------------------------------
输出结果:
*
**
***
****
*****

总结:
1).外层循环执行一次,内层循环全部执行一遍
2).如果外层循环需要执行m次,内层循环需要执行n次,嵌套循环一共会执行m*n次

row=1 #定义行数
while row<=5:
	#循环内部增加一个循环,实现每一行的星星打印
    col=1
    while col<=row:
        print("*",end="")
        col +=1
    print() #每一行星星打印完,换行
    row +=1
---------------------------------------
输出结果:
*
**
***
****
*****

你可能感兴趣的:(python,开发语言)