我想创建一个随机数生成代码,输入" count"数字是程序中调用的次数。我想要做的是我想要创建2个随机数的函数的偶数次调用,这些随机数是" y1,y2"然而我只想输出y1而 保存y2以便下次调用函数。因此,在奇数次调用时,函数将直接输出前一次调用的y2。感谢帮助。到目前为止的代码:
import random
import math
def gaussianRandom ( count):
count += 1
if count%2 == 0:
while (1):
x1 = random.uniform(-1, 1)
x2 = random.uniform(-1, 1)
r = x1**2 + x2**2
if (r < 1):
break
y1 = x1 * math.sqrt( (-2 * math.log(r)) / r )
y2 = x2 * math.sqrt( (-2 * math.log(r)) / r )
return y1
答案 0 :(得分:2)
函数可以有属性。
import random
import math
def gaussianRandom ( count):
count += 1
if count%2 == 0:
while (1):
x1 = random.uniform(-1, 1)
x2 = random.uniform(-1, 1)
r = x1**2 + x2**2
if (r < 1):
break
y1 = x1 * math.sqrt( (-2 * math.log(r)) / r )
gaussianRandom.y2 = x2 * math.sqrt( (-2 * math.log(r)) / r )
print(gaussianRandom.y2)
return y1
gaussianRandom.y2 = 99
print "y2", gaussianRandom(3)
print gaussianRandom(3)
print gaussianRandom(3)
y2 0.919282832355
-0.0887376744533
y2 -1.71553385287
0.422645022058
y2 -0.0668389339817
0.600351205084
答案 1 :(得分:1)
你真的需要(或想要)告诉gaussianRandom()
你打算多少次打电话给它?这似乎对我有点限制。
我认为使用生成器函数可以更好地解决这个问题。下面的代码显示了如何创建一种以及如何使用它的方法。该生成器不是实现高斯算法,而是简单地生成6n±1形式的数字,因此您可以轻松查看正在发生的事情。
#! /usr/bin/env python
''' Generator demo '''
def gen():
x = 6
while True:
yield x-1
yield x+1
x += 6
def main():
g = gen()
for i in xrange(10):
print i, g.next()
print [(i, v) for i,v in zip(xrange(10), gen())]
if __name__ == "__main__":
main()
<强>输出强>
0 5
1 7
2 11
3 13
4 17
5 19
6 23
7 25
8 29
9 31
[(0, 5), (1, 7), (2, 11), (3, 13), (4, 17), (5, 19), (6, 23), (7, 25), (8, 29), (9, 31)]