import random from random import uniform from otree.api import ( models, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'PRO' players_per_group = 2 num_rounds = 4 endowment1 = 300 endowment2 = 600 beta = 0.75 r = 2 resultchoices = ['Arttı', 'Azaldı'] kural = 'Orantılılık' instructions_template = 'Pro/instructions.html' num_rounds_to_pay = 1 rounds_to_pay = random.randint(1, num_rounds) # selects 2 periods to pay out of total number of periods # rounds_to_pay.sort() print("rounds to pay PRO:", rounds_to_pay) class Subsession(BaseSubsession): def creating_session(self): self.group_randomly(fixed_id_in_group=True) print(" Matching: ", self.get_group_matrix()) class Group(BaseGroup): total_investment = models.FloatField() total_payoff = models.FloatField() result = models.FloatField() resultStatus = models.StringField() def fark1(self): for p in self.get_players(): if p.id_in_group == 1: for s in p.get_others_in_group(): p.fark = s.in_round(2).investment - s.in_round(1).investment def fark2(self): for p in self.get_players(): if p.id_in_group == 2: for x in p.get_others_in_group(): p.fark = x.in_round(3).investment - x.in_round(1).investment def set_payoffs(self): self.result = random.randint(1, 101) if self.result <= 50: self.resultStatus = 'Arttı' else: self.resultStatus = 'Azaldı' players = self.get_players() for p in players: self.total_investment = sum([p.investment for p in self.get_players()]) if self.result <= 50: p.pyf = p.endowment + Constants.r * p.investment self.total_payoff = (1 + Constants.r) * self.total_investment else: p.pyf = p.endowment + (Constants.beta - 1) * p.investment self.total_payoff = Constants.beta * self.total_investment p.pyf = round(p.pyf, 2) class Player(BasePlayer): endowment = models.FloatField() investment = models.IntegerField(min=0,label='Başlangıç puanınızdan projeye yatırmak istediğiniz tutar') pyf = models.FloatField() num_clicks = models.IntegerField(blank=True) rounds_to_pay = models.IntegerField(initial=Constants.rounds_to_pay) fark = models.IntegerField() def investment_max(self): return self.endowment def role(self): if self.id_in_group == 1: return 'low' if self.id_in_group == 2: return 'high'