第四章Python循环结构
一、while循环结构
1、语法格式为:
while <条件>表达式:
循环体语句块
#求1加到100的和
s = 0
i = 1
while i <= 100:
s += i
i += 1
print("1加到100的和:", s)
#求1加到100之间奇数的和
s = 0
i = 1
while i <= 100 :
s += i
i += 2
print("1加到100之间奇数的和:", s)
#求1加到100之间偶数的和
s = 0
i = 2
while i <= 100 :
s += i
i += 2
print("1加到100之间偶数的和:", s)
总结:
(1)while循环是先判断再执行,因此循环体语句块有可能出现一次也不执行的情况。
(2)要注意循环体语句块的缩进格式,while语句只执行其后的一条或一组同一缩进格式的语句块。
二、遍历循环结构
1、遍历循环:遍历某一个结构形成的循环运行方式,也称为for循环结构。
2、语法格式为:
for 循环变量 in 遍历结构:
循环体语句块
3、常见四种遍历情况
①遍历字符串
#遍历字符串
for x in "ABCD":
print(x)
②range函数产生的数字序列
语法格式为:
for 循环变量 in range([start,]end[,step]:
循环体语句块
#range函数产生的数字序列
for x in range(8):
print(x)
for x in range(2,8):
print(x)
for x in range(2,8,4):
print(x)
③列表、元组、字典
#列表、元组、字典
city = ['北京','上海','西安','成都']
for x in range(len(city)):
print(x,city[x])
④文件
文件位置:"D:\文件001.txt
#文件
for x in open("D:\文件001.txt"):
print(x, end='')
运行结果:
三、break和continue
1、break语句:break语句跳出并结束当前整个循环,执行循环后的语句。
例题:有一阶梯,如果每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每
步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶,正好到达阶梯顶,
问阶梯至少有多少阶?
s = 0
while True:
if s%2==1 and s%3==2 and s%5==4 and s%6==5 and s%7==0:
break
s = s + 1
print("阶梯至少:",s,"阶")
2、continue语句:continue语句用来跳过当前这次循环,继续进行下次循环。
例题:求100到200之间所有非3的倍数之和?
sum = 0
for i in range(100,202):
if i%3 == 0:
continue
sum += i
print("100到200之间所有非3的倍数之和:",sum)
3、小结:
break和continue可以与for和while循环搭配使用,起到辅助控制循环的作用。
四、循环嵌套—99乘法表
1、循环嵌套:在一个循环体内又包含了循环结构,这种结构称为循环嵌套。
2、九九乘法表(一般)
#九九乘法表
for i in range(1,10):
for j in range(1,10):
#print(i,"*",j,"=",i*j,end='')
print('%d*%d=%2d '%(j,i,i*j),end='')
print()
运行结果:
1*1= 1 2*1= 2 3*1= 3 4*1= 4 5*1= 5 6*1= 6 7*1= 7 8*1= 8 9*1= 9
1*2= 2 2*2= 4 3*2= 6 4*2= 8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18
1*3= 3 2*3= 6 3*3= 9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27
1*4= 4 2*4= 8 3*4=12 4*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=36
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25 6*5=30 7*5=35 8*5=40 9*5=45
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7*6=42 8*6=48 9*6=54
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9*8=72
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
3、九九乘法表(下三角)
#九九乘法表(下三角)
for i in range(1,10):
for j in range(1,1+i):
#print(i,"*",j,"=",i*j,end='')
print('%d*%d=%2d '%(j,i,i*j),end='')
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
4、九九乘法表(上三角)
#九九乘法表(上三角)
for i in range(1, 10):
print(" "*(i-1)*8, end='')
for j in range(i, 10):
#print(i,"*",j,"=",i*j,end='')
print('%d*%d=%2d '%(i, j, i*j), end='')
print()
运行结果:
1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9
2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81
五、循环嵌套—素数判定
例题:输出2-100之间的所有素数。
素数:就是一个只能被1和它本身整除的整数。
步骤:
- 判断n是否是素数
- n从2到100循环,逐个判断每个数是否
是素数。
import math
#n = eval(input("请输入一个整数:"))
for n in range(2,101):
m = int(math.sqrt(n))
for i in range(2,m+1):
if n%i == 0 :
break
else:
print(n,"是素数")
六、循环与else搭配用法
1、for循环与else搭配
for 循环变量 in 遍历结构:
语句块1
else:
语句块2
2、while循环与else搭配
while <条件表达式>:
语句块1
else:
语句块2
3、小结:
(1)else语句块作为循环正常结束的补充
(2)当循环没有被break语句中断时,执行else语句块
七、随机数求圆周率
方法:撒点法
from random import random
#随机数求圆周率
s = eval(input("请输入循环次数:")) #单位正方形内总的撒点数
n = 0 # n代表1/4圆内部的撒点数
for i in range (1,s+1):
x,y = random(),random() #撒点的x和y坐标
if x*x+y*y <= 1: #如果点在圆内部则计数
n=n+1
pi=4*(n/s) #计算pi
print("圆周率是:{}".format(pi))
八、穷举法—百元买百鸡
问题:
公元五世纪我国数学家张丘建在其《算经》一书中提出了“百鸡问题 ”:“鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、母、雏各几何?”
for x in range(0,21):
for y in range(0,34):
if 5*x+3*y+(1/3)*(100-x-y)==100:
print("公鸡%d只,母鸡%d只,小鸡%d只"%(x,y,100-x-y))
运行结果:
公鸡0只,母鸡25只,小鸡75只
公鸡4只,母鸡18只,小鸡78只
公鸡8只,母鸡11只,小鸡81只
公鸡12只,母鸡4只,小鸡84只
九、递推法—斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因以兔子繁殖为例子而引入的,故又称为“兔子数列”。指的是这样一个数列:1、1、2、3、5、8、13、21、34、……。
分析:在数学上,斐波纳契数列以递推的方法定义如下:
F(1)=1,F(2)=1,
F(n)=F(n-1)+F(n-2) (n>=3,n∈N*)
n=eval(input("请输入数列的个数:"))
a=b=1
count=2
print("%6d%6d"%(a,b),end=' ')
for i in range(3,n+1):
c=a+b
print("%6d"%c,end=' ')
count+=1
if count %6 == 0:
print()
a=b
b=c
运行结果:
请输入数列的个数:26
1 1 2 3 5 8
13 21 34 55 89 144
233 377 610 987 1597 2584
4181 6765 10946 17711 28657 46368
75025 121393
十、循环打印图形
1、图形一
for i in range(1,5):
print(' '*(11-i),end=' ')
print('*'*(2*i-1))
*
***
*****
*******
2、图形二
for i in range(1,5):
print(' '*(11-i),end=' ')
print('*'*(2*i-1))
for i in range(3,0,-1):
print(' '*(11-i),end=' ')
print('*'*(2*i-1))
运行结果:
*
***
*****
*******
*****
***
*
3、图形三
for i in range(1,5):
print(' '*(11-i),end=' ')
print(chr(64+i)*(2*i-1))
运行结果:
A
BBB
CCCCC
DDDDDDD
4、图形四
for i in range(1,5):
print(' '*(11-i),end=' ')
#print(chr(64+i)*(2*i-1))
for j in range(1,2*i):
print(chr(64+j),end='')
print()
运行结果:
A
ABC
ABCDE
ABCDEFG
十一、程序调试—print
1、 简单程序—打印变量
2、复杂程序– 写日志文件
十二、调试程序—断点跟踪
- 寻找合适的位置设置断点
- 逐步跟踪是F8
- 运行到光标是Alt+F9
- 在上方的窗口或下方窗口
- 查看运行时变量的值
- 分析变量的值的变化
十三、异常处理
1、异常:指程序运行过程中出现的错误或遇到的意外情况。
2、异常处理:
-
异常处理可以在一定程度上可以提高程序的健壮性
-
同时把错误信息转换为友好的提示呈现给最终用户
3、基本语法:
try…except
try:
<语句块1>
except: #任何错误
<语句块2>
try的完整语法
try:
<语句块1>
except: <异常类型1>
<语句块2>
except: <异常类型2>
<语句块3>
else:
<语句块4>
finally:
<语句块5>