from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random class Constants(BaseConstants): name_in_url = "Questionnaire" players_per_group = None num_rounds = 1 new_template = "Questionnaire/new.html" class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): Gradue = models.StringField( choices=[["1", "本科"], ["2", " 研究生"]], label="您的学历是 ", widget=widgets.RadioSelect ) Major = models.StringField(label="您学什么专业 ?") Birth_Year = models.IntegerField(label="您在哪年出生? ") Gender = models.StringField( choices=[["1", "男"], ["2", "女"]], label="您的性别? ", widget=widgets.RadioSelect ) risk_aversion = models.StringField( choices=[ ["0", "0 完全不愿意承担风险"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10 非常愿意承担风险\t(不知道)"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="请告诉我,从整体上,您有多愿意或多么不愿意承担风险 ?请用 10 分制评分标准来评价,0 表示您 “完全 不愿意承担风险”, 10 表示您“非常愿意承担风险”,您也可以用 0 到 10 之间的任意一个数字,即用 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 来回答。", widget=widgets.RadioSelect, ) Overconfidence = models.StringField( choices=[ ["0", "0 低于平均水平"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10 高于平均水平"], ], label="与其他同学相比,您认为自己擅长解决迷阵吗? ", widget=widgets.RadioSelect, ) Competitiveness = models.StringField( choices=[ ["0", "0 完全不是"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10 完全是"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="您认为自己是个“有竞争力”的人吗?请打1到10分。 ", widget=widgets.RadioSelect, ) Complexity = models.StringField( choices=[ ["0 完全不难", "0 完全不难"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10 非常难", "10 非常难"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="在任务3中选择补偿方案对您来说有多难? ", widget=widgets.RadioSelect, ) Stereotype = models.StringField( choices=[ ["0 女人做得更好", "0 女人做得更好"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10 男人做得更好", "10 男人做得更好"], ], label="您认为您刚做的矩阵任务男人与女人哪个做得更好? ", widget=widgets.RadioSelect, ) Fair_task_2 = models.StringField( choices=[ ["0 非常不公平", "0 非常不公平"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10 非常公平", "10 非常公平"], ], label="您觉得任务2当中的竞争有多公平? ", widget=widgets.RadioSelect, ) FairCompensation = models.StringField( choices=[ ["0 非常不公平", "0 非常不公平"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10 非常公平", "10 非常公平"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="您觉得今天的补偿公平 吗? ", widget=widgets.RadioSelect, ) NegRec1 = models.StringField( choices=[ ["0 完全不愿意", "0 完全不愿意"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10 非常愿意", "10 非常愿意"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="您有多愿意惩罚那些 对您不公正的人,即 使可能要您付出代 价? ", widget=widgets.RadioSelect, ) NegRec2 = models.StringField( choices=[ ["0 完全不愿意", "0 完全不愿意"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10 非常愿意", "10 非常愿意"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="您有多愿意惩罚那些 对别人不公正的人, 即使可能要您付出代 价? ", widget=widgets.RadioSelect, ) Alturism1 = models.StringField( choices=[ ["0 完全不愿意", "0 完全不愿意"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10 非常愿意", "10 非常愿意"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="您有多愿意进行慈善 捐赠,而不期待任何 回报? ", widget=widgets.RadioSelect, ) NegRec3 = models.StringField( choices=[ ["0 完全不同意", "0 完全不同意"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9 ", "9 "], ["10 完全同意", "10 完全同意"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="如果您被很不公平地对 待,您会第一时间作出 报复,就算要付出代 价。 ", widget=widgets.RadioSelect, ) Trust = models.StringField( choices=[ ["0 完全不同意", "0 完全不同意"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9 ", "9 "], ["10 完全同意", "10 完全同意"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="您认为人们都是心存好 意的。 ", widget=widgets.RadioSelect, ) Complex2 = models.StringField( choices=[ ["0 完全不同意", "0 完全不同意"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9 ", "9 "], ["10 完全同意", "10 完全同意"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="我避免做出艰难的决定 ", widget=widgets.RadioSelect, ) BeliefsAboutOthers = models.StringField( choices=[ ["0 完全不同意", "0 完全不同意"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9 ", "9 "], ["10 完全同意", "10 完全同意"], ["98 (不知道)", "98 (不知道)"], ["99 (拒答)", "99 (拒答)"], ], label="大多数人为了利益而说谎 ", widget=widgets.RadioSelect, ) Alturism2 = models.CurrencyField( label="请设想一下下述情况:今天您意外地收到 800 元。 您会把这笔钱中的多少金额进行慈善捐赠? (允许 0 到 800 之间的金额) ", min=0 ) Minority = models.StringField( choices=[["1", "汉族"], ["2", "少数民族"], ["99", "拒答"]], label="您的民族? ", widget=widgets.RadioSelect, ) Seen_experiement_Beofre = models.StringField( choices=[["1", "是"], ["2", "否"]], label="您之前在其它实验中是否见过这类矩阵 ?", widget=widgets.RadioSelect, ) About = models.StringField(blank=True, label="您认为本次实验是关于什么的?(选填)") Average_other = models.IntegerField(label="您估计,和您同时参加测试的其他学生平均解决了几个数字矩阵?", max=20, min=0) Suggestions = models.StringField(blank=True, label="您对本次实验有什么评论和建议吗?请描述: (选填) ") Q74 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(跳至 Q90)"], ["2", "固定报酬\t(继续)"], ["99", '(不知道/不适用)\t(重复问题; 如果再次回答“不知道”或 “不适用”, 跳至 "下一页")'], ], label="Q74. 您会选哪一个:抽奖,得到 300 元或什么也得不到,各有 50%的机会,还是一笔 160 元固定金额的报酬?", widget=widgets.RadioSelect, ) Q75 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(跳至 Q83)"], ["2", "固定报酬\t(继续)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q75. 您会选择 50/50 机会,还是 80 元的固定报酬?", widget=widgets.RadioSelect, ) Q76 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(继续)"], ["2", "固定报酬\t(跳至 Q80)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q76. 您会选择 50/50 机会,还是 40 元的固定报酬?", widget=widgets.RadioSelect, ) Q77 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(继续)"], ["2", "固定报酬\t(跳至 Q79)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q77. 您会选择 50/50 机会,还是 60 元的固定报酬?", widget=widgets.RadioSelect, ) Q78 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至"下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q78. 您会选择 50/50 机会,还是 70 元的固定报酬?", widget=widgets.RadioSelect, ) Q79 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至"下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q79. 您会选择 50/50 机会,还是 50 元的固定报酬?", widget=widgets.RadioSelect, ) Q80 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(继续)"], ["2", "固定报酬\t(跳至 Q82)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q80.您会选择 50/50 机会,还是 20 元的固定报酬?", widget=widgets.RadioSelect, ) Q81 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至"下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q81. 您会选择 50/50 机会,还是 30 元的固定报酬?", widget=widgets.RadioSelect, ) Q82 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至"下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q82. 您会选择 50/50 机会,还是 10 元的固定报酬?", widget=widgets.RadioSelect, ) Q83 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(跳至Q87)"], ["2", "固定报酬\t(继续)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q83. 您会选择 50/50 机会,还是 120 元的固定报酬?", widget=widgets.RadioSelect, ) Q84 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(跳至Q86)"], ["2", "固定报酬\t(继续)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q84. 您会选择 50/50 机会,还是 100 元的固定报酬?", widget=widgets.RadioSelect, ) Q85 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q85. 您会选择 50/50 机会,还是 90 元的固定报酬?", widget=widgets.RadioSelect, ) Q86 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '99\t(不知道/不适用)\t(跳至 "下一页")'], ], label="Q86. 您会选择 50/50 机会,还是 110 元的固定报酬?", widget=widgets.RadioSelect, ) Q87 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(继续)"], ["2", "固定报酬\t(跳至 Q89)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q87. 您会选择 50/50 机会,还是 140 元的固定报酬?", widget=widgets.RadioSelect, ) Q88 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q88. 您会选择 50/50 机会,还是 150 元的固定报酬?", widget=widgets.RadioSelect, ) Q89 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q89. 您会选择 50/50 机会,还是 130 元的固定报酬?", widget=widgets.RadioSelect, ) Q90 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(跳至Q98)"], ["2", "固定报酬\t(继续)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q90. 您会选择 50/50 机会,还是 240 元的固定报酬?", widget=widgets.RadioSelect, ) Q91 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(跳至Q95)"], ["2", "固定报酬\t(继续)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q91. 您会选择 50/50 机会,还是 200 元的固定报酬?", widget=widgets.RadioSelect, ) Q92 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(继续)"], ["2", "固定报酬\t(跳至 Q94)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q92. 您会选择 50/50 机会,还是 180 元的固定报酬?", widget=widgets.RadioSelect, ) Q93 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q93. 您会选择 50/50 机会,还是 190 元的固定报酬?", widget=widgets.RadioSelect, ) Q94 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q94. 您会选择 50/50 机会,还是 170 元的固定报酬?", widget=widgets.RadioSelect, ) Q95 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(继续)"], ["2", "固定报酬\t(跳至 Q97)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q95. 您会选择 50/50 机会,还是 220 元的固定报酬?", widget=widgets.RadioSelect, ) Q96 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q96. 您会选择 50/50 机会,还是 230 元的固定报酬?", widget=widgets.RadioSelect, ) Q97 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q97. 您会选择 50/50 机会,还是 210 元的固定报酬?", widget=widgets.RadioSelect, ) Q98 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(跳至Q102)"], ["2", "固定报酬\t(继续)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q98. 您会选择 50/50 机会,还是 280 元的固定报酬?", widget=widgets.RadioSelect, ) Q99 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(继续)"], ["2", "固定报酬\t(跳至 Q101)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q99. 您会选择 50/50 机会,还是 260 元的固定报酬?", widget=widgets.RadioSelect, ) Q100 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q100. 您会选择 50/50 机会,还是 270 元的固定报酬?", widget=widgets.RadioSelect, ) Q101 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q101. 您会选择 50/50 机会,还是 250 元的固定报酬?", widget=widgets.RadioSelect, ) Q102 = models.StringField( blank=True, choices=[ ["1", "50/50 机会\t(跳至Q104)"], ["2", "固定报酬\t(继续)"], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q102. 您会选择 50/50 机会,还是 300 元的固定报酬?", widget=widgets.RadioSelect, ) Q103 = models.StringField( blank=True, choices=[ ["1", '50/50 机会\t(跳至 "下一页")'], ["2", '固定报酬\t(跳至 "下一页")'], ["99", '(不知道/不适用)\t(跳至 "下一页")'], ], label="Q103. 您会选择 50/50 机会,还是 290 元的固定报酬?", widget=widgets.RadioSelect, ) Q104 = models.StringField( blank=True, choices=[["1", "50/50 机会\t(继续)"], ["2", "固定报酬\t(继续)"], ["99", "(不知道/不适用)\t(继续)"]], label="Q104. 您会选择 50/50 机会,还是 310 元的固定报酬?", widget=widgets.RadioSelect, )