Sandy Leon2,246 Points
How do I format my class so that it passes the check?
Hello everyone, I managed to get the output that I wanted for this program, but I am not sure how to format it in a way that is acceptable to pass the problem.
I am supposed to create a method named 'roll' that gives me the total of any number of D20() methods called. I hope my explanation is clear enough. Thank you in advance for any help.
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)
from dice import D20 class Hand(list): hand =  @property def total(self): return sum(self.hand) def roll(self, size, *args, **kwargs): self.size = size for _ in range(size): self.hand.append(D20()) return self.hand
Chris FreemanTreehouse Moderator 53,009 Points
You are very close! Here what you have:
class Hand(list): hand =  # This variable is not needed. The Hand itself *is* a list! @property def total(self): return sum(self.hand) # Since 'self' is a list, you can just use sum(self) # Since looking to run with `Hand.roll(2)` this needs to be decorated as a classmethod # As a classmethod, the first parameter should be 'cls' not 'self' def roll(self, size, *args, **kwargs): # *args and **kwargs aren't used so aren't needed self.size = size # no need to save size as an attribute on the class # cannot use instance methods until there is an instance. # create one use `self = cls()` for _ in range(size): # since 'self' is now a list instance, you can append using 'self.append(D20())' self.hand.append(D20()) return self.hand # return the created instance 'self' instead of 'self.hand'
Post back if you need more help. Good luck!!