真是太久没有更新PsychoPy相关的内容了。不过最近在咨询PsychoPy相关问题的人越来越多,觉得是件好事,因为越来越多的人开始在使用这款优秀的实验工具了。
今天这篇推送算是又一个解决问题的例子,此处感谢@常浩 的提问。那么在PsychoPy的Builder模式中要如何设置返回重新练习呢?接下来将详细说明。
首先,还是先设置一个简单的实验程序,当然这里为了演示返回重新练习的效果,就只放置了练习阶段的任务,正式实验部分只有指导语。如图所示:
例子中先呈现注视点,之后在刺激界面按数字12345键反应,在练习结束的页面,按“F”键继续,按“J”键返回重新练习。进入正式阶段后,呈现完指导语即结束程序。
接下来我们就看看在PsychoPy中这样的要求需要如何进行设置。
帖子里仅列出关键步骤和语句,完整示例文件请戳文末“阅读原文”下载~
在上面的flow视图中可以看到,在正常的练习loop之外,添加了一层practice_back的loop,这个loop就是用于返回到开头重新进行练习所使用的,所以它的位置需要涵盖住开头的instruction和练习结束时的practice_end。如图所示:
在这个practice_back的loop中,我们需要设置它的循环次数为999。其实这里就是需要设置一个较大的数,保证在可能出现的返回练习按键次数中,要小于我们设置的这个循环次数:
接下来需要设置的就是practice_end的这个位置了。首先需要放置上3个控件——字符呈现,键盘反应和语句:
字符呈现就是写明按“F”键继续,按“J”键返回重新练习。而在语句界面需要在end routine标签下写上如下语句,如果在此界面收集到f,则practice_back这个循环结束:
if "f" inkey_resp_6.keys:
practice_back.finished = True
这样一来,简单的返回重新练习便已设置完毕。
以上部分的示例将放在文末链接中的test1中。
再额外讲另一种返回重新练习的情况,那就是必须要练习的正确率达到一定程度,才能够开启正式实验。
比如这里我们说要求练习的正确率为80%以上,才能够进入正式实验。程序的其它部分和上面的都是相同的,需要进行调整的地方是以下两个:
首先在stimulate页面添加语句控件,并且在begin routine标签下写下如下语句,表示设置初始的存储正确反应个数的变量number_correct:
if trials.thisN == 0:
number_correct =
0
之后在end routine标签下写下语句,表示如果反应正确,则number_correct循环加1:
ifkey_resp_2.corr:
number_correct = number_correct + 1
之后,在practice_end这个页面下,语句中的begin routine标签下的代码改为表示计算正确率,若正确率大于等于0.8,那么结束practice_back这个loop(这里的+1是因为python中的计数默认是从第0开始的,不是从第1开始,所以需要+1):
if number_correct/(trials.nTotal + 1) >= 0.80:
practice_back.finished = True
end_practice.setText(
"practice finished, press 'space' to continue")
这样一来,计算正确率的返回重新练习便已设置完毕。
以上部分的示例将放在文末链接中的test2中。
如果在程序设置中遇到其它问题,欢迎在此公众号留言与我联系讨论。
供大家参考。
这回应该是拖更最久的一次了,感谢大家的不离不弃与后台的提问和催促,Ryan又回来了!
似乎又到了一年做实验的季节,祝愿大家实验顺利,有问题可以在公众号后台留言或是扫描上方二维码联系Ryan。
祝好!
—Ryan的后记
网友评论