Python:带有奇数累加器的随机模块

时间:2013-04-17 20:08:55

标签: python random dice accumulator

您好我正在尝试创建一个包含随机模块的函数,该模块仅累积n-dice的奇数卷的总和,n次。听起来有点混乱,但是例如如果我将双面模具滚动2次并得到1和2,结果将只有1(因为2是偶数)。这就是我所拥有的:

import random

def roll(sides, dice):
    y = 0
    for i in range(1, dice+1):
        if y%2 == 1:
            y = y + random.randrange(1, sides+1)
    return y

我怎样才能让它发挥作用?如果因为它从y = 0开始

,它永远不会越过第一个

4 个答案:

答案 0 :(得分:1)

在您的代码中,问题是您在检查它是否奇怪之前添加了一个随机数,甚至在for循环中。

我认为你正在寻找这样的东西:

def roll(sides, times):
    final_sum = 0
    for i in range(times):
        randnum = random.randrange(sides)
        final_sum += randnum if randnum % 2 else 0
    return final_sum

答案 1 :(得分:1)

奇数卷数:

count([1 for i in xrange(num_of_rolls) if (random.randint(1, sides)) % 2])

和:

rolls = [random.randint(1, sides) for i in range(num_of_rolls)]
sum_of_odd = sum([roll for foll in rolls if roll % 2])

未经测试,但应该有效:)

答案 2 :(得分:1)

..你想要单行,这是oneliner:)

sum(r for r in (random.randrange(1, sides+1) for i in xrange(dice)) if r % 2)

无论如何,回答OP的问题:你的代码问题是你正在检查到目前为止的总和是否是奇数,而不是当前的掷骰...要做到这一点,你应该这样做:

import random

def roll(sides, dice):
    total = 0
    for i in range(dice):
        result = random.randrange(1, sides+1)
        if result % 2:
            y += result
    return y

答案 3 :(得分:0)

您的代码应首先将随机值分配给另一个变量。然后检查是否奇怪。然后添加它。

import random

def roll(sides, dice):
    y = 0
    roll = random.randrange(1, sides+1)
    for i in range(1, dice+1):
        if roll%2 == 1:
            y = y + roll
    return y