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)