如何在python中将cup对象实现为骰子对象列表



我已经在python中实现了一个Dice类,它的位置属性和滚动方法,但我一直在尝试实现一杯5个骰子,它使用列表初始化n个骰子,下面是我的代码:

import random
class Dice:
def __init__(self, pos=1):
self.pos = pos

def get_position(self):
return self.pos
def set_position(self,pos):
self.pos=pos
def roll(self):
self.pos=random.randint(1,6)
return self
def __str__(self):
return self.pos
class cup:
def __init__(self, num):
self=[Dice() for k in range(num)]
def cup_roll(self):
for k in self:
k.roll()
return self
def __str__(self):
return str([k.get_position() for k in self])
##----------Test---------------##
from dice import Dice
from dice import Cup
LD=Cup(5)
print(LD)

我现在想使用5个骰子对象的列表来实现一个杯子对象,这个列表将使每个骰子对象由其位置表示,即滚动1,2,3,4,5的5个骰子将由列表[1,2,3,4,5]表示,但我仍然想有效地滚动杯子,同时滚动5个骰子,测试返回typeError不可迭代,感谢您的任何建议:(!

您需要将5个骰子绑定到Cup类中的一个变量:

self.dice = [Dice() for k in range(num)]

这里的self表示类本身的实例,因此不能重新绑定。类变量是用self.<var>点表示法定义的。然后在cup_roll__str__中,您可以将该变量与一起使用

def cup_roll(self):
for k in self.dice:
k.roll()
return self.dice
def __str__(self):
return str([k.get_position() for k in self.dice])

然后在你的测试中,你想在打印出来之前滚动杯子:

LD=Cup(5)
LD.cup_roll()
print(LD)

此外,如果类定义在同一个文件中,则根本不需要导入它们。

最新更新