Python Object-Oriented Python Dice Roller RPG Roller

Jason Smith
Jason Smith
2,864 Points

I'm stuck! could i get some help?

i keep getting the error, 'can't find length of hand'.

dice.py
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__(sides = 20)
hands.py
from dice import D20

class Hand(list):
    @property
    def total(self):
        return sum(self)

    def roll(self, dice):
        for die in dice:
            self.append(D20)

1 Answer

Steven Parker
Steven Parker
155,187 Points

You have the right idea, but there's a few issues:

  • the passed argument will be a count, which is not iterable, but you can make an iterable using "range"
  • the example shows the method called directly on "Hand", this might be a good place to use "@classmethod"
  • the challenge wants you to build "an instance of Hand", so you'll need to construct one before appending to it
  • the challenge is expecting to get the new instance back, so you'll need a "return"