Carlin Ng2,492 Points
Bummer: Got the wrong length for a `Hand`,
Hi. I'm wondering why I keep getting the error Bummer: Got the wrong length for a
Hand, what am I doing wrong here?
And also if defining dice_class absolutely necessary in the init method? @K
import random class Die: def __init__(self, sides=2): if sides < 2: raise ValueError("Can't have fewer than two sides") self.sides = sides self.value = random.randint(1, sides) def __int__(self): return self.value def __add__(self, other): return int(self) + other def __radd__(self, other): return self + other class D20(Die): def __init__(self): super().__init__(20)
from dice import D20 class Hand(list): def __init__(self, rolls): self.outs =  super().__init__() for _ in range(rolls): self.outs.append(int(D20())) @property def total(self): return sum(self) @classmethod def roll(cls, rolls): return cls(rolls)
Steven Parker163,023 Points
The "roll" method must take an argument for the number of dice to roll, but the constructor should not. The challenge will expect to still be able to create a "Hand" instance without an argument.
You can still override "
__init__" if you don't change the calling signature, but it's not necessary. Depending on how you implement "roll", no other changes need be made.
Mark Chesney11,249 Points
Hi Steven, in your Sep 1 answer, to what do you refer when you say constructor? I thought constructor was the roll method. Thank you.