Python Object-Oriented Python Dice Roller RPG Roller

YZ L
YZ L
4,483 Points

Why is this wrong?

CHALLENGE:

Now update Hand in hands.py. I'm going to use code similar to Hand.roll(2) and I want to get back an instance of Hand with two D20s rolled in it. I should then be able to call .total on the instance to get the total of the two dice.

I'll leave the implementation of all of that up to you. I don't care how you do it, I only care that it works.

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, sides=20):
        super().__init__()
        self.sides = sides
hands.py
import dice

class Hand(list):

    def roll(x):
        for _ in range(x):
            return(D20.value)

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

1 Answer

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 57,144 Points

You're off to a good start but there are issues:

  • need to decorate roll with @classmethod
  • need to include cls as the first parameter in a classmethod
  • need to create an instance of Hand to return. Use self = cls()
  • with self as the instance, you can append dice.D20() instances within loop
  • need to use dice.D20() instead of D20() since only dice was imported
  • return needs to be outside of the for loop or only first pass is run before returning
  • return self as the created instance.

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