from otree.api import * c = cu doc = 'bez instrukcji, 2 obrazki' class Constants(BaseConstants): name_in_url = 'Obrazki_testowe' players_per_group = 3 num_rounds = 1 podzial = 2 showupfee = 15 class Subsession(BaseSubsession): pass def przydziel(group): for p in group.get_players(): p.Kscore_calculate() for p in group.get_players(): p.Rank_calculate() for p in group.get_players(): if p.Rank > Constants.podzial: p.participant.vars['Kategoria'] = 2 else: p.participant.vars['Kategoria'] = 1 def bonusy(group): for p in group.get_players(): p.Zadanie1_calculate() for p in group.get_players(): p.Zadanie2_calculate() group.Poprawne1= sum([p.Zadanie1 for p in group.get_players()]) group.Poprawne2= sum([p.Zadanie2 for p in group.get_players()]) group.Proporcja1= group.Poprawne1/Constants.podzial group.Proporcja2= group.Poprawne2/(Constants.players_per_group-Constants.podzial) for p in group.get_players(): if p.kategoria==1: p.participant.vars['Bonus2']=0 if group.Proporcja1>group.Proporcja2: p.participant.vars['Bonus2']=5 if group.Proporcja1>0.5: p.participant.vars['Bonus1']=5 else: if group.Proporcja2>group.Proporcja1: p.participant.vars['Bonus2']=5 if group.Proporcja2>0.5: p.participant.vars['Bonus1']=5 class Group(BaseGroup): Proporcja1 = models.FloatField() Proporcja2 = models.FloatField() Poprawne1 = models.IntegerField() Poprawne2 = models.IntegerField() przydziel = przydziel bonusy = bonusy def Kscore_calculate(player): import random player.Kscore=player.pref1+player.pref2+player.pref3+random.random() def Zadanie1_calculate(player): participant = player.participant if participant.vars['Kategoria']==1: player.Zadanie1=player.pref7 else: player.Zadanie1=0 def Zadanie2_calculate(player): participant = player.participant if participant.vars['Kategoria']==2: player.Zadanie2=player.pref7 else: player.Zadanie2=0 def Rank_calculate(player): group = player.group player.Rank = sum (1 for p in player.get_others_in_group() if player.Kscore > p.Kscore) + 1 class Player(BasePlayer): pref1 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref2 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref3 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) Kscore = models.FloatField() Rank = models.IntegerField() Zadanie1 = models.IntegerField() Zadanie2 = models.IntegerField() pref7 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref4 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref5 = models.IntegerField(choices=[[0, 'po lewej'], [6, 'po prawej']], widget=widgets.RadioSelectHorizontal) pref6 = models.IntegerField(choices=[[0, 'po lewej'], [1, 'po pawej']], widget=widgets.RadioSelectHorizontal) Kscore_calculate = Kscore_calculate Zadanie1_calculate = Zadanie1_calculate Zadanie2_calculate = Zadanie2_calculate Rank_calculate = Rank_calculate class Consent(Page): form_model = 'player' class Instrukcje1(Page): form_model = 'player' @staticmethod def vars_for_template(player): group = player.group return dict( podzial2= Constants.players_per_group - Constants.podzial, ) class Obrazki1(Page): form_model = 'player' form_fields = ['pref1'] class Obrazki2(Page): form_model = 'player' form_fields = ['pref2'] class Obrazki3(Page): form_model = 'player' form_fields = ['pref3'] class PrzydzialWait(WaitPage): after_all_players_arrive = przydziel body_text = 'Proszę czekać na pozostałych uczestników' class Przydzial_testowe(Page): form_model = 'player' class Zadanie(Page): form_model = 'player' form_fields = ['pref7'] class Bonusy_Wait(WaitPage): after_all_players_arrive = bonusy body_text = 'Proszę czekać na pozostałych uczestników' class Bonusy_testowa(Page): form_model = 'player' page_sequence = [Consent, Instrukcje1, Obrazki1, Obrazki2, Obrazki3, PrzydzialWait, Przydzial_testowe, Zadanie, Bonusy_Wait, Bonusy_testowa]