python日记Day05——程序的控制结构(蒙特卡罗方法求解圆周率为例)

python日记——分支循环(蒙特卡罗方法求解圆周率为例)

一、程序的分支结构

  • 单分支结构:
    if <条件> :执行语句
  • 二分支结构:
    if …else…
  • 多分支结构:
    if …elif…elif…else…
  • 条件判断及组合:
    操作符:<,<=,>=,>,==,!=;
    保留字:x and y(逻辑与); x or y(逻辑或);not x(逻辑非)。
  • 程序的异常处理:
    1、异常处理的基本使用:
    try:

    except:

    注:当程序运行产生异常时,执行except后面的语句,并且except后面可跟上异常类型,当添加异常类型时,仅响应该异常类型。
    2、异常处理的高级使用:
    try:

    except:

    else:

    finally:

    注:finally对应语句一定执行,else对应语句在不发生异常时执行。

二、程序的循环结构

  • 遍历循环:
    for <循环变量> in <遍历结构>
    注:遍历结构有多种,例如列表、字符串、字典、元组、文件等,因此常用的有:计数循环、字符串遍历循环、列表遍历循环、文件遍历循环等。
  • 无限循环:
    while <条件>
    注:在程序运行时,可通过“CTRL+C”的方式退出循环。
  • 循环控制保留字:
    break:跳出并结束当前整个循环,执行循环后的语句,当有多层循环时,仅跳出最内层循环
    continue:结束当次循环,继续执行后续次数循环。
  • 循环的高级用法:
    将循环与else语句搭配,当循环没有被break语句退出时,执行else语句块,else语句块作为“正常”完成循环的“奖励",这里的else与异常处理中的else用法相似。

三、random库的使用

  • random库时使用随机数的python标准库。
  • 其产生的随机数是通过梅森旋转算法生成的伪随机数。
  • random库包括两类函数:
    1、基本随机数函数:
    seed():初始化随机数种子,默认为当前系统时间;
    random():生成一个[0.0,1.0)之间的随机小数;
    注:当使用随机数种子时,只要种子相同,那么产生的随机数也相同,可再现随机过程。
    2、扩展随机数函数:
    randint(a,b):随机产生a~b之间的整数;
    randrange(a,b[,k]):生成一个m~n之间以k为步长的随机数;
    getrandbits(k):生成一个k比特长的随机整数;
    uniform(a,b):生成一个a~b之间的随机小数,小数点后16位;
    choice(seq):从序列seq中随机选择一个元素;
    shuffle(seq):将序列seq元素随机排列,返回打乱后的序列。

四、圆周率的计算

  • 蒙特卡罗方法:在一个正方形中内切一个圆,通过撒点的方式计算圆周率,随机撒一个点,该点可落在圆内,也可以落在圆外,如果点的数量够多,则可通过圆内的点数与正方形内的点数的比值计算出圆周率。
  • 代码如下:
import random
import time
numpoint = 1000*1000
numcircle = 0.0
rcircle = 1.0
start = time.perf_counter()
for i in range(0,numpoint+1):
    x = random.random()#点的x坐标
    y = random.random()#点的y坐标
    if  pow(x*x+y*y,0.5) < rcircle:#判断点是否在圆内
        numcircle += 1
pi = 4 * (numcircle/numpoint)
print(pi)
print("运行时间:{:.2f}".format(time.perf_counter()-start))

运行结果:
在这里插入图片描述
注:此处的圆周率并不准确,若想得到精确的圆周率值,可增加点的数量,或者通过数学公式进行计算。

  • 举一反三:
    1、数学思维向计算思维的转换;
    2、在程序运行时,循环一般最花费时间;
    3、在工程计算中寻找蒙特卡罗方法的应用场景。

本文内容参考于北京理工大学嵩天老师相关课程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供Python实现蒙特卡方法求解圆周率π的代码,并绘制结果图形。 蒙特卡方法是一种基于随机数的数值计算方法,用于解决某些数学问题,其中包括计算π的值。通过在一个正方形内随机地生成点,并计算落在正方形内且在圆内的点的数量,可以估算出圆的面积与正方形面积的比值,从而计算出π的值。 以下是Python实现蒙特卡方法求解π的代码: ```python import random import math import matplotlib.pyplot as plt # 定义正方形边长和圆的半径 square_length = 2 radius = 1 # 定义生成点的数量 num_points = 10000 # 初始化计数器 num_points_circle = 0 # 初始化存储生成点的列表 x_inside_circle = [] y_inside_circle = [] x_outside_circle = [] y_outside_circle = [] # 生成点并计数 for i in range(num_points): x = random.uniform(-1, 1) y = random.uniform(-1, 1) if math.sqrt(x**2 + y**2) <= radius: num_points_circle += 1 x_inside_circle.append(x) y_inside_circle.append(y) else: x_outside_circle.append(x) y_outside_circle.append(y) # 计算π的值 pi_estimate = 4 * num_points_circle / num_points print("π的估计值为:", pi_estimate) # 绘制图形 fig, ax = plt.subplots() circle = plt.Circle((0, 0), radius, fill=False) ax.add_artist(circle) ax.set_xlim((-1, 1)) ax.set_ylim((-1, 1)) ax.scatter(x_inside_circle, y_inside_circle, color='r', marker='.') ax.scatter(x_outside_circle, y_outside_circle, color='b', marker='.') plt.show() ``` 运行上述代码后,程序将随机生成指定数量的点,并计算出圆内点的数量,从而估算出π的值。最后,程序将绘制一个图形,其中红色的点表示落在圆内的点,蓝色的点表示落在圆外的点,圆的轮廓表示圆的边界。 希望这个代码能够帮助您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值