from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random doc = """ In a lemon market of Akerlof (1970) , 2 buyers and 1 seller interact for 3 periods. The implementation is based on Holt (1999) . """ class Constants(BaseConstants): test_3 = random.randint(1, 6) name_in_url = 'graph_three' players_per_group = None #original: num_rounds = 3 num_rounds=1 instructions_template = 'lemon_market/Instructions.html' initial_endowment = c(50) buyer_extra_value = c(5) class Subsession(BaseSubsession): # p.p1=random.randint(1,20) #series=[] # series.append({ # 'name': 'Test 1', # 'data': [p.p1] # }) #return { # 'highcharts_series': series, # 'round_numbers': list(range(1, Constants.num_rounds + 5)) ## The list of numbers generated using the "list(range(min,max))" command will be ## min to max-1 I think, since list, by itself, starts with 0 as the beginning of the index, ## But I think if it's used in a graph, the categories at the bottom will not exceed ## the data #} def vars_for_admin_report(self): #group = self.get_groups()[0] #series.append({ # 'name': 'Transaction Price', # 'data': transaction_prices}) for p in self.get_players(): #def creating_session(self): #r1=random.randint(1,5) #p1=10+r1 series = [] p1=c(5) r2 = random.randint(2, 7) p2 = c(20) + r2 r3 = random.randint(3, 9) p3 = 30 + r3 r4 = random.randint(4, 11) p4 = 40 + r4 rr1 = random.randint(25, 30)\ #p1=10 #p2=20 p3=30 p4=50 # for p in self.get_players(self): # p.rr1=random.randint(25,30) series.append({ 'name': 'Test 1', 'data': [p.price1,p.price2,p.price3,p.price4] }) return { 'highcharts_series': series, 'round_numbers': list(range(1, Constants.num_rounds + 5)), 'nonsense': ['fuck','this','shit','bitch'] ## The list of numbers generated using the "list(range(min,max))" command will be ## min to max-1 I think, since list, by itself, starts with 0 as the beginning of the index, ## But I think if it's used in a graph, the categories at the bottom will not exceed ## the data } def creating_session(self): for p in self.get_players(): # p.price1=p1 p.rr1 = random.randint(1, 2) p.r1 = random.randint(1, 2) if p.rr1 == 1: if p.r1 == 1: p.c1 = 1 if p.r1 == 2: p.c1 = 2 if p.rr1 == 2: if p.r1 == 1: p.c1 = 3 if p.r1 == 2: p.c1 = 4 p.c2=69 p.price1=random.randint(10,30) p.price2=random.randint(30,60) p.price3=random.randint(60,90) p.price4=random.randint(90,120) class Group(BaseGroup): def set_payoff(self): for p in self.get_players(): p.payoff = Constants.initial_endowment #p.p1=self.subsession.p1 class Player(BasePlayer): price1 = models.IntegerField() price2 = models.IntegerField() price3 = models.IntegerField() price4 = models.IntegerField() r1 = models.IntegerField() rr1 = models.IntegerField() c1 = models.IntegerField() c2=models.IntegerField() seller_proposed_price = models.CurrencyField( min=0, max=Constants.initial_endowment ) #works: test1=models.FloatField(initial=1000) #test1=models.IntegerField(initial=random.randint(25,999)) #def test1(self): # return "test" #test_1=models.FloatField(initial=500) #test_3=random.randint(1, 6) #test_2=self.rr1 def role(self): if self.id_in_group == Constants.players_per_group: return 'buyer' return 'seller {}'.format(self.id_in_group)