from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random doc = """ author: wb """ class Constants(BaseConstants): name_in_url = 'part4_beautycontest_quiz' players_per_group = None num_rounds = 1 instructions_template = 'part4_beautycontest_quiz/instructions.html' instructions2_template = 'part4_beautycontest_quiz/instructions2.html' numparticipant = 5 taux = 0.005 # 1000 coins = $5 bonus = 500 tc=[10,20,55,39,20,15,50,50,28,17,10,66,36,10,45,23,30,40,30,18,42,25,1,1,2,20,1,1,5,10,30,19,25,25,10,13,8,22,35,25,3,20,75,33,20,18,25,20,35,22,1,7,10,29,30,19,1,36,21,27,18,15,25,33,6,40,17,21,1,1,10,10,33,66,62,10,1,60,1,25,20,1,33,20,1,22,1,20,20,12,22,15,30,40,33,22,28] t3 = random.sample(tc, 5) td=[3,10,45,33,1,12,28,14,10,57,15,50,40,26,22,15,5,12,1,5,6,22,11,25,10,10,9,18,30,2,20,34,20,22,10,25,10,1,10,5,35,25,11,1,37,18,20,13,15,20,7,25,25,12,1,1,1,33,12,1,1,20,15,1,14,1,18,20,1,18,12,17,30,22,30] t4=random.sample(td, 5) surepaybc = 700 #750 class Subsession(BaseSubsession): pass class Group(BaseGroup): group_size= models.FloatField() def set_payoffs(self): self.group_size = sum([p.unite for p in self.get_players()]) for p in self.get_players(): p.number_j1 = Constants.t3[0] p.number_j2 = Constants.t3[1] p.number_j3 = Constants.t3[2] p.number_j4 = Constants.t3[3] p.number_j5 = Constants.t3[4] p.average_number = round((p.number_j1 + p.number_j2 + p.number_j3 + p.number_j4 + p.number_j5) / 5, 1) p.target = round(p.average_number * 2/3) p.distance = abs(p.number1 - p.target) p.gain_task3 = round(1000 - (20*p.distance),1 ) def set_payoffs2(self): self.group_size = sum([p.unite for p in self.get_players()]) for p in self.get_players(): if p.decision_t4 == 1 : p.number_j1_v2 = Constants.t4[0] p.number_j2_v2 = Constants.t4[1] p.number_j3_v2 = Constants.t4[2] p.number_j4_v2 = Constants.t4[3] p.number_j5_v2 = Constants.t4[4] p.average_number_v2 = round((p.number_j1_v2 + p.number_j2_v2 + p.number_j3_v2 + p.number_j4_v2 + p.number_j5_v2) / 5, 1) p.target_v2 = round(p.average_number_v2 * 2 / 3) p.distance_v2 = abs(p.number2 - p.target_v2) p.gain_task4 = round(1000 - (20 * p.distance_v2), 1) class Player(BasePlayer): treatment = models.IntegerField( label="", blank=True ) unite = models.IntegerField() qc_2_a = models.IntegerField( blank=False, label='', ) survey1bis = models.IntegerField( choices=[ [0, '0'], [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7'], [8, '8'], [9, '9'], [10, '10'], ], label="", widget=widgets.RadioSelectHorizontal, blank=False ) number1 = models.IntegerField( min=1, max=100, blank=False, label='', ) number2 = models.IntegerField( min=1, max=100, blank=False, label='', ) decision_t4 = models.IntegerField( choices=[ [0, 'Receive a guaranteed payoff of 700 coins'], [1, 'Play again'], ], label="", widget=widgets.RadioSelect, blank=False ) number_j1 = models.FloatField() number_j2 = models.FloatField() number_j3 = models.FloatField() number_j4 = models.FloatField() number_j5 = models.FloatField() average_number = models.FloatField() target = models.FloatField() distance = models.FloatField() gain_task3 = models.FloatField() # # number_j1_v2 = models.FloatField() number_j2_v2 = models.FloatField() number_j3_v2 = models.FloatField() number_j4_v2 = models.FloatField() number_j5_v2 = models.FloatField() average_number_v2 = models.FloatField() target_v2 = models.FloatField() distance_v2 = models.FloatField() gain_task4 = models.FloatField() tirageausort = models.IntegerField() gain_task1_f = models.FloatField() gain_task2_f = models.FloatField() gain_task3_f = models.FloatField() gain_task4_f = models.FloatField() gain_final = models.FloatField() gain_final_eur = models.FloatField() num_post = models.FloatField() gain_final_eur_bonus = models.FloatField()