from random import uniform
prob = [0.25,0.30,0.45]
def onetrial(prob):
u=uniform(0,1)
if 0 < u <= prob[0]:
return 11
if prob[0] < u <= prob[0]+prob[1]:
return 23
if prob[0]+prob[1] < u <= prob[0]+prob[1]+prob[2]:
return 39
print onetrial(prob)
我想知道如何使用一些for循环技术减少def中的重复部分。感谢。
答案 0 :(得分:1)
以下内容相当于您当前的代码,它使用for循环:
from random import uniform
prob = [0.25, 0.30, 0.45]
def onetrial(prob):
u = uniform(0, 1)
return_values = [11, 23, 39]
total_prob = 0
for i in range(3):
total_prob += prob[i]
if u <= total_prob:
return return_values[i]
我对你返回的值与概率之间的关系有点不清楚,似乎你的代码prob
总是会有3个元素,所以我也做了这个假设。
答案 1 :(得分:1)
我喜欢F.J的答案,但我会使用一个元组列表,假设您可以轻松地这样做:
from random import uniform
prob = [(0.25, 11), (0.30, 23), (0.45, 39)]
def onetrial(prob):
u = uniform(0, 1)
total_prob = 0
for i in range(3):
total_prob += prob[i][0]
if u <= total_prob:
return prob[i][1]
答案 2 :(得分:0)