<p>首先,正如其他人所说,您使用继承是错误的,但我认为这是家庭作业的要求。你知道吗</p>
<p>在骰子子类中,尝试更新<code>__init__</code>方法中的边数:</p>
<pre><code>class TenSidedDie(SixSidedDie):
def __init__(self):
self.sides = 10
def __repr__(self):
return 'TenSidedDie({})'.format(self.faceValue)
</code></pre>
<p>此外,点名时,你不需要包括自己。你知道吗</p>
<pre><code>for k in range(1, self.nOfTwentySdDie+1):
self.fVOfTwentySdDie.append(TwentySidedDie.roll())
</code></pre>
<hr/>
<p>使用更新的代码:</p>
<p>对全局初始化列表进行注释对我很有用。你知道吗</p>
<p>另外,在打印信息时,您希望能够查看日志并立即理解它。我建议添加以下行滚动方法:<code>print('Rolling [{}], count: [{}] values: {}'.format(self.sides, self.nOfDie, self.valueLst))</code>这将告诉您要滚动的骰子的大小、数量以及每个骰子的结果。不再分析日志。你知道吗</p>
<hr/>
<p>因为你只是有技术问题,不要求你的家庭作业,这是我的代码,为我工作。我做了一些小的重写,使其更易于管理,并添加了日志记录:</p>
<pre><code>import random
class SixSidedDie:
sides = 6
valueLst = []
sumVal = int()
def __init__(self, nOfDie):
print('intializing d6 with [{}] dice'.format(nOfDie))
self.nOfDie = nOfDie
def roll(self):
self.valueLst = []
for i in range(1, self.nOfDie+1):
self.valueLst.append(random.randint(1,self.sides))
print('Rolling {} d{} values: {}'.format(self.nOfDie, self.sides, self.valueLst))
return self.valueLst
def sum(self):
self.sumVal = 0
for i in self.valueLst:
self.sumVal += i
return self.sumVal
def getFaceValue(self):
return self.valueLst
def __repr__(self):
return 'SixSidedDie({})'.format(self.faceValue)
class TenSidedDie(SixSidedDie):
def __init__(self, nOfDie):
print('intializing d10 with [{}] dice'.format(nOfDie))
self.nOfDie = nOfDie
self.sides = 10
def __repr__(self):
return 'TenSidedDie({})'.format(self.faceValue)
class TwentySidedDie(SixSidedDie):
def __init__(self, nOfDie):
print('intializing d20 with [{}] dice'.format(nOfDie))
self.nOfDie = nOfDie
self.sides = 20
def __repr__(self):
return 'TwentySidedDie({})'.format(self.faceValue)
class cup():
def __init__(self, nOfSixSdDie = 1, nOfTenSdDie = 1, nOfTwentySdDie = 1):
self.sixSdDie = SixSidedDie(nOfSixSdDie)
self.tenSdDie = TenSidedDie(nOfTenSdDie)
self.twentySdDie = TwentySidedDie(nOfTwentySdDie)
def getSum(self):
return self.sixSdDie.sum()+ self.tenSdDie.sum() + self.twentySdDie.sum()
def roll(self):
self.sixSdLst = self.sixSdDie.roll()
self.tenSdLst = self.tenSdDie.roll()
self.twentySdLst = self.twentySdDie.roll()
return self.getSum()
def __repr__(self):
output = ''
print('6 sided : [{}]\n10 sided: [{}]\n20 sided: [{}]'.format(len(self.sixSdLst), len(self.tenSdLst), len(self.twentySdLst)))
for i in self.sixSdLst:
output += 'SixSidedDie(' + str(i) +'),'
output += '\n'
for j in self.tenSdLst:
output += 'TenSidedDie(' + str(j) +'),'
output += '\n'
for k in self.twentySdLst:
output += 'TwentySidedDie(' + str(k) +'),'
result = 'Cup(' + output + ')'
return result
play_cup = cup(20, 20, 20)
print('ROLL:', play_cup.roll())
print('SUM:', play_cup.getSum())
print(play_cup)
</code></pre>
<p>结果:</p>
<pre><code>intializing d6 with [5] dice
intializing d10 with [5] dice
intializing d20 with [5] dice
Rolling 5 d6 values: [1, 2, 2, 2, 3]
Rolling 5 d10 values: [6, 4, 5, 7, 3]
Rolling 5 d20 values: [9, 8, 2, 5, 10]
ROLL: 69
6 sided : [5]
10 sided: [5]
20 sided: [5]
[1, 2, 2, 2, 3]
[6, 4, 5, 7, 3]
[9, 8, 2, 5, 10]
Cup(SixSidedDie(1),SixSidedDie(2),SixSidedDie(2),SixSidedDie(2),SixSidedDie(3),
TenSidedDie(6),TenSidedDie(4),TenSidedDie(5),TenSidedDie(7),TenSidedDie(3),
TwentySidedDie(9),TwentySidedDie(8),TwentySidedDie(2),TwentySidedDie(5),TwentySidedDie(10),)
</code></pre>