2020年月10日星期一
我们先来整理一下程序循环结构和random库的相关内容
##遍历循环
1、计数循环
说明:range(M,N,K)函数是从M开始到N之前以K为步长的数字序列,K省略时步长为一
2、字符串遍历循环
说明:end=","是指在每个打印的字符串后加上一个逗号
3、列表遍历循环
4、文件遍历循环
##无限循环
while语句根据判断条件确定循环次数,当不满足条件时退出,或进入无限循环。
##循环控制保留字
break跳出并结束当前整个循环,执行循环后的语句
continue结束档次循环,继续执行后续次数循环
break和continue可以与for和while循环搭配使用
注:一个break只能跳出一层循环
##循环的高级用法
循环与else
当循环没有被break语句退出时,执行else语句块
else语句块作为“正常”完成循环的奖励
这里else的用法与异常处理中else的用法相似
random库是使用随机数的标准库,直接使用import来使用它
##基本随机数函数
编程中如果给出了随机数种子,那么下一次程序再次运行,只要种子相同,产生的随机数也相同,对于使用随机数的程序我们可以复现或者再现程序运行的过程,如果不使用随机数种子,它使用的是当前系统时间,难以再现,所以后面产生的随机数结果是完全随机的。只要我们调用了random.seed设置种子的函数,后续调用random函数相同,产生的随机数也是相同的,如上图右。
##扩展随机数函数
#CalPiV1.py pi=0 N=100 for i in range(N):
pi+=1/pow(16,i)*(4/(8*i+1) - 2/(8*i+4) - 1/(8*i+5) - 1/(8*i+6) ) print("圆周率值为{}".format(pi))
结果一:
2、蒙特卡罗法
让点随机散落在区域中,通过统计落在单位圆与落在整个区域的点的比值来近似确定圆周率
代码二:
#CalPiV2.py
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):
x,y=random(),random()
dist=pow(x**2+y**2,0.5)
if dist<=1:
hits+=1
pi=4*hits/DARTS
print("圆周率值为{}".format(pi))
print("运行时间是:{:.5f}s".format(perf_counter()-start))