#1 by FEDx
Hello, everyone, I need a player to select a card from a set of 21 cards drawn from a standard pack of 54 and win 1€ for each card of the same color as the chosen card in the pack of 21. So far: from otree.api import models class Constants(BaseConstants): num_cards = 21 card_colors = ['red', 'black'] payoff_per_card = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): chosen_card = models.StringField() def calculate_payoff(self): chosen_card = self.chosen_card cards_of_chosen_card = self.participant.vars['cards'].count(chosen_card) self.payoff = cards_of_chosen_card * Constants.payoff_per_card class CardSelectionPage(Page): def vars_for_template(self): deck = Constants.card_colors * Constants.num_cards random.shuffle(deck) self.participant.vars['cards'] = deck[:Constants.num_cards] available_cards = list(set(self.participant.vars['cards'])) return {'available_cards': available_cards} class ResultsPage(Page): def vars_for_template(self): chosen_card = self.player.chosen_card cards_of_chosen_card = self.participant.vars['cards'].count(chosen_card) payoff = cards_of_chosen_card * Constants.payoff_per_card return { 'chosen_card': chosen_card, 'cards_of_chosen_card': cards_of_chosen_card, 'payoff': payoff } def before_next_page(self): self.player.calculate_payoff() The problem is that I received an error [TypeError: 'tuple' object does not support item assignment] How can I fix it?
#2 by Chris_oTree
What line of code does the error message refer to?
#3 by Chris_oTree
Can you show the full traceback
#4 by FEDx
I attached a screenshot. I think the problem is the {card_colors = ['red', 'black']} in the Constants because I created it as a tuple.
#5 by Chris_oTree
It looks to me like a list, but you can be sure by converting it to a list with list() before shuffling. Tuples cannot be shuffled.