Python Object-Oriented Python Dice Roller RPG Roller

Sunny Sun
seal-mask
.a{fill-rule:evenodd;}techdegree
Sunny Sun
Python Development Techdegree Student 6,135 Points

Dice roll challenge

I think I got most of this but I'm stuck on what is wrong with my code

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 __init__(self, size=None, die_class=D20):
        size = super().__init__()
         for _ in range(size):
            self.append(die_class())

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

    @classmethod
    def roll(cls, num_dice=2):
        return cls(size=num_dice)

1 Answer

Steven Parker
Steven Parker
201,997 Points

You won't need to override "__init__" here, all the work can be done in the "roll" method.

Plus the "super" version doesn't return anything when you call it.

Sunny Sun
seal-mask
.a{fill-rule:evenodd;}techdegree
Sunny Sun
Python Development Techdegree Student 6,135 Points

I changed it to

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

@classmethod
def roll(cls, num_of_dice):
    emp = []
    for _ in range(num_of_dice):
        emp.append(D20())
    return cls(emp)

But it still isn't passing

Steven Parker
Steven Parker
201,997 Points

Odd, that looks OK. So I copied and pasted it directly into the challenge and it passed!