1

您好,我正在尝试制作一个函数,包括随机模块,该模块仅累积 n 骰子奇数掷骰的总和,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

我怎样才能让它工作?它永远不会超过第一个 if 因为它从 y=0 开始

4

4 回答 4

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])

未经测试,但应该可以工作:)

于 2013-04-17T20:19:29.757 回答
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
于 2013-04-17T20:15:39.797 回答
1

..你想要单线,这是单线 :)

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
于 2013-04-17T20:25:10.447 回答
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
于 2013-04-18T02:43:39.943 回答