#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.