Python中的随机生成器函数

时间:2013-11-21 00:24:23

标签: python random command spyder pythonxy

我从九月开始学习Java,但是教授已经为一门科学课程分配了一个用Python创建程序的任务,该程序将使用最大值和最小值生成随机直径,并且在该范围内有15个随机点(x,y,z)。

我需要制作一个随机数生成器,生成介于0.0和1.0之间的数字,这样我就可以将其插入到我的公式中以找到随机直径。如果随机数是RN,则它将是:[(RN *(max-min))+ min]

起初我使用了这个随机函数:

from random import*
RN=random():

问题是,这个随机函数是[0.0,1.0)。换句话说,它不包括1.0。 如何创建包含1.0的函数?

另外,如果你不介意,你能帮我找到y和z坐标吗?我知道如何找到x。

y值的公式是y = +或 - sqrt(r ^ 2-x ^ 2)(也是随机生成的)。 我会得到x值,这是随机函数[0.0-1.0]的结果,半径是我直径的一半。我是Python的初学者,如何初始化我的x和y并将上述公式放入?

z的公式类似,z = +或 - sqrt(-x ^ 2-y ^ 2 + r ^ 2)(也是随机生成的)

这些是使用圆的公式: 半径:r = sqrt(x ^ 2 + y ^ 2) 球:R = SQRT(X ^ 2 + Y ^ 2 + Z ^ 2)

如果你能回答我问题的任何部分,我将非常感激,非常感谢你花时间阅读这篇文章!!  **顺便说一下,我是usinHi!我从九月开始学习Java,但是教授已经为一门科学课程分配了一个用Python创建程序的任务,该程序将使用最大值和最小值生成随机直径,并在此范围内生成15个随机点(x, y,z)。

我需要制作一个随机数生成器,生成介于0.0和1.0之间的数字,这样我就可以将其插入到我的公式中以找到随机直径。如果随机数是RN,则它将是:[(RN *(max-min))+ min]

起初我使用了这个随机函数:

来自随机导入的

RN =随机():

问题是,这个随机函数是[0.0,1.0)。换句话说,它不包括1.0。 如何创建包含1.0的函数?

另外,如果你不介意,你能帮我找到y和z坐标吗?我知道如何找到x。

y值的公式是y = +或 - sqrt(r ^ 2-x ^ 2)(也是随机生成的)。 我会得到x值,这是随机函数[0.0-1.0]的结果,半径是我直径的一半。我是Python的初学者,如何初始化我的x和y并将上述公式放入?

z的公式类似,z = +或 - sqrt(-x ^ 2-y ^ 2 + r ^ 2)(也是随机生成的)

这些是使用圆的公式: 半径:r = sqrt(x ^ 2 + y ^ 2) 球:R = SQRT(X ^ 2 + Y ^ 2 + Z ^ 2)

如果你能回答我问题的任何部分,我将非常感激,非常感谢你花时间阅读这篇文章!!!

**顺便说一句,我使用的是python x,y spyder!

4 个答案:

答案 0 :(得分:2)

random.uniform会在给定的最小值和最大值之间为您提供均匀分布的随机数。

只需生成随机点并检查它们是否在球体内。如果不是,请丢弃它们并重试。

import math
import random

def generate_points(n_points, min_diameter=0, max_diameter=1):
    diameter = random.uniform(min_diameter, max_diameter)
    radius = diameter / 2
    count = 0
    while count < n_points:
        x, y, z = [random.uniform(-radius, radius) for _ in range(3)]
        distance = math.sqrt(x * x + y * y + z * z)
        if distance <= radius:
            yield (x, y, z)
            count += 1

for x, y, z in generate_points(10):
    print x, y, z

注意:这可能会偏向生成哪些点。 (我不确定,它实际上可能还行。)另一种方法可能是使用极坐标,选择两个随机角度和一个随机半径(偏离中心)。

以下是该方法的数学计算:

theta = random.uniform(0, 2 * math.pi)
phi = random.uniform(-math.pi / 2, math.pi / 2)
x = r * cos(theta) * cos(phi)
y = r * sin(phi)
z = r * sin(theta) * cos(phi)

有关分发的详情,请参阅此处:

https://math.stackexchange.com/questions/87230/picking-random-points-in-the-volume-of-sphere-with-uniform-probability

http://mathworld.wolfram.com/SpherePointPicking.html(这个是关于球体表面上的点,所以可能没那么有用)

答案 1 :(得分:1)

我将它用于随机生成器并且它有效,我不确定它是否是您正在寻找的正确的但我希望它有所帮助

import random

maths_operator_list=['+','-','*']
maths_operator = random.choice(maths_operator_list)
number_one = random.randint(0,20)
number_two = random.randint(0,20)
correct_answer = 0

print(str(number_one), str(maths_operator), number_two)

if maths_operator == '+':
    correct_answer = number_one + number_two
elif maths_operator == '-':
    correct_answer = number_one - number_two
elif maths_operator == '*':
    correct_answer = number_one * number_two

print(correct_answer)

答案 2 :(得分:0)

作为随机数发生器的答案:

RN = random.uniform(a, b)

返回随机整数N,使得&lt; = N&lt; = b。

作为如何启动x和y,当你将y =设置为某个东西时,y将被初始化,它会自动执行。

答案 3 :(得分:0)

您可以使用random.range

random.randrange(-15,15,.1)

这将找到介于-15和15之间的数字,可以被0.1整除。