您好我正在尝试创建一个包含随机模块的函数,该模块仅累积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开始
,它永远不会越过第一个答案 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