Python Object-Oriented Python Dice Roller RPG Roller

Youssef GHALEM
Youssef GHALEM
Python Development Techdegree Student 4,143 Points

I got this message : Can't get the length of a `Hand` eventhough I'm not asked to provide the __len__ meth for hand cld

Check my code please

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, number_of_dice) :
        slots = []
        for _ in range(number_of_dice) : 
            slots = []
            slots.append(D20())
        return slots

1 Answer

Steven Parker
Steven Parker
201,997 Points

The message may be confusing, but it just means that something is wrong with the class. Issues I notice:

  • the instructions ask for a classmethod, but the decorator that creates one is missing
  • the loop keeps setting "slots" to an empty list (so it never has more than one item in it)
  • the method is returning the list itself instead of a new instance with the list in it

About that last issue, I recall distinctly that being a requirement of this challenge (and it still is, I tried it); but the instructions seem to have been recently changed to say "Then return the list"! So the instructions are no longer correct.

Please report this to the Support staff and collect your "Exterminator" :beetle: badge for being the first to find it.