Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python

dice question: We're playing a popular board game about snatching up real estate in Atlantic City. I need you finish out

We're playing a popular board game about snatching up real estate in Atlantic City. I need you finish out the CapitalismHand class. First off, make sure it always rolls two D6s.

please help im stuck here, cant get what to do

hands.py
from dice import D6


class Hand(list):
    def __init__(self, size=0, die_class=None, *args, **kwargs):
        if not die_class:
            raise ValueError("You must provide a die class")
        super().__init__()

        for _ in range(size):
            self.append(die_class())
        self.sort()

    def _by_value(self, value):
        dice = []
        for die in self:
            if die == value:
                dice.append(die)
        return dice


class CapitalismHand(Hand):
    def score_sixes(self, hand):
        return hand.sixes

    @property
    def ones(self):
        return self._by_value(1)

    @property
    def twos(self):
        return self._by_value(2)

    @property
    def threes(self):
        return self._by_value(3)

    @property
    def fours(self):
        return self._by_value(4)

    @property
    def fives(self):
        return self._by_value(5)

    @property
    def sixes(self):
        return self._by_value(6)

    @property
    def _sets(self):
        return {
            1: len(self.ones),
            2: len(self.twos),
            3: len(self.threes),
            4: len(self.fours),
            5: len(self.fives),
            6: len(self.sixes)
        }

3 Answers

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 68,441 Points

For the CapitalismHand to "always roll two D6s", it must always initialize its hand in the correct manner of two instances of the D6 class. This can be done with a custom __init__ method. Define an __init__ method that:

  • calls the __init__ method of the parent class. Use super() to accomplish this
  • set the argument for the parents __init__ method to include the number of die (2) and the die_class (D6)

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

I have a question about the following challenge where we have to define a new method doubles(). Can you elaborate on how exactly we can ensure that both dices have the same value? Does it take more than one argument? How can I reference the individual dices for comparison? Use a set and check for length > 1 to conclude that they have different values?

def doubles(self):
    my_set = set()
    for die in self:
        set.add(die)
    return len(my_set) == 1

Edit: Noticed that I used set.add(die) instead of my_set.add(die)

@Chris Freeman

trying this - doesn't work

class CapitalismHand(Hand):


    def __init__(self, args, **kwargs):
        super().init(size=2, die_class=D6)
Chris Freeman
Chris Freeman
Treehouse Moderator 68,441 Points

prateekparekh, the parent class is a list, therefore you can reference race die as a list item: self[0] == self[1]. You don’t need an argument since you have access to the values through self.

Chris Freeman
Chris Freeman
Treehouse Moderator 68,441 Points

Andrii Gorokhovskyi, you are very close!! There are two errors:

  • the super().__init__() is missing the underscores
  • the *args parameter is missing the asterisk. It fails because without the asterisk, it becomes a required positional argument but the checker doesn’t provide one. It will also pass if you remove the *args, **kwargs.

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

Iain Watson
Iain Watson
3,031 Points

return self[0] == self[1]

I am stuck gyz!!!!