遍历循环
遍历某个结构形式的循环运行方式:
for <循环变量> in <遍历结构>:
<语句块>
-由保留字for和in组成,完整遍历所有元素后结束
-每次循环,所获得元素放入循环变量,并执行一次语句块
遍历循环的应用
1)计数循环(N次)
for i in range(N):
<语句块>
-遍历由range()函数产生的数字序列,产生循环,即i的取值为0~N-1
for i in range(M,N,K):
<语句块>
-遍历由range()函数产生的数字序列,产生循环,即i的取值为从M~N-1,步长为K,默认K为1
2)字符串遍历循环
for c in s:
<语句块>
-s是字符串,遍历字符串即每个字符,产生循环
3)列表遍历循环
for item in ls:
<语句块>
-ls是一个列表,遍历其每个元素,产生循环
4)文件遍历循环
for line in fi:
<语句块>
-fi是一个文件标识符,遍历其每行,产生循环
无限循环
由条件控制的循环运行方式
while <条件>:
<语句块>
-反复执行语句块,直到条件不满足时结束
循环控制保留字
break和continue
-break跳出并结束当前整个循环,执行循环后的语句,即break仅跳出当前最内层循环
-continue结束当次循环,继续执行后续次数循环
-break和continue可以与for和while循环搭配使用
循环的扩展:循环与else
for <循环变量> in <遍历结构>:
<语句块1>
else:
<语句块2>
while <条件>:
<语句块1>
else:
<语句块2>
-当循环没有被break语句退出时,执行else语句块
-else语句块作为"正常"完成循环的奖励
-这里的else用法与异常处理中else用法相似
random库基本介绍
random库是使用随机数的Python标准库
-伪随机数:采用梅森旋转算法生成的(伪)随机序列中的元素
-random库主要用于生成随机数
-使用random库:import random
-random库包括两类函数,常用共8个
1)基本随机数函数:seed()、random()
2)扩展随机数函数:randint()、getrandbits()、uniform()、randrange()、choice()、shuffle()
基本随机数函数:随机数种子确定随机序列的产生
函数 | 描述 |
---|---|
seed(a=None) | 初始化给的的随机数种子,默认为当前系统时间,如random.seed(10),产生种子10对应的序列 |
random() | 生成一个[0.0,1.0)之间的随机小数 |
给出种子是为了下次执行此函数时,种子相同,出现的随机数相同,实现程序的再现。
扩展随机数函数
函数 | 描述 |
---|---|
randint(a,b) | 生成一个[a,b]之间的整数 |
randrange(m,n[,k]) | 生成一个[m,n)之间以k为步长的随机整数 |
getrandbits(k) | 生成一个k比特长的随机数 |
uniform(a,b) | 生成一个[a,b]之间的随机小数,小数点16位数为精度 |
choice(seq) | 从序列seq中随机选择一个元素 |
shuttle(seq) | 将序列seq中元素随机排列,返回打乱后的序列 |
圆周率的计算
1)蒙特卡罗方法
在这个正方形内部,随机产生n个点(这些点服从均匀分布),计算它们与中心点的距离是否大于圆的半径,以此判断是否落在圆的内部。
from random import random
from time import perf_counter
DARTS=1000*1000 #撒点的个数
hits=0.0 #撒的点在圆内的个数
start=perf_counter() #开始撒点时的计算机时间
for i in range(1,DARTS+1):#循环DART个点
x,y=random(),random() #随机生成x,y两个坐标
dist=pow(x**2+y**2,0.5) #x**y表示x的y次方
if dist<=1.0:
hits=hits+1
pi=4*(hits/DARTS) #面积即π的大小
print("圆周率的值是:{}".format(pi))
print("运行时间是{:.5f}s".format(perf_counter()-start))
2)近似计算公式
pi=0
N=100
for k in range(N):
pi+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))#如果觉得代码太长写在一行难看可以用\换行
print("圆周率的值是:{}".format(pi))