我想用骰子检查中心限制。D卷骰子。对结果求和。重复同一件事N次。更改D并重复。
无需存储随机值,因此我只想使用生成器。问题是发电机被消耗掉了。我不能多次重复使用它们。现在我的代码使用显式for,我不喜欢它。
dice_numbers = (1, 2, 10, 100, 1000)
repetitions = 10000
for dice_number in dice_numbers: # how many dice to sum
sum_container = []
for r in range(repetitions):
rool_sum = sum((random.randint(1,6) for _ in range(dice_number)))
sum_container.append(rool_sum)
plot_histogram(sum_container)
Run Code Online (Sandbox Code Playgroud)
我想创建类似
for r in repetitions:
rools_generator = (random.randint(1,6) for _ in range(dice_number)
sum_generator = (sum(rools_generator) for _ in range(r))
Run Code Online (Sandbox Code Playgroud)
但是第二次重用rools_generator就被消耗掉了。我需要构造一个生成器类吗?
您可以这样做:
for r in repetitions:
make_rools_generator = lambda: (random.randint(1,6) for _ in range(dice_number))
sum_generator = (sum(make_rools_generator()) for _ in range(r))
Run Code Online (Sandbox Code Playgroud)
这将创建一个称为的函数make_rools_generator,该函数在被调用时将创建一个提供骰子投掷的新生成器。