from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ import random import numpy as np class Constants(BaseConstants): name_in_url = 'A1' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): # p.private_value = 0 p.value_item = random.randint(16, 99) class Group(BaseGroup): def bid_all(self): players = self.get_players() bids = [p.bid for p in players] return bids def bid_max1(self): players = self.get_players() bids = [p.bid for p in players] return max(bids) def bid_max2(self): players = self.get_players() bids = [p.bid for p in players] b=max(bids) bids.remove(b) return max(bids) def item_all(self): players = self.get_players() items = [p.value_item for p in players] return items def N(self): players = self.get_players() b=len(players) return b def N(self): players = self.get_players() b=len(players) return b def optimal_bid_all(self): players = self.get_players() oo = [p.optimal_bid() for p in players] return oo def marks_all(self): players = self.get_players() # m = len(players) # mm = np.arange(m) # for i in m(): # mm[i]= self.get_player_by_id(i).marks() mmm = [p.marks() for p in players] return mmm def number_all(self): players = self.get_players() nnn = [p.number for p in players] return nnn class Player(BasePlayer): bid = models.IntegerField(label='Ваша ставка?', min=10, max=99) number = models.IntegerField(label='Ваш номер?', min=11, max=99) value_item = models.IntegerField() Profit = models.IntegerField() def optimal_bid(self): # oo=min(round(self.value_item*((self.group.N()-1)/self.group.N()),0), self.value-1) # oo = round(self.value_item * ((self.group.N() - 1) / self.group.N()), 0) oo = self.value_item * ((self.group.N() - 1) / self.group.N()) ooo= min(int(oo), self.value_item-1) return ooo def dif(self): dd=abs(self.bid-self.optimal_bid) return dd def marks(self): mmm=0 if (self.bid >self.value_item) or (self.bid=self.optimal_bid()+self.optimal_bid()-self.value_item) and (self.bid<=(self.value_item+self.optimal_bid())/2): mmm='1' else: mmm='0' return mmm