Python Object-Oriented Python Dice Roller RPG Roller

Gakenaope Elizabeth Mabutho
Gakenaope Elizabeth Mabutho
1,887 Points

What is wrong with my code??

I keep getting an error that says"couldn't import D20"

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):
    def roll(num_dice):
        hand = Hand()
        for i in range(num_dice):
            die = D20()
            hand.append(die)
        return hand

   @property
    def total(self):
        return sum(self)

1 Answer

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 58,878 Points

You are very close! The issues are:

  • the D20 class definition is indented too far
  • decorate roll method with @classmethod
  • add missing cls parameter as *first parameter in roll method
  • use cls() to create hand instance instead of Hand()

Post back if you need more help. Good luck!!!

Gakenaope Elizabeth Mabutho
Gakenaope Elizabeth Mabutho
1,887 Points

I am hoping that i have followed all your suggestions but i still get an error with the second task. Here is my answer;

from dice import D20

class Hand(list):

    class Hand(list):
    def roll(cls, num_dice):
         cls() = hand
        for i in range(num_dice):
            die = D20()
            hand.append(die)
        return cls(hand)

    @property
    def total(self):
        return sum(self)
Chris Freeman
Chris Freeman
Treehouse Moderator 58,878 Points

Getting closer! Here are the current issues:

  • there is an extra class Hand statement
  • missing decorator @classmethod
  • cls() = hand should be hand = cls()
  • return hand not cls(hand)