【问题标题】:Python: random module with sum accumulator for odd numbersPython:带有奇数总和累加器的随机模块
【发布时间】:2013-04-23 05:34:10
【问题描述】:

您好,我正在尝试创建一个包含随机模块的函数,该模块仅累积 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 开始

【问题讨论】:

  • 您有什么问题要问我们吗?

标签: python random dice accumulator


【解决方案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

【讨论】:

    【解决方案2】:

    奇数卷:

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

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

    【讨论】:

    • 首先,你不需要方括号;其次,你是在计算奇数,而不是对结果求和;第三,你计算的是偶数,因为骰子面数通常(在给定的例子中)从 1 开始......
    【解决方案3】:

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

    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
    

    【讨论】:

    • 第一,你忽略了卷数,第二,你忽略了边数和第三,嗯,我不知道,应该有第三个:) 是的,randrange(1,边) 在 [1; 中生成值;边)间隔,而不是[1;边],所以最后一个被排除在外:)
    • @JOHN 哎呀.. 未经事先检查,切勿从解释器中复制粘贴内容:P
    【解决方案4】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      相关资源
      最近更新 更多