我已经在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)
此外,如果类定义在同一个文件中,则根本不需要导入它们。