我正在研究一个使用python类的问题,并且有一个构造函数来给出一个die的边数和一个用于根据边数返回的随机数掷出die的函数。我意识到代码是非常基本的,但是我很难理解如何总结三个不同侧面的掷骰子。由于变量正在传递函数实例,因此获取该值的最佳方法是什么?这就是我所拥有的。
*澄清......我可以将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()
答案 0 :(得分: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
(编辑以反映对问题的更改/澄清)
答案 1 :(得分: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)
...然后用列表等获得更多的爱好者。
答案 2 :(得分: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
答案 3 :(得分:1)
由于roll_die
返回一个值,您可以添加这些值。
试试这个。
roll1.roll_die() + roll2.roll_die()
会发生什么?
答案 4 :(得分: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))
答案 5 :(得分: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()
答案 6 :(得分: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()
答案 7 :(得分: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)