from otree.api import * import csv doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'HMM' players_per_group = 3 num_rounds = 2 with open('HMM/decode.csv') as f: questions = list(csv.DictReader(f)) class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): num_correct = models.IntegerField(initial=0) num_incorrect = models.IntegerField(initial=0) attempted = models.IntegerField(initial=0) digit0 = models.StringField() digit1 = models.StringField() digit2 = models.StringField() digit3 = models.StringField() digit4 = models.StringField() digit5 = models.StringField() digit6 = models.StringField() digit7 = models.StringField() digit8 = models.StringField() digit9 = models.StringField() char0 = models.StringField() char1 = models.StringField() char2 = models.StringField() char3 = models.StringField() char4 = models.StringField() char5 = models.StringField() char6 = models.StringField() char7 = models.StringField() char8 = models.StringField() char9 = models.StringField() solution = models.StringField() coded_word = models.StringField() target = models.StringField() #FUNCTIONS def creating_session(subsession: Subsession): for p in subsession.get_players(): import random target = random.randrange(0, 100) p.target = str(target) charset = tuple("ABCDEFGHIJKLMNOPQRSTUVWXYZ") digitset = tuple('0123456789') word_length = 3 chars = random.sample(charset, len(digitset)) digits = random.sample(digitset, len(digitset)) lookup = dict(zip(digits, chars)) p.coded_word = ''.join(random.sample(digits, word_length)) p.solution = ''.join(lookup[digits] for digits in p.coded_word) print( 'characters:', chars, 'digits:', digits, 'coded_word:', p.coded_word, 'solution:', p.solution) p.digit0 = digits[0] p.digit1 = digits[1] p.digit2 = digits[2] p.digit3 = digits[3] p.digit4 = digits[4] p.digit5 = digits[5] p.digit6 = digits[6] p.digit7 = digits[7] p.digit8 = digits[8] p.digit9 = digits[9] p.char0 = chars[0] p.char1 = chars[1] p.char2 = chars[2] p.char3 = chars[3] p.char4 = chars[4] p.char5 = chars[5] p.char6 = chars[6] p.char7 = chars[7] p.char8 = chars[8] p.char9 = chars[9] # PAGES class Page1(Page): def is_displayed(player): return player.round_number == 1 class Page2(Page): def is_displayed(player): return player.round_number == 1 class Page3(Page): def is_displayed(player): return player.round_number == 1 class Page4(Page): def is_displayed(player): return player.round_number == 1 class Slider(Page): timeout_seconds = 180 def is_displayed(player): return player.round_number == 1 def live_method(player, data): print(data, player.target) if data == player.target: player.num_correct += 1 else: player.num_incorrect += 1 player.attempted = player.num_correct + player.num_incorrect import random target = random.randrange(0,100) player.target = str(target) print('number_correct:', player.num_correct) print('number_incorrect:', player.num_incorrect) print('number_attempted:', player.attempted) msg = { 'correct': player.num_correct, 'target': player.target, } return {player.id_in_group: msg} class Decode(Page): timeout_seconds = 180 def is_displayed(player): return player.round_number == 2 def live_method(player, data): print('response:', data) if data == player.coded_word: player.num_correct += 1 else: player.num_incorrect += 1 player.attempted = player.num_correct + player.num_incorrect print('number_correct:', player.num_correct) print('number_incorrect:', player.num_incorrect) print('number_attempted:', player.attempted) import random charset = tuple("ABCDEFGHIJKLMNOPQRSTUVWXYZ") digitset = tuple('0123456789') word_length = 3 chars = random.sample(charset, len(digitset)) digits = random.sample(digitset, len(digitset)) lookup = dict(zip(digits, chars)) player.coded_word = ''.join(random.sample(digits, word_length)) player.solution = ''.join(lookup[digits] for digits in player.coded_word) print(chars, digits, player.coded_word, player.solution, lookup) player.digit0 = digits[0] player.digit1 = digits[1] player.digit2 = digits[2] player.digit3 = digits[3] player.digit4 = digits[4] player.digit5 = digits[5] player.digit6 = digits[6] player.digit7 = digits[7] player.digit8 = digits[8] player.digit9 = digits[9] player.char0 = chars[0] player.char1 = chars[1] player.char2 = chars[2] player.char3 = chars[3] player.char4 = chars[4] player.char5 = chars[5] player.char6 = chars[6] player.char7 = chars[7] player.char8 = chars[8] player.char9 = chars[9] msg = { 'digit0': player.digit0, 'digit1': player.digit1, 'digit2': player.digit2, 'digit3': player.digit3, 'digit4': player.digit4, 'digit5': player.digit5, 'digit6': player.digit6, 'digit7': player.digit7, 'digit8': player.digit8, 'digit9': player.digit9, 'char0': player.char0, 'char1': player.char1, 'char2': player.char2, 'char3': player.char3, 'char4': player.char4, 'char5': player.char5, 'char6': player.char6, 'char7': player.char7, 'char8': player.char8, 'char9': player.char9, 'solution': player.solution, 'correct': player.num_correct } return {player.id_in_group: msg} print('answer:', player.coded_word) class ResultsWaitPage(WaitPage): pass class Results(Page): pass page_sequence = [Page1, Page2, Page3, Page4, Slider, Decode]