假期第(18)天
for循环与while循环
l Python提供了两种基本的循环结构语句:while和for
l for循环尤其适用于枚举序列或迭代对象中的元素
l 当循环带有else子句时,如果循环因为条件表达式不
成立或序列遍历结束而自然结束时则执行else结构中
的语句,如果循环是因为执行了break语句而导致循
环提前结束则不执行else中的语句
while 条件表达式:
循环体
[else:
else子句代码块]
for 取值 in 序列或迭代对象:
循环体
[else:
else子句代码块]
循环结构1
15
5
循环应用示例-1
l 计算1+2+3+…+99+100【
03P15-1.py】
s = 0
for i in range(1, 101): #不包括101
s += i
else:
print(s)
5050
l 输出由星号*组成的菱形图案【
03P15-2.py】
def main(n):
for i in range(n):
print((' * '*i).center(n*3))
for i in range(n, 0, -1):
print((' * '*i).center(n*3))
main(6)
循环结构16
1
6
break与continue-1
l break语句提前结束整个循环(不执行else部分)
l continue语句终止当次循环,并忽略continue之后的语
句,然后回到循环的顶端,提前进入下一次循环
l continue可能带来的死循环问题
>>> i=0
>>> while i<10:
if i%2==0:
continue#死循环,Ctrl+C强行终止
print(i)
i+=1
l 修改建议:
>>> for i in range(10):
if i%2==0:
continue
print(i, end=' ')
1 3 5 7 9
循环结构1
7
17
break与continue应用示例
l 应用:计算小于100的最大素数【
03P17-1.py】
for n in range(100, 1, -1):
for i in range(2, n):
if n%i==0:
break
else:
print(n)
break
97
l 删除上面代码中最后一个break语句,则可以用来输出
100以内的所有素数【
03P17-2.py】
for n in range(100, 1, -1):
for i in range(2, n):
if n%i==0:
break
else:
print(n,end=' ')
9
7 89 83 79 73 71 67 61 59 53 47 43 41 37 31 29 23 19 17 13 11 7 5
3 2
循环结构18
1
8
循环代码优化-1
l 编写循环语句时,应尽量减少循环内部不必要的计算。
多重循环嵌套时应尽量减少内层循环中不必要的计算,
尽可能地向外提
优化前的代码:
digits = (1, 2, 3, 4)
for i in range(1000):
result = []
for i in digits:
for j in digits:
for k in digits:
result.append(i*100+j*10+k)
循环结构
优化后的代码:
digits = (1, 2, 3, 4)
for i in range(1000):
result = []
for i in digits:
i = i*100
for j in digits:
j = j*10
for k in digits:
result.append(i+j+k)1
9
19
循环代码优化-2
l 在循环中应尽量引用局部变量,因为局部变量的查询
和访问速度比全局变量略块。另外,在使用模块中的
方法时,可以通过将其直接导入来减少查询次数和提
高运行速度
import time
import math
优化前代码段
start = time.time()
#获取当前时间
for i in range(10000000):
math.sin(i)
print('Time Used:', time.time()-start)
#输出所用时间
优化后代码段
loc_sin = math.sin
start = time.time()
for i in range(10000000):
loc_sin(i)
print('Time Used:', time.time()-start)
循环结构2
0
20
循环结构应用案例-1
l 输出序列中的元素
>>> a_list = ['a', 'b', 'mpilgrim', 'z', 'example']
>>> for i, v in enumerate(a_list):
print('列表的第', i+1, '个元素是:
', v)
l 输出1~100之间能被7整除,但不能同时被5整除的所
有整数
>>> for i in range(1, 101):
if i % 7 == 0 and i % 5 != 0:
print(i)
l 输出"水仙花数"
>>> for i in range(100, 1000):
ge = i % 10
shi = i // 10 % 10
bai = i // 100
if ge**3+shi**3+bai**3 == i:
print(i)
循环结构程序案例2
1
21
循环结构应用案例-2
l 求成绩序列的平均分
>>> score = [70, 90, 78, 85, 97, 94, 65, 80]
>>> s = 0
>>> for i in score:
s += i
print(s / len(score))
#当然也可以使用内置函数来计算平均分:
>>> print(sum(score) / len(score))
l 打印九九乘法表【
03P21.py】注意区别
for i in range(1, 10):
for j in range(1, i+1):
print('{0}*{1}={2}'.format(i,j,i*j), end=' ')
print() #打印空行
循环结构程序案例22
2
2
循环结构应用案例-3
l 求200以内能被17整除的最大正整数
>>> for i in range(200, 0, -1):
if i%17 == 0:
print(i)
break
l 编写程序,计算组合数C(n,i),即从n个元素中任选i
个,有多少种选法【
03P22.py】
>>> def Cni1(n, i):
import math
return int(math.factorial(n)/math.factorial(i)/math.factorial(n-i))
>>> Cni1(6,2)
15
循环结构程序案例
C83 3!(88! 3)! 83721655 44 33 22 1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)