我正在尝试做一些在Python(2.7.6)中可能不太难的事情,但我离解决方案还差得远。这是一个功能磁共振成像实验(特别是在实验中)。我有一个csv,看起来像这样:
level,string,key
1,string11,1
1,string12,0
1,string13,1
2,string21,1
2,string22,1
2,string23,0
有20个级别(1:20),csv有大约5000条记录。我想做的是从第二列显示一个特定级别的字符串(起始级别是预先确定的)。例如,我们测试了一个受试者,确定他们将从5级开始。从第5级开始出现一个随机字符串(例如,“牛是动物”)。受试者按下“真/假”按钮(回答“键”列-1/0)。棘手的是,每4个连续的正确答案水平增加1,一个不正确的答案水平降低1。你知道吗
时间/效率有些重要,所以我认为csv可以提前解析,然后在实验过程中工作的部分只是访问按级别存储的数据。我看过嵌套字典,似乎不对。也许是嵌套列表?我有点力不从心。我用bash写了一个工作示例,以防比我的解释更清楚。你知道吗
#!/bin/bash
csv="file.csv"
level="5"
ilevel="0"
counter="1"
while [ "$counter" -le 10 ]; do
stim=$(awk -F',' -v l="$level" '{if($1==l) print $2","$3}' "$csv"|sort -R|head -n1)
stim1=$(echo "$stim"|cut -d',' -f1)
stim2=$(echo "$stim"|cut -d',' -f2)
read -p "$stim1 (t/f): " ANS
if [[ "$stim2" == "1" && "$ANS" == "t" || "$stim2" == "0" && "$ANS" == "f" ]]; then #if correct
ilevel=$(echo "scale=2;$ilevel+.25"|bc) #add .25 to ilevel counter
if [[ "$ilevel" == "1.00" ]]; then
if [[ "$level" < "20" ]]; then
level=$(echo "$level+1"|bc) #increase level
fi
ilevel=0
fi
else
if [[ "$level" > "1" ]]; then #if incorrect
level=$(echo "$level-1"|bc) #decrease level
fi
ilevel=0
fi
let "counter += 1"
done
bash脚本只是用于一个工作示例—计数器、打印到屏幕、用户反馈。。在现实中,所有这些都是不同的处理方式,而且已经完成了。我只需要弄清楚csv的排序和操作级别。提前谢谢你的建议。你知道吗
使用dict和随机选择要随机选取字符串:
如果你需要答案/第2栏:
输出:
主dict键是levels,嵌套dict保存所有level字符串,这些字符串是嵌套dict的键,值是第3列的答案。你知道吗
如果您使用的是一个看起来像您自己的gui,那么您的逻辑将类似于以下内容,但显然是使用您的gui方法:
很明显,一定会有一个点,无数的答案是错误的,这将意味着水平达到0,所以这可能是时间打破,这一逻辑,你将不得不决定。如果你不想重复提问,那么你就必须把它们从听写中删除
相关问题 更多 >
编程相关推荐