高级 Python 开发课程
第 章
>
第 级
数学模块
随机模块
目标
使用 random 模块运行模拟和测试,为农田建设过程中可能出现的错误和挫折做好准备。
穿过附楼,有一个办公室负责处理一些与建设运输、住宿和物流相关的文书工作。利用现有数据运行一些场景,计算挫折和设备故障,将会是个不错的主意。为此,我们引入了 random 模块,通过 import random 激活。
该模块用于生成各种程度的随机输出,允许你运行模拟或在计算/练习中加入随机元素。就我们的目的而言,我们将使用以下函数:
random.seed(): 设置随机生成的种子,接受一个参数,即你希望使用的种子数字。这意味着任何使用相同种子的随机函数都会返回相同的结果。这用于对随机生成进行一定的控制,并能够重现特定结果。random.random(): 返回一个介于0和1之间的随机浮点数。random.randint(): 接受两个参数,生成一个介于这两个参数之间的数字,包括这两个数字。结果以整数形式返回。random.uniform(): 与前一个函数相同,但返回一个随机浮点数而非整数。random.triangular(): 与前一个函数相同,但多了一个名为 mode 的修正参数。mode 需要是介于前两个参数之间的数字。生成的随机数在统计上会更接近 mode,而不是纯粹介于前两个参数之间的随机数。random.choice(): 接受一个列表作为参数,从列表中随机选择一个项目。random.choices(): 从另一个列表中生成一个随机样本列表,接受三个参数:一个是你希望抽样的列表,另一个列表用于指定从该列表中每个项目抽样时的权重,最后是一个名为 k 的变量,用来指定你想从列表中抽取的样本数量。样本数量可以超过列表的长度,因为它会根据所分配的权重生成重复项。random.shuffle(): 接受一个列表作为参数,并对其进行随机排序。random.sample(): 接受两个参数,一个用于抽样的列表和你希望抽取的样本数量。这是random.choices()的简化版本。
首先,走向标有浅色 X 的标记并面向桌子,使用 read() 函数读取备忘录并识别运行包含随机变异的模拟所需的数据点。我们将运行一个设备故障模拟,备忘录会告知你用于随机生成的 seed 值以及所抽样的列表。使用 random.seed() 函数,并插入备忘录中提供的值。
走向覆盖着蓝色地毯的标有深色 X 的标记并面向桌子,我们有一个名为 sectors 的列表常量,其中包含前一份备忘录中列出的农田区域。创建一个变量 selection 用以存储 random.choice() 的返回值,使用 sectors 列表常量从中获取一个样本,如:selection = random.choice(sectors)。再创建一个变量 delay,存储 random.random() 的返回值,以模拟因延迟引起的误差范围。
再创建一个变量 defect,存储 random.randint() 的返回值,用于生成潜在设备故障的百分比。传入参数 0 和 15 以生成这两个数字之间的百分比。一旦设置好 selection、delay 和 defect 变量后,按顺序使用预先编写的 write() 函数将这三个变量记录下来,以标记可用于测试施工中潜在问题的数据点。
走向标有金色 X 的标记,并使用 read() 函数继续运行预测,备忘录中的数据将包含材料、数量和抽样数据。我们将使用备忘录中的数据运行一个较大规模的模拟,其中包括一个名为 materials 的列表常量,存储备忘录中列出的材料类型。
走向覆盖着红色地毯的标有深色 X 的标记并面向桌子。创建一个名为 weights 的列表,并依照呈现顺序存储备忘录中对应各材料的四(4)个数值。例如:weights = [400, 600 , -insert value-, -insert value-]
创建一个变量 simulation,存储 random.choices() 的返回值,传入 materials 列表常量、你创建的 weights 列表以及一个名为 k 的变量(其值为备忘录中列出的抽样单位),例如:simulation = random.choices(materials, weights , k = insert sampling units )。使用 simulation 变量与预先编写的 write() 函数来记录数据。
走向覆盖着绿色地毯的标有深色 X 的标记并面向桌子,使用你创建的 simulation 列表与 random.shuffle() 函数进行随机排序,如:random.shuffle(simulation)。这将打乱列表,不需要存储返回值,因为它会直接修改原列表。创建一个名为 sample 的列表,存储 random.sample() 的返回值,传入 simulation 列表作为第一个参数,并将第二个参数设置为采样数量 3,以随机抽取三个项目作为样本,如:sample = random.sample(simulation, k=3)。使用 simulation 和 sample 变量配合预先编写的 write() 函数记录新的样本数据。
最后,走向覆盖着紫色地毯的标有深色 X 的标记并面向桌子,创建一个变量 defect 并存储 random.uniform() 的返回结果,传入参数 3 和 10。这些是原始模拟和从中抽样的采样数值,我们将利用它来生成从样本中得出的潜在设备缺陷幅度。
创建一个变量 losses 并存储 random.triangular() 的返回值,传入数值 200、600 和 400。这些数值是前一份备忘录中列出的材料数量,分别代表最小值、最大值以及最接近中间的数值。这样我们就可以根据模拟使用的材料数量得到一个三角分布的随机值。最后,使用 defect 和 losses 变量配合预先编写的 write() 函数获取结果,从而完成该关卡。