Python Object-Oriented Python Dice Roller RPG Roller

Justin Sana
Justin Sana
3,501 Points

RPG Roller - Task 2

Having trouble with this one - mostly don't understand what the prompt wants me to do when I get to the append part. I looked through the community boards and it seems like there's different ways to answer this challenge.

I included # Comments of where I think I understand what is needed and comment where I think I get lost. Please help!

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 # import D20 from dice.py

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

    @classmethod # Create classmethod named roll
    def roll(cls, dice_numb):
        dice_numb = [] # Create an empty list
        for _ in range(): # this is where I think I get lost
            dice_numb.append(D20)
        return dice_numb

1 Answer

Ave Nurme
Ave Nurme
15,176 Points

Hi Justin

I've seen quite a several and different approaches to solving this task but here is my solution which passed:

from dice import D20    # import the D20 class


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


    @classmethod    # create a classmethod named roll
    def roll(cls, dice_numb):   # take the number of dice as an argument
        nums = []   # create an empty list
        # in the next loop we append a D20 to our list equal to the
        # number of dice given as an argument to the roll classmethod
        for _ in range(dice_numb):  # the loop runs as many times as what is the value of dice_numb
            nums.append(D20())    # append a D20
        return cls(nums)    # return the list of D20s, classmethods need 'cls' here

For instance, if we called Hand.roll(2), the number '2' in the parentheses is the 'dice_numb' so in this particular case the loop runs 2 times.

I think quite many students have struggled with this challenge, incl myself when I learned this topic. I tested this solution and it passes.

Hope it helps!