from otree.api import * from otree.api import BasePlayer doc = """ This app is for test using psychology equipment """ class C(BaseConstants): NAME_IN_URL = 'Part_1' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 INSTRUCTIONS_TEMPLATE = 'Part_1/Instructions.html' PART1_CONTEXT_TEMPLATE = 'Part_1/Part1_context.html' PART2_1401_profile_TEMPLATE = 'Part_1/1401_profile.html' PART2_1501_profile_TEMPLATE = 'Part_1/1501_profile.html' PART2_1601_profile_TEMPLATE = 'Part_1/1601_profile.html' PART2_1701_profile_TEMPLATE = 'Part_1/1701_profile.html' PART3_CONTEXT_TEMPLATE = 'Part_1/Part3_context.html' PART1_Diagram = 'Part_1/Part1_Question_5.html' ENDOWMENT = cu(1000) class Subsession(BaseSubsession): pass class Group(BaseGroup): pass def make_field(label): return models.IntegerField( label=label, choices = [ [1, "1"], [2, "2"], [3, "3"], [4, "4"], [5, "5"], [6, "6"], [7, "7"] ], widget = widgets.RadioSelectHorizontal ) def make_field1(label): return models.IntegerField( label=label, choices = [ [1, "1"], [2, "2"], [3, "3"], [4, "4"], [5, "5"], ], widget = widgets.RadioSelectHorizontal ) def make_field2(label): return models.IntegerField( label = label, choices = [ [1, "1"], [2, "2"], ], widget = widgets.RadioSelectHorizontal ) class Player(BasePlayer) : # -----------------연구 동의/투자경험-------------------- agreement = models.BooleanField( choices= [[True, "예"], [False, "아니오"]], label= "본 연구에 참여하시는 것에 동의하십니까?", widget=widgets.RadioSelectHorizontal, ) experience = models.BooleanField( choices= [[True, "예"], [False, "아니오"]], label = "투자성 상품(펀드, 주식, 채권 등)이나 가상자산(비트코인, 이더리움 등)에 투자해본 경험이 있습니까?", widget=widgets.RadioSelectHorizontal, ) # -----------------개인 태도/선호(Big-Five)-------------------- 창의 = make_field1("창의적인 사람이다.") 독창적 = make_field1("독창적이며 새로운 생각을 잘 떠올리는 사람이다.") 상상력 = make_field1("활발한 상상력을 가진 사람이다.") 완벽 = make_field1("일을 완벽하게 하는 사람이다.") 능률 = make_field1("일을 능률적으로 하는 사람이다.") 믿음 = make_field1("믿을만하게 일을 하는 사람이다.") 침울 = make_field1("쉽게 침울해 지는 사람이다.") 우울 = make_field1("우울한 사람이다.") 걱정 = make_field1("걱정을 많이 하는 사람이다.") 조용 = make_field1("조용한 사람이다.") 수다 = make_field1("수다스러운 사람이다.") 외향 = make_field1("외향적이고 사교적인 사람이다.") 친절 = make_field1("사려깊고 거의 모든 사람에게 친절한 사람이다.") 이타 = make_field1("다른 사람을 잘 도와주며 이타적인 사람이다.") 용서 = make_field1("용서를 잘 하는 사람이다.") # -----------------개인 태도/선호(도덕성)-------------------- 나쁜 = make_field1("나쁜 짓이라고 생각하는 것은 하지 않는 사람이다.") 옳은 = make_field1("옳다고 생각하면 실천에 옮기는 사람이다.") 잘못 = make_field1("잘못했을 때 죄의식을 느끼는 사람이다.") 비난 = make_field1("잘못한 일에 대한 비난을 받아들이고 남의 탓 하지 않는 사람이다.") 승패 = make_field1("승패와 상관없이 규칙을 지키는 것이 중요한 사람이다.") 타협 = make_field1("타인의 요구를 들어주기 위해 기꺼이 타협하는 사람이다.") 경청 = make_field1("판단하기 전 모든 사람의 의견을 경청하는 사람이다.") 공평 = make_field1("가진 것을 나눌 때 공평하게 나누는 사람이다.") 고통 = make_field1("남의 고통에 같이 마음 아파하는 사람이다.") 좋은일 = make_field1("남에게 좋은 일이 생기면 같이 즐거워하는 사람이다.") 보답 = make_field1("보답을 바라지 않고 타인을 돕는 사람이다.") 도움 = make_field1("내 도움을 요청하는 사람이 있으면 거절하지 않고 도와주는 사람이다.") 실수 = make_field1("타인의 실수나 잘못을 쉽게 비난하지 않고 너그럽게 이해하는 사람이다.") # -----------------개인 태도/선호(시간지향성)-------------------- F1 = make_field1("매일 아침마다 그날의 계획을 미리 새워야 한다.") F2 = make_field1("어떤 일을 성취하고 싶으면, 목표를 세우고 그 목표를 달성하기 위한 구체적인 계획을 생각한다.") PF1 = make_field1("일어날 일은 어차피 일어날 테니 내가 하는 일은 무엇이든 소용이 없다.") F3 = make_field1("오늘 하루를 최대한 충실히 살려고 노력한다.") F4 = make_field1("친구나 윗사람과 약속한 일을 제 시간에 마무리한다.") PP1 = make_field1("인생을 즐기는 것이 중요하다.") PP2 = make_field1("일을 제 시간에 마무리 짓는 것보다 그 일을 즐기는 것이 더 중요하다고 생각한다.") PP3 = make_field1("모험은 인생을 지루하지 않게 한다.") PP4 = make_field1("목표에 집착하는 것보다 인생의 여정을 즐기는 것이 더 중요하다.") PF2 = make_field1("내가 기대하던 대로 이루어지는 일은 거의 없다.") PF3 = make_field1("목표, 결과, 실적을 생각하면 일하는 과정의 즐거움이 사라진다.") PF4 = make_field1("세상 일이 너무 자주 바뀌어서 미래 계획을 제대로 세울 수 없다.") PF5 = make_field1("내 인생은 내가 통제할 수 없는 힘에 지배받고 있다.") PF6 = make_field1("미래를 내 힘으로 조절할 수 없기 때문에 미래를 걱정하는 것은 아무런 의미가 없다.") F5 = make_field1("꾸준히 일해서 정해진 기간 내에 마무리한다.") PP5 = make_field1("흥미진진한 삶을 위해서 모험도 감수해야한다.") F6 = make_field1("해야 할 일의 목록을 작성한다.") PP6 = make_field1("머리(이성)보다 가슴(감성)을 따를 때가 더 많다.") F7 = make_field1("마무리해야 할 일이 있으면, 유혹을 뿌리칠 수 있다.") PF7 = make_field1("오늘날의 삶이 너무 복잡하기 때문에 과거의 단순한 삶이 더 좋다.") # -----------------개인 태도/선호(Risk 성향)-------------------- RA1 = models.IntegerField( choices = [[1, "복권 A 10% 당첨 확률로 500,000원, 90% 당첨 확률로 400,000원"], [2, "복권 B 10% 당첨 확률로 962,500원, 90% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) RA2 = models.IntegerField( choices = [[1, "복권 A 20% 당첨 확률로 500,000원, 80% 당첨 확률로 400,000원"], [2, "복권 B 20% 당첨 확률로 962,500원, 80% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) RA3 = models.IntegerField( choices = [[1, "복권 A 30% 당첨 확률로 500,000원, 70% 당첨 확률로 400,000원"], [2, "복권 B 30% 당첨 확률로 962,500원, 70% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) RA4 = models.IntegerField( choices = [[1, "복권 A 40% 당첨 확률로 500,000원, 60% 당첨 확률로 400,000원"], [2, "복권 B 40% 당첨 확률로 962,500원, 60% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) RA5 = models.IntegerField( choices = [[1, "복권 A 50% 당첨 확률로 500,000원, 50% 당첨 확률로 400,000원"], [2, "복권 B 50% 당첨 확률로 962,500원, 50% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) RA6 = models.IntegerField( choices = [[1, "복권 A 60% 당첨 확률로 500,000원, 40% 당첨 확률로 400,000원"], [2, "복권 B 60% 당첨 확률로 962,500원, 40% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) RA7 = models.IntegerField( choices = [[1, "복권 A 70% 당첨 확률로 500,000원, 30% 당첨 확률로 400,000원"], [2, "복권 B 70% 당첨 확률로 962,500원, 30% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) RA8 = models.IntegerField( choices = [[1, "복권 A 80% 당첨 확률로 500,000원, 20% 당첨 확률로 400,000원"], [2, "복권 B 80% 당첨 확률로 962,500원, 20% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) RA9 = models.IntegerField( choices = [[1, "복권 A 90% 당첨 확률로 500,000원, 10% 당첨 확률로 400,000원"], [2, "복권 B 90% 당첨 확률로 962,500원, 10% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) RA10 = models.IntegerField( choices = [[1, "복권 A 100% 당첨 확률로 500,000원, 0% 당첨 확률로 400,000원"], [2, "복권 B 100% 당첨 확률로 962,500원, 0% 당첨 확률로 25,000원"]], widget=widgets.RadioSelect ) # -----------------대인(PB) 호감 요인(중요도)-------------------- 위험추구성향 = make_field("위험 추구성향은") 사교적성격 = make_field("사교적 성격은") 호기심과모험 = make_field("호기심과 모험심은") 창조성 = make_field("창조성은") 성실함 = make_field("성실함은") 외향적성격 = make_field("외향적 성격은") 차분 = make_field("차분하고 안정적인 성격은") 나이 = make_field("나이는") 성별 = make_field("성별은") 외모적특징 = make_field("외모적 특징(키, 체격 등)은") 외모 = make_field("매력적인 외모는") 목소리 = make_field("목소리는") 도덕성 = make_field("도덕성은") 윤리의식 = make_field("윤리 의식은") 준법정신 = make_field("준법정신은") 취미 = make_field("취미(여가활동)는") 예술적취향 = make_field("예술적 취향(음악, 미술, 영화 등)은") 정치성향 = make_field("정치 성향은") 종교 = make_field("종교는") 학력 = make_field("학력은") 소속 = make_field("소속(회사, 대학 등)은") 경제소득 = make_field("경제 소득(연봉, 용돈 등)은") 거주지 = make_field("거주지(현재 사는 곳)은") 가정환경 = make_field("가정환경은") # -----------------대인(PB) 호감 요인(유사도)-------------------- 위험추구성향1 = make_field("위험 추구성향은") 사교적성격1 = make_field("사교적 성격은") 호기심과모험1 = make_field("호기심과 모험심은") 창조성1 = make_field("창조성은") 성실함1 = make_field("성실함은") 외향적성격1 = make_field("외향적 성격은") 차분1 = make_field("차분하고 안정적인 성격은") 나이1 = make_field("나이는") 성별1 = make_field("성별은") 외모적특징1 = make_field("외모적 특징(키, 체격 등)은") 외모1 = make_field("매력적인 외모는") 목소리1 = make_field("목소리는") 학력1 = make_field("학력은") 소속1 = make_field("소속(회사, 대학 등)은") 경제소득1 = make_field("경제 소득(연봉, 용돈 등)은") 거주지1 = make_field("거주지(현재 사는 곳)은") 가정환경1 = make_field("가정환경은") 도덕성1 = make_field("도덕성은") 윤리의식1 = make_field("윤리 의식은") 준법정신1 = make_field("준법정신은") 취미1 = make_field("취미(여가활동)는") 예술적취향1 = make_field("예술적 취향(음악, 미술, 영화 등)은") 정치성향1 = make_field("정치 성향은") 종교1 = make_field("종교는") etc = models.LongStringField() # PAGES class Introduction(Page): pass class Intro_Question(Page): form_model = "player" form_fields = ["agreement", "experience"] class Part1(Page): pass class Part1_Question_Info(Page) : pass class Part1_Question_1(Page): timeout_seconds = 300 form_model = "player" form_fields = ["창의", "독창적", "상상력", "완벽", "능률", "믿음", "침울", "우울", "걱정", "조용", "수다", "외향", "친절", "이타", "용서"] timer_text = '남은 시간 :' @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player = True class Part1_Question_2(Page): timeout_seconds = 260 form_model = "player" form_fields = ["나쁜", "옳은", "잘못", "비난", "승패", "타협", "경청", "공평", "고통", "좋은일", "보답", "도움", "실수"] timer_text = '남은 시간 :' @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player = True class Part1_Question_3(Page): timeout_seconds = 400 form_model = "player" form_fields = ["F1", "F2", "PF1", "F3", "F4", "PP1", "PP2", "PP3", "PP4", "PF2", "PF3", "PF4", "PF5", "PF6", "F5", "PP5", "F6", "PP6", "F7", "PF7"] timer_text = '남은 시간 :' @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player = True class Part1_Question_4(Page): timeout_seconds = 200 form_model = "player" form_fields = ["RA1", "RA2", "RA3", "RA4", "RA5", "RA6", "RA7", "RA8", "RA9", "RA10"] timer_text = '남은 시간 :' @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player = True class Part1_Second_Instruction(Page): pass class Part1_Question_5(Page): #timeout_seconds = 140 form_model = "player" form_fields = ["위험추구성향", "사교적성격", "호기심과모험", "창조성", "성실함", "외향적성격", "차분", "위험추구성향1", "사교적성격1", "호기심과모험1", "창조성1", "성실함1", "외향적성격1", "차분1"] timer_text = '남은 시간 :' @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player = True class Part1_Question_6(Page): timeout_seconds = 100 form_model = "player" form_fields = ["나이", "성별", "외모적특징", "외모", "목소리", "나이1", "성별1", "외모적특징1", "외모1", "목소리1"] timer_text = '남은 시간 :' @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player = True class Part1_Question_7(Page): timeout_seconds = 140 form_model = "player" form_fields = ["도덕성", "윤리의식", "준법정신", "취미", "예술적취향", "정치성향", "종교","도덕성1", "윤리의식1", "준법정신1", "취미1", "예술적취향1", "정치성향1", "종교1"] timer_text = '남은 시간 :' @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player = True class Part1_Question_8(Page): timeout_seconds = 100 form_model = "player" form_fields = ["학력", "소속", "경제소득", "거주지", "가정환경", "학력1", "소속1", "경제소득1", "거주지1", "가정환경1", "etc"] timer_text = '남은 시간 :' @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player = True class Results(Page): pass page_sequence = [Introduction, Intro_Question, Part1, Part1_Question_1, Part1_Question_2, Part1_Question_3, Part1_Question_4, Part1_Second_Instruction, Part1_Question_5, Part1_Question_6, Part1_Question_7, Part1_Question_8]