当前位置: 首页 > article >正文

oTree学习教程(七)Apps rounds

应用

在oTree(和Django)中,app是一个包含Python和HTML代码的文件夹。当您创建oTree项目时,它会预先加载各种应用程序,例如 public_goodsdictator。会话基本上是一个接一个显示的应用程序序列。

创建应用

输入:

这将基于oTree模板创建一个新的app文件夹,其中大部分结构已经为您设置。

关键文件是models.py,pages.py和templates /文件夹下的HTML文件。

您可以将其视为可以根据需要添加的骨架。 您可以添加自己的类,函数,方法和属性,也可以导入任何第三方模块。

然后转到settings.py并在SESSION_CONFIGS中为您的应用创建一个与其他条目类似的条目。

组合应用

在您的SESSION_CONFIGS中,您可以通过设置组合应用程序'app_sequence'

在应用程序之间传递数据

请参阅participant.vars和session.vars。

 

回合

您可以通过在models.py中设置Constants.num_rounds来使游戏运行多轮。 例如,如果您的Session配置的app_sequence是['app1','app2'],其中app1的num_rounds = 3且app2的num_rounds = 1,那么您的会话将包含4个子会话。

回合数

您可以使用self.round_number (此属性出现在subsession,group,player和page对象上)来获取当前的轮数。回合数字从1开始。

在轮次或应用程序之间传递数据

 

每轮都有单独的Subsession,Group和Player对象。 例如,假设您在第1轮中设置self.player.my_field = True。在第2轮中,如果您尝试访问self.player.my_field,您会发现其值为None(假设这是该字段的默认值)。 这是因为第1轮中的Player对象与第2轮中的Player对象是分开的。

要访问上一轮或应用程序中的数据,您可以使用下面描述的技术之一。

in_rounds,in_previous_rounds,in_round等

Player,group和subsession对象具有以下方法,它们的工作方式类似:

  • in_previous_rounds()
  • in_all_rounds()
  • in_rounds()
  • in_round()

player.in_previous_rounds()和player.in_all_rounds()每个都返回一个代表相同应用前几轮中同一参与者的玩家列表。 区别在于in_all_rounds()包括当前回合的玩家。

例如,如果您想计算参与者对所有前几轮游戏的收益,加上当前游戏的收益:

player.in_rounds(m,n)返回表示从轮次m到n的同一参与者的玩家列表。

player.in_round(m)只返回第m轮的玩家。 例如,要获得上一轮玩家的回报,你可以使用self.player.in_round(self.round_number - 1).payoff。

类似地,subsession对象具有以相同方式工作的方法in_previous_rounds(),in_all_rounds(),in_rounds(m,n)和in_round(m)。

组对象也有方法in_previous_rounds(),in_all_rounds(),in_rounds(m,n)和in_round(m),但请注意,如果在轮之间重新组合组,则这些方法可能不会返回任何有意义的内容。

participant.vars

如果要在不同应用程序之间传递数据,则应将此数据存储在参与者中,该数据在应用程序中保留(请参阅参与者)。 (in_all_rounds()仅在您需要访问同一应用程序的上一轮数据时才有用。)

participant.vars是一个可以存储任何数据的字典。 例如,您可以设置如下属性:

稍后在会话中(例如在单独的应用程序中),您可以像这样检索它:

如在这里所述,可以从页面或玩家访问当前参与者:

只要您检索Player实例(例如,使用get_players()或get_player_by_role()等),您也可以从Group或Subsession访问它。

如果您的key可能存在,也可能不存在,您可以使用.get()方法。 例如,self.participant.vars.get('my_var',DEFAULT_VALUE)。 更多这里。

或者您可以在self.participant.vars中测试'my_var'是否与'my_var'一起存在。

注意:participant.vars不包含在Excel / CSV数据导出中,也不包含在会话管理员的“数据”选项卡中。 如果需要,可以在player上创建一个StringField(例如,名为participant_vars_dump),然后在会话结束时指定:

(同样的概念适用于下面的session.vars。)

session.vars 

对于会话中所有参与者相同的全局变量,可以使用self.session.vars。 这是一个像participant.vars一样的字典。 不同之处在于,如果在self.session.vars中设置变量,它将应用于会话中的所有参与者,而不仅仅是一个。

如此处所述,可以从Page对象或任何模型(Player,Group,Subsession等)访问会话对象。

可变轮数

如果你想要一个可变数量的轮数,考虑设置num_rounds 为某个高数字,然后在你的应用程序中,有条件地隐藏 元素,这样用户就无法进入下一页。{% next_button %}

 

http://www.lryc.cn/news/2416897.html

相关文章:

  • label设置自动换行的方法
  • HI3516DV300笔记(二)硬件适配
  • 单目3D检测新SOTA!PersDet:透视BEV中进行3D目标检测
  • 游戏开发博客
  • [转载]聊聊tcpdump与Wireshark抓包分析
  • C++实现刷屏代码(详细教程+代码)
  • H网、某播放器、某数字公司是一根绳上的三个蚂蚱
  • Python 爬虫实战 汽车某家(五) 口碑、评分
  • Java考试题30道(附答案)
  • DRS:一个开源的STORM系统,用于负载动态调整
  • AutoHotKey映射方向键和Home, End键
  • CTreeCtrl 类的InsertItem成员函数
  • 【时空流量预测笔记1】基于相关卷积LSTM和自注意网络的蜂窝网络流量预测
  • 【HTML基础】form表单常用的7种属性和9种元素详解(含在线练习网址)
  • Jmeter动态吞吐量实现
  • 源码、反码、补码(超详细解析)
  • android 电池监测工具,安卓最强电池监控器Battery Monitor Widget Pro
  • Android常用颜色对照表
  • 刚用uiotos交付了智慧园区统一管理平台,前端零代码+后端零代码+物联网平台,完美搭配!(一)|零代码、0代码、无代码、低代码、可视化编程、nodered、amis、codewave、乐吾乐
  • java编程思想第四版电子书,,终于有人把Java程序员必学知识点全整理出来了
  • 在Cocos2d-x中使用CocosBuilder
  • Windows版Redis和Redis Desktop Manager安装
  • 怎么测试网站服务器速度,怎么测试网站速度
  • Linux 系统日志文件有哪些类型?
  • MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
  • GB2312汉字拼音对照表
  • 关于Wiki
  • 小熊工厂 bt
  • ssh连接报错: No route to host
  • 华大HC32F460的BOOT和IAP说明