日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python心理学实验程序_psychopy coder模式编写心理试验程序 字符程序和记录反应时...

發(fā)布時(shí)間:2024/9/3 python 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python心理学实验程序_psychopy coder模式编写心理试验程序 字符程序和记录反应时... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

自變量

呈現(xiàn)3個(gè)字母,中間為A或者B的話,被試需要反應(yīng)f,中間為X或Y的話,被試需要反應(yīng)j。

3個(gè)字母中間有兩種情況:AB或XY

3個(gè)字母兩邊有同類或異類兩種情況:AB兩邊是AB為同類,為XY為異類;XY則反之

3個(gè)字母兩邊的顏色:紅、綠、藍(lán)

注視點(diǎn)呈現(xiàn)時(shí)間:400ms、500ms、600ms

因變量

被試的反應(yīng)時(shí)和判斷正確率

實(shí)驗(yàn)設(shè)計(jì)

480次trail

注視點(diǎn)呈現(xiàn)400ms、500ms和600ms分別160次

紅、綠、藍(lán)分別160次

中間為A的情況120次,其中60次兩邊為B(同類),30次兩邊為X(異類),30次兩邊為Y(異類)

中間為B、X和Y的情況依此構(gòu)造

需要記錄的結(jié)果

被試ID、實(shí)驗(yàn)序號(hào)、注視點(diǎn)呈現(xiàn)時(shí)間、呈現(xiàn)的字母、兩邊字母的顏色、正確的反應(yīng)按鍵、實(shí)際的反應(yīng)按鍵、反應(yīng)時(shí)、是否反應(yīng)正確。

程序思路

首先準(zhǔn)備實(shí)驗(yàn)刺激,生成有16個(gè)項(xiàng)目的trailTypes,和顏色組合成48種,翻10倍,再和注視點(diǎn)時(shí)間進(jìn)行搭配。之后寫函數(shù)來(lái)實(shí)現(xiàn)具體程序。閱讀程序時(shí),從“這是程序真正開(kāi)始的地方”開(kāi)始閱讀會(huì)比較容易,之后再具體看程序。

# -*- coding: utf-8 -*-

"""

Created on Sun Apr 10 12:40:30 2016

@author: zbg

"""

from psychopy.visual import Window, ImageStim, TextStim

from psychopy import core, event, gui, clock

import random

#準(zhǔn)備trail和注視點(diǎn)時(shí)間

trailTypes = ['BAB', 'BAB', 'XAX', 'YAY',

'ABA', 'ABA', 'XBX', 'YBY',

'YXY', 'YXY', 'AXA', 'BXB',

'XYX', 'XYX', 'AYA', 'BYB']

colors = [(-1,-1,1), (-1,1,-1), (1,-1,-1)]

trails = []

"""

trails = [(timeCross, trailType, color, correctKey), ...]

"""

timeCrosses = [.4] * 160 + [.5] * 160 + [.6] * 160

for i in range(10):

for tt in trailTypes:

for c in colors:

tc = tt[1]

correctKey = 0

if tc in "AB":

correctKey = 'f'

elif tc in "XY":

correctKey = 'j'

trails.append((timeCrosses.pop(), tt, c, correctKey))

#到這里,trails包含16 * 3 * 10 = 480次試驗(yàn)

random.shuffle(trails)

#存放結(jié)果的地方

results = []

"""

results = [(按鍵, 反應(yīng)時(shí), 是否正確), ...]

"""

#程序使用的各種函數(shù)

def GetSubject():

"""

返回被試的id

"""

myDlg = gui.Dlg(title="Subject Information")

myDlg.addField(u'被試ID:')

myDlg.show()

if myDlg.OK:

thisInfo = myDlg.data

else:

exit(0)

return thisInfo[0]

def ShowIntro(win):

introduce =u"""

啦啦啦啦啦啦啦啦啦啦

啦啦啦啦啦啦啦

按[空格鍵]繼續(xù)

"""

t =TextStim(win, introduce ,pos=(0,-0.0))

t.draw()

win.flip()

keys=[]

while 'space' not in keys:

keys=event.getKeys()

def ShowBlank(win):

win.flip()

clk = clock.CountdownTimer(0.5)

while clk.getTime() > 0:

pass

def ShowCross(win, time):

t =TextStim(win, '+' ,pos=(0,0), height = 55, units = "pix")

t.draw()

win.flip()

clk = clock.CountdownTimer(time) #非常精確的計(jì)時(shí)器

while clk.getTime() > 0:

pass

return

def ShowTrailAndGetKey(win, text, color):

"""

返回(按鍵, 反應(yīng)時(shí)(s))

情況分別有:

('j', 反應(yīng)時(shí))

('f', 反應(yīng)時(shí))

('0', 1.2) (超時(shí))

"""

tLeft = TextStim(win, text[0], pos=(-70, 0), color = color, height = 55, units = "pix")

tRight = TextStim(win, text[2], pos=(+70, 0), color = color, height = 55, units = "pix")

tCenter = TextStim(win, text[1], pos=( 0, 0), color = (1,1,1), height = 55, units = "pix")

tLeft.draw()

tRight.draw()

tCenter.draw()

event.clearEvents()

win.flip()

clk = clock.CountdownTimer(1.2)

while clk.getTime() > 0:

keys = event.getKeys()

if 'j' in keys:

return ('j', 1.2-clk.getTime())

elif 'f' in keys:

return ('f', 1.2-clk.getTime())

elif 'q' in keys:

return ('q', 1.2-clk.getTime())

#超時(shí)

return ('0', 1.2)

def ShowIncorrect(win):

t =TextStim(win, u'按鍵錯(cuò)誤' ,pos=(0,0), height = 55, units = "pix")

t.draw()

win.flip()

clk = clock.CountdownTimer(1) #非常精確的計(jì)時(shí)器

while clk.getTime() > 0:

pass

return

def ShowBreak(win):

introduce =u"""

啦啦啦啦啦啦啦啦啦啦

啦啦啦啦啦啦啦

按[空格鍵]繼續(xù)

"""

t =TextStim(win, introduce ,pos=(0,-0.0))

t.draw()

win.flip()

clk = clock.CountdownTimer(10) #強(qiáng)制休息10秒

while clk.getTime() > 0:

pass

keys=[]

event.clearEvents()

while 'space' not in keys:

keys=event.getKeys()

def ShowEnd(win):

introduce =u"""

啦啦啦啦啦啦啦啦啦啦

啦啦啦啦啦啦啦

按[空格鍵]退出

"""

t =TextStim(win, introduce ,pos=(0,-0.0))

t.draw()

win.flip()

keys=[]

while 'space' not in keys:

keys=event.getKeys()

def StoreResult(name, N, trails, results):

fp = open(name + '.txt','w')

fp.write("ID\tnum\ttimeCross\ttrailType\tcolor\tcorrectKey\trKey\trTime\tCorrect\n")

def w(x):

fp.write(str(x) + '\t')

def n():

fp.write('\n')

for i in range(N):

(timeCross, trailType, color, correctKey) = trails[i]

(rKey, rTime, Correct) = results[i]

w(name)

w(i+1)

w(timeCross)

w(trailType)

w(color)

w(correctKey)

w(rKey)

w("%.0f" % (rTime * 1000))

w(Correct)

n()

fp.close()

#這是程序真正開(kāi)始的地方

N = 480

name = GetSubject()

win = Window(fullscr = True, color=(-1,-1,-1))

ShowIntro(win)

for i in range(N):

(timeCross, trailType, color, correctKey) = trails[i]

ShowBlank(win)

ShowCross(win, timeCross)

(rKey, rTime) = ShowTrailAndGetKey(win, trailType, color)

if rKey == 'q':

StoreResult(name, i, trails, results)

exit(0)

if rKey != correctKey:

ShowIncorrect(win)

results.append((rKey, rTime, 0))

else:

results.append((rKey, rTime, 1))

if i % 120 == 119:

ShowBreak(win)

ShowEnd(win)

StoreResult(name, N, trails, results)

win.close()

psychopy 定做實(shí)驗(yàn)程序 https://item.taobao.com/item.htm?spm=a230r.1.14.6.Q6E2OW&id=530690095131&ns=1&abbucket=15#detail

總結(jié)

以上是生活随笔為你收集整理的python心理学实验程序_psychopy coder模式编写心理试验程序 字符程序和记录反应时...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。