from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Your name here' doc = """ Informative advertisement """ class Constants(BaseConstants): name_in_url = 'informative' players_per_group = None num_rounds = 20 juice_names = [ 'Названия соков', 'Яблочный фермерский сок в красной упаковке', 'Яблочный обычный сок в красной упаковке', 'Яблочный фермерский сок в синей упаковке', 'Яблочный обычный сок в синей упаковке', 'Яблочный фермерский сок в зеленой упаковке', 'Яблочный обычный сок в зеленой упаковке', 'Апельсиновый фермерский сок в красной упаковке', 'Апельсиновый обычный сок в красной упаковке', 'Апельсиновый фермерский сок в синей упаковке', 'Апельсиновый обычный сок в синей упаковке', 'Апельсиновый фермерский сок в зеленой упаковке', 'Апельсиновый обычный сок в зеленой упаковке', 'Мультифруктовый фермерский сок в красной упаковке', 'Мультифруктовый обычный сок в красной упаковке', 'Мультифруктовый фермерский сок в синей упаковке', 'Мультифруктовый обычный сок в синей упаковке', 'Мультифруктовый фермерский сок в зеленой упаковке', 'Мультифруктовый обычный сок в зеленой упаковке'] form_names = [ 'Variable names for juices', 'alt_1_bought', 'alt_2_bought','alt_3_bought','alt_4_bought','alt_5_bought', 'alt_6_bought', 'alt_7_bought', 'alt_8_bought', 'alt_9_bought', 'alt_10_bought', 'alt_11_bought', 'alt_12_bought', 'alt_13_bought', 'alt_14_bought', 'alt_15_bought', 'alt_16_bought', 'alt_17_bought', 'alt_18_bought' ] class Subsession(BaseSubsession): alt_1_apple_red_farmer = models.BooleanField(initial=False) alt_2_apple_red_ordinary = models.BooleanField(initial=False) alt_3_apple_blue_farmer = models.BooleanField(initial=False) alt_4_apple_blue_ordinary = models.BooleanField(initial=False) alt_5_apple_green_farmer = models.BooleanField(initial=False) alt_6_apple_green_ordinary = models.BooleanField(initial=False) alt_7_orange_red_farmer = models.BooleanField(initial=False) alt_8_orange_red_ordinary = models.BooleanField(initial=False) alt_9_orange_blue_farmer = models.BooleanField(initial=False) alt_10_orange_blue_ordinary = models.BooleanField(initial=False) alt_11_orange_green_farmer = models.BooleanField(initial=False) alt_12_orange_green_ordinary = models.BooleanField(initial=False) alt_13_multi_red_farmer = models.BooleanField(initial=False) alt_14_multi_red_ordinary = models.BooleanField(initial=False) alt_15_multi_blue_farmer = models.BooleanField(initial=False) alt_16_multi_blue_ordinary = models.BooleanField(initial=False) alt_17_multi_green_farmer = models.BooleanField(initial=False) alt_18_multi_green_ordinary = models.BooleanField(initial=False) alt_1_price = models.IntegerField(initial=0) alt_2_price = models.IntegerField(initial=0) alt_3_price = models.IntegerField(initial=0) alt_4_price = models.IntegerField(initial=0) alt_5_price = models.IntegerField(initial=0) alt_6_price = models.IntegerField(initial=0) alt_7_price = models.IntegerField(initial=0) alt_8_price = models.IntegerField(initial=0) alt_9_price = models.IntegerField(initial=0) alt_10_price = models.IntegerField(initial=0) alt_11_price = models.IntegerField(initial=0) alt_12_price = models.IntegerField(initial=0) alt_13_price = models.IntegerField(initial=0) alt_14_price = models.IntegerField(initial=0) alt_15_price = models.IntegerField(initial=0) alt_16_price = models.IntegerField(initial=0) alt_17_price = models.IntegerField(initial=0) alt_18_price = models.IntegerField(initial=0) alt_1_advert = models.BooleanField(initial=False) alt_2_advert = models.BooleanField(initial=False) alt_3_advert = models.BooleanField(initial=False) alt_4_advert = models.BooleanField(initial=False) alt_5_advert = models.BooleanField(initial=False) alt_6_advert = models.BooleanField(initial=False) alt_7_advert = models.BooleanField(initial=False) alt_8_advert = models.BooleanField(initial=False) alt_9_advert = models.BooleanField(initial=False) alt_10_advert = models.BooleanField(initial=False) alt_11_advert = models.BooleanField(initial=False) alt_12_advert = models.BooleanField(initial=False) alt_13_advert = models.BooleanField(initial=False) alt_14_advert = models.BooleanField(initial=False) alt_15_advert = models.BooleanField(initial=False) alt_16_advert = models.BooleanField(initial=False) alt_17_advert = models.BooleanField(initial=False) alt_18_advert = models.BooleanField(initial=False) information_cost = models.IntegerField(initial=0) def creating_session(self): playrs = self.get_players() if self.round_number == 1: paying_round = random.randint(1, Constants.num_rounds) self.session.vars['paying_round'] = paying_round test_list = range(1,18) on_market = random.sample(test_list, 10) to_advertise = random.sample(on_market, 5) print(self.round_number) print(on_market) print(to_advertise) self.information_cost = random.randint(5,15) if 1 in on_market: self.alt_1_apple_red_farmer = True self.alt_1_price = random.randint(60,80) if 2 in on_market: self.alt_2_apple_red_ordinary = True self.alt_2_price = random.randint(60, 80) if 3 in on_market: self.alt_3_apple_blue_farmer = True self.alt_3_price = random.randint(60, 80) if 4 in on_market: self.alt_4_apple_blue_ordinary = True self.alt_4_price = random.randint(60, 80) if 5 in on_market: self.alt_5_apple_green_farmer = True self.alt_5_price = random.randint(60, 80) if 6 in on_market: self.alt_6_apple_green_ordinary = True self.alt_6_price = random.randint(60, 80) if 7 in on_market: self.alt_7_orange_red_farmer = True self.alt_7_price = random.randint(60, 80) if 8 in on_market: self.alt_8_orange_red_ordinary = True self.alt_8_price = random.randint(60, 80) if 9 in on_market: self.alt_9_orange_blue_farmer = True self.alt_9_price = random.randint(60, 80) if 10 in on_market: self.alt_10_orange_blue_ordinary = True self.alt_10_price = random.randint(60, 80) if 11 in on_market: self.alt_11_orange_green_farmer = True self.alt_11_price = random.randint(60, 80) if 12 in on_market: self.alt_12_orange_green_ordinary = True self.alt_12_price = random.randint(60, 80) if 13 in on_market: self.alt_13_multi_red_farmer = True self.alt_13_price = random.randint(60, 80) if 14 in on_market: self.alt_14_multi_red_ordinary = True self.alt_14_price = random.randint(60, 80) if 15 in on_market: self.alt_15_multi_blue_farmer = True self.alt_15_price = random.randint(60, 80) if 16 in on_market: self.alt_16_multi_blue_ordinary = True self.alt_16_price = random.randint(60, 80) if 17 in on_market: self.alt_17_multi_green_farmer = True self.alt_17_price = random.randint(60, 80) if 18 in on_market: self.alt_18_multi_green_ordinary = True self.alt_18_price = random.randint(60, 80) if 1 in to_advertise: self.alt_1_advert = True if 2 in to_advertise: self.alt_2_advert = True if 3 in to_advertise: self.alt_3_advert = True if 4 in to_advertise: self.alt_4_advert = True if 5 in to_advertise: self.alt_5_advert = True if 6 in to_advertise: self.alt_6_advert = True if 7 in to_advertise: self.alt_7_advert = True if 8 in to_advertise: self.alt_8_advert = True if 9 in to_advertise: self.alt_9_advert = True if 10 in to_advertise: self.alt_10_advert = True if 11 in to_advertise: self.alt_11_advert = True if 12 in to_advertise: self.alt_12_advert = True if 13 in to_advertise: self.alt_13_advert = True if 14 in to_advertise: self.alt_14_advert = True if 15 in to_advertise: self.alt_15_advert = True if 16 in to_advertise: self.alt_16_advert = True if 17 in to_advertise: self.alt_17_advert = True if 18 in to_advertise: self.alt_18_advert = True for p in playrs: p.initial_deposit = random.randint(80, 160) p.start_alternatives = random.randint(1, 3) learned = random.sample(on_market, p.start_alternatives) if 1 in learned: p.alt_1_apple_red_farmer = True if 2 in learned: p.alt_2_apple_red_ordinary = True if 3 in learned: p.alt_3_apple_blue_farmer = True if 4 in learned: p.alt_4_apple_blue_ordinary = True if 5 in learned: p.alt_5_apple_green_farmer = True if 6 in learned: p.alt_6_apple_green_ordinary = True if 7 in learned: p.alt_7_orange_red_farmer = True if 8 in learned: p.alt_8_orange_red_ordinary = True if 9 in learned: p.alt_9_orange_blue_farmer = True if 10 in learned: p.alt_10_orange_blue_ordinary = True if 11 in learned: p.alt_11_orange_green_farmer = True if 12 in learned: p.alt_12_orange_green_ordinary = True if 13 in learned: p.alt_13_multi_red_farmer = True if 14 in learned: p.alt_14_multi_red_ordinary = True if 15 in learned: p.alt_15_multi_blue_farmer = True if 16 in learned: p.alt_16_multi_blue_ordinary = True if 17 in learned: p.alt_17_multi_green_farmer = True if 18 in learned: p.alt_18_multi_green_ordinary = True class Group(BaseGroup): pass class Player(BasePlayer): start_alternatives = models.IntegerField(initial=1) requested_alternatives = models.IntegerField(initial=0, verbose_name='Введите неотрицательное число') initial_deposit = models.IntegerField(initial=100) information_costs = models.IntegerField(min=0, max=10) buyer_deposit = models.IntegerField(initial=100) purchase_costs = models.IntegerField(initial=0) remainder = models.IntegerField(initial=100) alt_1_apple_red_farmer = models.BooleanField(initial=False) alt_2_apple_red_ordinary = models.BooleanField(initial=False) alt_3_apple_blue_farmer = models.BooleanField(initial=False) alt_4_apple_blue_ordinary = models.BooleanField(initial=False) alt_5_apple_green_farmer = models.BooleanField(initial=False) alt_6_apple_green_ordinary = models.BooleanField(initial=False) alt_7_orange_red_farmer = models.BooleanField(initial=False) alt_8_orange_red_ordinary = models.BooleanField(initial=False) alt_9_orange_blue_farmer = models.BooleanField(initial=False) alt_10_orange_blue_ordinary = models.BooleanField(initial=False) alt_11_orange_green_farmer = models.BooleanField(initial=False) alt_12_orange_green_ordinary = models.BooleanField(initial=False) alt_13_multi_red_farmer = models.BooleanField(initial=False) alt_14_multi_red_ordinary = models.BooleanField(initial=False) alt_15_multi_blue_farmer = models.BooleanField(initial=False) alt_16_multi_blue_ordinary = models.BooleanField(initial=False) alt_17_multi_green_farmer = models.BooleanField(initial=False) alt_18_multi_green_ordinary = models.BooleanField(initial=False) alt_1_bought = models.IntegerField( initial=0, verbose_name="Яблочный фермерский сок в красной упаковке" ) alt_2_bought = models.IntegerField( initial=0, verbose_name="Обычный яблочный сок в красной упаковке" ) alt_3_bought = models.IntegerField( initial=0, verbose_name="Яблочный фермерский сок в синей упаковке" ) alt_4_bought = models.IntegerField( initial=0, verbose_name="Обычный яблочный сок в синей упаковке" ) alt_5_bought = models.IntegerField( initial=0, verbose_name="Яблочный фермерский сок в зеленой упаковке" ) alt_6_bought = models.IntegerField( initial=0, verbose_name="Обычный яблочный сок в зеленой упаковке" ) alt_7_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[7]) alt_8_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[8]) alt_9_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[9]) alt_10_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[10]) alt_11_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[11]) alt_12_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[12]) alt_13_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[13]) alt_14_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[14]) alt_15_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[15]) alt_16_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[16]) alt_17_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[17]) alt_18_bought = models.IntegerField(initial=0, verbose_name=Constants.juice_names[18]) phone_number = models.BigIntegerField( min = 9010000000, max = 9999999999, verbose_name="Введите в 10-значном формате без пробелов и внутренних символов (например, 9157654321)" ) room_group = models.CharField( choices=['113', '402', 'Еще где-то на просторах МШЭ', 'Я участвую удаленно'], verbose_name='Номер кабинета') student_group = models.CharField( choices=['401', '402', '403', '404'], verbose_name='Ваша группа') j_preferences = models.IntegerField( choices=[ [123, 'Яблоко>Апельсин>Мультифрукт'], [231, 'Апельсин>Мультифрукт>Яблоко'], [312, 'Мультифрукт>Яблоко>Апельсин'], [213, 'Апельсин>Яблоко>Мультифрукт'], [132, 'Яблоко>Мультифрукт>Апельсин'], [321, 'Мультифрукт>Апельсин>Яблоко'] ], verbose_name='Расставьте соки в соответствии со своими предпочтениями', widget=widgets.RadioSelect) c_preferences = models.IntegerField( choices=[ [123, 'Синий>Красный>Зеленый'], [231, 'Красный>Зеленый>Синий'], [312, 'Зеленый>Синий>Красный'], [213, 'Красный>Синий>Зеленый'], [132, 'Синий>Зеленый>Красный'], [321, 'Зеленый>Красный>Синий'] ], verbose_name='Расставьте цвета в соответствии со своими предпочтениями', widget=widgets.RadioSelect) loves_farmer = models.BooleanField( verbose_name='Любите ли Вы фермерские продукты?', widget=widgets.RadioSelect )