2

我正在解决一个问题,它使用 python 类并有一个构造函数来给出一个骰子的边数,以及一个函数来滚动骰子,并根据边数返回一个随机数。我意识到代码非常基本,但我很难理解如何总结三个不同面的骰子的总数。由于变量正在传递函数实例,因此获取该值以将其相加的最佳方法是什么?这就是我所拥有的。

*澄清一下...我可以将 roll1.roll_dice() 的总数加起来,但我必须单独显示每个掷骰子,然后显示三个骰子的总数。我可以做其中之一,但不能同时做。

class Die():

        def __init__(self, s = 6):
            self.sides = s
        def roll_die(self):
            x = random.randint(1,self.sides)
            return x

        roll1 = Die()   #Rolling die 1 with the default side of 6
        roll2 = Die(4)  #Rolling die 2 with 4 sides
        roll3 = Die(12) #Rolling die 3 with 12 sides

        print roll1.roll_die()  
        print roll2.roll_die()
        print roll3.roll_die()
4

8 回答 8

10

您可以将结果存储在列表中:

rolls = [Die(n).roll_die() for n in (6, 4, 12)]

然后您可以显示单个结果

>>> print rolls
[5, 2, 6]

或将它们相加

>>> print sum(rolls)
13

或者,您可以保留一个运行总计:

total = 0
for n in (6, 4, 12):
    value = Die(n).roll_die()
    print "Rolled a", value
    total += value
print "Total is", total

(编辑以反映对问题的更改/澄清)

于 2009-03-29T02:32:52.673 回答
3

我不确定你到底在哪里感到困惑。您需要做的最简单的事情是将您要滚动的特定骰子(对象)的概念与动作(滚动它)分开。我将从这里开始:

d6 = Die() #create die 1 with the default side of 6
d4 = Die(4) #create die 2 with 4 sides
d12 = Die(12) #create die 3 with 12 sides

roll1 = d6.roll_die()
roll2 = d4.roll_die()
roll3 = d12.roll_die()

print "%d\n%d\n%d\nsum = %d" % (roll1, roll2, roll3, roll1 + roll2 + roll3)

...然后用列表等变得更有趣。

于 2009-03-29T02:37:16.220 回答
3

仅存储最后一卷也可能很有用,这样您就可以随时获取它。

def __init__(self, s = 6):
    self.sides = s
    self.last_roll = None

def roll_die(self):
    self.last_roll = random.randint(1,self.sides)
    return self.last_roll
于 2009-03-29T03:01:03.883 回答
1

由于roll_die返回一个值,您可以添加这些值。

试试这个。

roll1.roll_die() + roll2.roll_die()

发生什么了?

于 2009-03-29T02:22:54.477 回答
0

您可以将数字相加。如果您想对n次滚动的结果求和,请考虑将此函数添加到类中:

def sum_of_n_rolls(self, n)
    return sum(self.roll_die() for _ in range(n))

另外,考虑将roll_die重命名为roll。很明显,这与滚石无关,因为该方法是Die类的一部分。


编辑:我现在读到您需要打印中间卷。考虑:

def n_rolls(self, n):
    return [self.roll_die() for _ in range(n)]

现在你可以掷一个 7 面骰子 10 次:

rolls = Die(7).n_rolls(10)
print(rolls, sum(rolls))
于 2009-03-29T02:30:02.743 回答
0

猜猜我会做这样的事情:

# Create dice
sides = [6,4,12]
dice = [Die(s) for s in sides]

# Roll dice
rolls = [die.roll_die() for die in dice]

# Print rolls
for roll in rolls:
    print roll

如果您愿意,还可以组合其中的一些步骤:

for num_sides in [6,4,12]:
    print Die(num_sides).roll_die()
于 2009-03-29T02:56:51.447 回答
0

如果我理解正确,您需要一个类属性。

更新:添加了一种自动重置总数的方法

import random

class Die():
    _total = 0

    @classmethod
    def total(cls):
        t = cls._total
        cls._total = 0
        return t

    def __init__(self, s=6):
        self.sides = s

    def roll_die(self):
        x = random.randint(1,self.sides)
        self.__class__._total += x
        return x

roll1 = Die()   #Rolling die 1 with the default side of 6
roll2 = Die(4)  #Rolling die 2 with 4 sides
roll3 = Die(12) #Rolling die 3 with 12 sides

print roll1.roll_die()  
print roll2.roll_die()
print roll3.roll_die()
print Die.total()
print "--"
print roll1.roll_die()  
print roll2.roll_die()
print roll3.roll_die()
print Die.total()
于 2009-03-29T06:36:33.430 回答
0

让我们发疯吧:)(也结合我的最后一个答案)

class Die():
    def __init__(self, s = 6):
        self.sides = s
        self.last_roll = None

    def roll_die(self):
        self.last_roll = random.randint(1,self.sides)
        return self.last_roll

dice = map(Die, (6, 4, 12))
rolls = map(Die.roll_die, dice)

print rolls
print sum(rolls)
于 2009-03-29T22:26:23.023 回答