当前位置:   article > 正文

Python之循环结构【包括列表、for语句、range()函数、while语句、循环嵌套、break、continue、算法优化等】_python循环语句不缩进

python循环语句不缩进

python循环结构的学习,主要包括列表、for语句、range()函数、while语句、循环嵌套、break、continue、算法优化等。


1、列表

列表可以包含多个/多种数据元素,是一个有序的容器。
一个列表中的元素可以是不同类型的,其下标索引从0开始,亦可使用负数(从后向前)进行索引。
列表的常见操作:赋值、删除(remove、pop、del)、插入(insert)、添加(append)等。
用list函数可以将集合或字符串类型的数据转换成列表类型的数据。

请运行下列程序,查看结果并理解列表的作用(如有疑问欢迎留言)

a=[1,3,5,7,1,"盐中","苹果","123456",True,3<2]
print(a)

a[1]=7
print(a)

a.remove(1)
print(a)

a.remove(1)
print(a)

del a[5]
print(a)

a.pop(5)
print(a)

a.insert(3,20211020)
print(a)

a.append("China")
print(a)

for i in a:
	print(i)

for i in range(-1,-(len(a)+1),-1):
	print(a[i])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

2、计数循环(包括range()函数使用方法)

循环次数一定时,常使用计数循环(for语句)来实现。
for 语句的基本格式为:

for 循环变量 in 序列 :
      \space\space\space\space\space      语句或语句组

缩进的语句或语句组称为循环体。Python规定循环体必须相对关键词 for 有缩进。in 后面也可以是range()函数。

range(a,b,c)函数:
▶ \blacktriangleright 可以生成一个 [a,b) 的数字序列,c表示步长值(序列的公差);
▶ \blacktriangleright 若只有两个参数a、b,则表示生成范围 [a,b) 的数字序列;
▶ \blacktriangleright 若只有一个参数 a,则表示生成范围 [0,a) 的数字序列。
请运行下列程序,查看结果并理解 range 的作用

for i in range(10):
	print(i)

for i in range(10,20):
	print(i)

for i in range(10,20,3):
	print(i)

for i in range(20,10,-2):
	print(i)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

range(函数应用):
例 : 求a、b的最大公约数参考程序如下:
【参考程序1】

a=int(input())
b=int(input())
gcd=1
for i in range(1,a+1):
	if a%i==0 and b%i==0:
		gcd=i
print(gcd) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

【参考程序2】

a=int(input())
b=int(input())
gcd=1
for i in range(a,0,-1):
	if a%i==0 and b%i==0:
		gcd=i
		break
print(gcd) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3、条件循环

条件循环(while语句)一般用于循环次数未知的情况。
while语句的基本格式为:

while 条件 :
      \space\space\space\space\space      语句或语句组

当表达式成立时,执行循环体。Python允许表达式为数字,如果该数字为 “0” 则表示表达式为假(即不成立),为非 0 数字则表示为真(即成立)。
例:用辗转相除法求最大公约数,参考程序如下:

a=int(input())
b=int(input())
r=a%b
while r:
	a=b
	b=r
	r=a%b
print(b)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4、循环嵌套

一个循环结构的内部也可以包含另一个循环结构,这样的结构称为循环嵌套(也称为多重循环)。常用的循环嵌套是二重循环,分外层循环(外循环)与内层循环(内循环)。内循环是外循环的循环体,外层循环每执行一次,内层循环则执行一次完整的循环。
以计数循环for语句为例的二重循环格式如下:

for 循环变量1 in 序列1:            \space\space\space\space\space\space\space\space\space\space            #外循环
      \space\space\space\space\space      for 循环变量2 in 序列2:         \space\space\space\space\space\space\space        #内循环,注意缩进
           \space\space\space\space\space\space\space\space\space\space           语句或语句组                  \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space                 #循环体,注意缩进

例:“百钱买百鸡”
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
参考程序如下:

for i in range(1,101):				#i表示公鸡的数量
	for j in range(1,101):			#j表示母鸡的数量
		for k in range(1,101):		#k表示小鸡的数量
			if i+j+k==100 and i*5+j*3+k/3==100:		#满足“百鸡、百钱”的条件
				print(i,j,k)
  • 1
  • 2
  • 3
  • 4
  • 5

5、break和continue语句(如何优化算法)

break语句用于终止某个循环,使程序跳到循环体以外的第一个可执行语句;continue语句用于终止本次循环,直接进入下一次循环,即跳过循环体内还未执行的语句,进入下一次循环的判定。

break语句使用示例:

#求最大公约数
a=int(input())
b=int(input())
gcd=1
for i in range(a,0,-1):
	if a%i==0 and b%i==0:
		gcd=i
		break
print(gcd) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

continue语句经常用于对程序进行优化,例如刚刚的“百钱买百鸡”的程序中不难发现,当 i+j>100 时就不再需要去进行k的取值与判定,即当公鸡母鸡的数量和超过100时直接跳过本次循环,进入下一次循环。

for i in range(1,101):				#i表示公鸡的数量
	for j in range(1,101):			#j表示母鸡的数量
		for k in range(1,101):		#k表示小鸡的数量
			if i+j+k==100 and i*5+j*3+k/3==100:		#满足“百鸡、百钱”的条件
				print(i,j,k)
  • 1
  • 2
  • 3
  • 4
  • 5

可以改写如下

for i in range(1,101):				#i表示公鸡的数量
	for j in range(1,101):			#j表示母鸡的数量
		if i+j>100:					#当公鸡母鸡的数量和超过100时直接跳过进入下一次循环
			continue
		for k in range(1,101):		#k表示小鸡的数量
			if i+j+k==100 and i*5+j*3+k/3==100:		#满足“百鸡、百钱”的条件
				print(i,j,k)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

原本的循环体需要执行 10 0 3 100^3 1003 即一百万次,现在用continue立刻优化了一半变成了50万次,这种操作我们一般称为“可行性剪枝”,即发现某些情况不需要再往下做时用continue进行优化。当然就本题“百钱买百鸡”而言可以继续优化,例如公鸡的范围其实只可能在 [0,20],母鸡在 [0,33],小鸡可以根据公鸡母鸡的数量直接算出来,参考程序如下:

for i in range(21):				#i表示公鸡的数量
	for j in range(34):			#j表示母鸡的数量
		k=100-i-j				#k表示小鸡的数量
		if i*5+j*3+k/3==100:	#满足“百钱”的条件
			print(i,j,k)
  • 1
  • 2
  • 3
  • 4
  • 5

优化循环的要点:
▶ \blacktriangleright 1、减少循环层数
▶ \blacktriangleright 2、缩小循环范围
▶ \blacktriangleright 3、将次数少的作为外层循环,次数多的作为内层循环
▶ \blacktriangleright 4、精简循环体

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/366341
推荐阅读
相关标签
  

闽ICP备14008679号