from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random import itertools doc = """ This is a Pension Game first introduced by Hammond(1975). The Pension Game is a version of the standard investment game in which the amount sent by player 1 is tripled. It was first proposed by Berg, Dickhaut, and McCabe (1995) . """ class Constants(BaseConstants): name_in_url = 'TPEGexo' players_per_group = 8 num_rounds = 10 instructions_template = 'TPEGexo/instructions.html' table_template = 'TPEGexo/table.html' # Initial amount allocated to players endowment_Decider = c(9) endowment_Receiver = c(1) multiplier = 1 class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: colors = itertools.cycle(['MAVİ', 'KIRMIZI']) for p in self.get_players(): p.color = next(colors) else: for p in self.get_players(): p.color = p.in_round(self.round_number - 1).color self.group_randomly() rol_lst = ['P2', 'P3', 'P4', 'P5', 'P6', 'P7'] for p in self.get_players(): round = self.round_number if self.round_number <= 8 else self.round_number - 8 if p.id_in_subsession == round: p.rol = 'P1' elif p.id_in_subsession == (9 - round): p.rol = 'P8' else: random.shuffle(rol_lst) p.rol = rol_lst.pop(0) for p in self.get_players(): print('P{0}:{1}'.format(p.id_in_subsession, p.rol)) print('---------------') class Group(BaseGroup): sent_2 = models.CurrencyField( min=0, max=Constants.endowment_Decider-2, doc="""Amount sent by P2""", ) expect_2 = models.CurrencyField( min=0, max=Constants.endowment_Decider-2, doc="""Amount expected by P2""", ) sent_3 = models.CurrencyField( min=0, max=Constants.endowment_Decider - 2, doc="""Amount sent by P3""", ) expect_3 = models.CurrencyField( min=0, max=Constants.endowment_Decider-2, doc="""Amount expected by P2""", ) sent_4 = models.CurrencyField( min=0, max=Constants.endowment_Decider - 2, doc="""Amount sent by P4""", ) expect_4 = models.CurrencyField( min=0, max=Constants.endowment_Decider-2, doc="""Amount expected by P2""", ) sent_5 = models.CurrencyField( min=0, max=Constants.endowment_Decider - 2, doc="""Amount sent by P5""", ) expect_5 = models.CurrencyField( min=0, max=Constants.endowment_Decider-2, doc="""Amount expected by P2""", ) sent_6 = models.CurrencyField( min=0, max=Constants.endowment_Decider - 2, doc="""Amount sent by P6""", ) expect_6 = models.CurrencyField( min=0, max=Constants.endowment_Decider-2, doc="""Amount expected by P2""", ) sent_7 = models.CurrencyField( min=0, max=Constants.endowment_Decider - 2, doc="""Amount sent by P7""", ) expect_7 = models.CurrencyField( min=0, max=Constants.endowment_Decider-2, doc="""Amount expected by P2""", ) sent_8 = models.CurrencyField( min=0, max=Constants.endowment_Decider - 2, doc="""Amount sent by P8""", ) def set_payoffs(self): for pl in self.get_players(): if pl.rol == 'P1': pl.payoff = 2 *(Constants.endowment_Receiver + self.sent_2) elif pl.rol == 'P2': pl.payoff = (Constants.endowment_Decider - self.sent_2) *( Constants.endowment_Receiver + self.sent_3) elif pl.rol == 'P3': pl.payoff = (Constants.endowment_Decider - self.sent_3) *( Constants.endowment_Receiver + self.sent_4) elif pl.rol == 'P4': pl.payoff = (Constants.endowment_Decider - self.sent_4) *( Constants.endowment_Receiver + self.sent_5) elif pl.rol == 'P5': pl.payoff = (Constants.endowment_Decider - self.sent_5) *( Constants.endowment_Receiver + self.sent_6) elif pl.rol == 'P6': pl.payoff = (Constants.endowment_Decider - self.sent_6) *( Constants.endowment_Receiver + self.sent_7) elif pl.rol == 'P7': pl.payoff = (Constants.endowment_Decider - self.sent_7) *( Constants.endowment_Receiver + self.sent_8) elif pl.rol == 'P8': pl.payoff = (Constants.endowment_Decider - self.sent_8) *( ( Constants.endowment_Receiver + self.sent_2) + ( Constants.endowment_Receiver + self.sent_3) + ( Constants.endowment_Receiver + self.sent_4) + ( Constants.endowment_Receiver + self.sent_5) + ( Constants.endowment_Receiver + self.sent_6)+ ( Constants.endowment_Receiver + self.sent_7) + ( Constants.endowment_Receiver + self.sent_8)) / 7 class Player(BasePlayer): color = models.StringField() overall_payoff = models.CurrencyField(initial=0) rol = models.StringField(initial=0) gpa = models.StringField(choices= ['0,00 - 0,50', '0,50 - 1,00', '1,00 - 1,50', '1,50 - 2,00', '2,00 - 2,50', '2,50 - 3,00' , '3,00 - 3,50' , '3,50 - 4,00'], widget=widgets.RadioSelectHorizontal, label="Akademik Not Ortalamanız") accept = models.StringField(choices=['Kabul ediyorum.','Kabul etmiyorum'], widget=widgets.RadioSelectHorizontal, label="Gönüllü olarak katıldığım bu deneyde tarafımdan herhangi bir kişisel bilgi istenilmemiştir.") dep = models.StringField(choices=['STEM (Bilim, Teknoloji, Mühendislik ve Matematik)','HASS (Beşeri, Sanat ve Sosyal Bilimler)'], widget=widgets.RadioSelectHorizontal, label="Alan") age = models.StringField(choices=['≤24', '25-29', '30-39', '40-54', '≥55'], widget=widgets.RadioSelectHorizontal,label="Yaş") gen = models.StringField(choices=['Kadın', 'Erkek'], widget=widgets.RadioSelectHorizontal, label="Cinsiyet") edu = models.StringField(choices=['Lisans' , 'Yüksek Lisans' , 'Doktora'], widget=widgets.RadioSelectHorizontal, label="Eğitim") inc = models.StringField(choices= ['500-1000', '1000-2000', '2000-3000', '3000-4000', '4000-5000', '5000+'], widget=widgets.RadioSelectHorizontal, label="Aylık Ortalama Gelir") h_inc = models.StringField(choices= ['500-1000', '1000-2000', '2000-3000', '3000-4000', '4000-5000', '5000+'], widget=widgets.RadioSelectHorizontal, label="Aylık Ortalama Hanehalkı Geliri") env_cons_2 = models.StringField(choices=['Kesinlikle katılmıyorum','Biraz katılmıyorum','Ne katılıyorum, ne de katılmıyorum','Biraz katılıyorum','Kesinlikle katılıyorum'], widget=widgets.RadioSelectHorizontal, label="Kaynaklarımızın daha uzun süre dayanması için herkes ürün tüketimini artırmayı bırakmalıdır.") env_cons_3 = models.StringField(choices=['Kesinlikle katılmıyorum','Biraz katılmıyorum','Ne katılıyorum, ne de katılmıyorum','Biraz katılıyorum','Kesinlikle katılıyorum'], widget=widgets.RadioSelectHorizontal, label="Bu ülke konut geliştirme konusunda(tarım arazileri üzerinde yeni alışveriş merkezi inşaatı, yeni alt bölümler vb.) daha fazla kısıtlamaya ihtiyaç duymaktadır.") env_cons_5 = models.StringField(choices=['Kesinlikle katılmıyorum','Biraz katılmıyorum','Ne katılıyorum, ne de katılmıyorum','Biraz katılıyorum','Kesinlikle katılıyorum'], widget=widgets.RadioSelectHorizontal, label="Aşırı kirlilik üreten şirketlere yönelik tüketici boykot programlarına başladım/katıldım.") env_cons_6 = models.StringField(choices=['Kesinlikle katılmıyorum','Biraz katılmıyorum','Ne katılıyorum, ne de katılmıyorum','Biraz katılıyorum','Kesinlikle katılıyorum'], widget=widgets.RadioSelectHorizontal, label="Kimse bakmazsa çöp dökerim.") env_cons_7 = models.StringField(choices=['Kesinlikle katılmıyorum','Biraz katılmıyorum','Ne katılıyorum, ne de katılmıyorum','Biraz katılıyorum','Kesinlikle katılıyorum'], widget=widgets.RadioSelectHorizontal, label="Bugün çevresel faaliyetlere katılımım, gelecek nesiller için çevrenin korunmasına yardımcı olacaktır.") env_cons_9 = models.StringField(choices=['Kesinlikle katılmıyorum','Biraz katılmıyorum','Ne katılıyorum, ne de katılmıyorum','Biraz katılıyorum','Kesinlikle katılıyorum'], widget=widgets.RadioSelectHorizontal, label="Kirliliğin bitki ve hayvan yaşamına yol açtığı zararı düşündüğümde kızıyorum.") investment_options_1 = models.StringField(choices = ['%10 olasılıkla 8₺ ve %90 olasılıkla 6,4₺','%10 olasılıkla 15,4₺ ve %90 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) investment_options_2 = models.StringField(choices = ['%20 olasılıkla 8₺ ve %80 olasılıkla 6,4₺','%20 olasılıkla 15,4₺ ve %80 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) investment_options_3 = models.StringField(choices = ['%30 olasılıkla 8₺ ve %70 olasılıkla 6,4₺','%30 olasılıkla 15,4₺ ve %70 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) investment_options_4 = models.StringField(choices = ['%40 olasılıkla 8₺ ve %60 olasılıkla 6,4₺','%40 olasılıkla 15,4₺ ve %60 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) investment_options_5 = models.StringField(choices = ['%50 olasılıkla 8₺ ve %50 olasılıkla 6,4₺','%50 olasılıkla 15,4₺ ve %50 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) investment_options_6 = models.StringField(choices = ['%60 olasılıkla 8₺ ve %40 olasılıkla 6,4₺','%60 olasılıkla 15,4₺ ve %40 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) investment_options_7 = models.StringField(choices = ['%70 olasılıkla 8₺ ve %30 olasılıkla 6,4₺','%70 olasılıkla 15,4₺ ve %30 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) investment_options_8 = models.StringField(choices = ['%80 olasılıkla 8₺ ve %20 olasılıkla 6,4₺','%80 olasılıkla 15,4₺ ve %20 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) investment_options_9 = models.StringField(choices = ['%90 olasılıkla 8₺ ve %10 olasılıkla 6,4₺','%90 olasılıkla 15,4₺ ve %10 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) investment_options_10 = models.StringField(choices = ['%100 olasılıkla 8₺ ve %0 olasılıkla 6,4₺','%100 olasılıkla 15,4₺ ve %0 olasılıkla 0,4₺'], widget=widgets.RadioSelectHorizontal,label=" " ) fate = models.StringField(choices=['Kesinlikle katılmıyorum','Biraz katılmıyorum','Ne katılıyorum, ne de katılmıyorum','Biraz katılıyorum','Kesinlikle katılıyorum'], widget=widgets.RadioSelectHorizontal, label="Kadere inanıyorum ve herşey tamamen özgür irade değil.") believe = models.StringField(choices=['Kesinlikle katılmıyorum','Biraz katılmıyorum','Ne katılıyorum, ne de katılmıyorum','Biraz katılıyorum','Kesinlikle katılıyorum'], widget=widgets.RadioSelectHorizontal, label="İbadethanelerdeki hizmetlere/törenlere katılmak dışında yalnızken dua etmiyorum.")