6. 知っておきたいPythonの文法(2)
• 比較演算子
• x == y:xとyは等しい
• x != y:xとyは等しくない
• x is y:xとyは同一 (Noneと比較するときはis)
• あとは>, <, >=, <=など
• 論理演算子
• x or y:xまたはy
• x and y:xかつy
• not x:xではない
6
26. for thisTrial in trials:
# trialルーチンの初期化処理
while continueRoutine and …:
#
# 刺激の更新・入力の処理など
#
# trialルーチンの終了処理
「Routine開始時」のコード
「フレーム毎」のコード
「Routine終了時」のコード
Mouseコンポーネント任せでは
ダメなので自分でコードを書く。
• 刺激表示されている間ずっと
クリックされているかを確認
しないといけない。
• カード上でクリックしたこと
を確認したらtrialルーチンを
終了させる。
trialルーチンの「フレーム毎」
へコードを挿入すればいい!
ココ!
26
27. • mouseの「クリックで終了」のチェックを外す。
if t>1:
for card in [card_A, card_B, card_C, card_D]:
if mouse.isPressedIn(card, [0,]):
continueRoutine = False
break
trialルーチン
• codeコンポーネントを追加し、名前をcode_trialとする。
• code_trialの「フレーム毎」に以下のコードを挿入。
27
作業しましょう!
28. if t>1:
for card in [card_A, card_B, card_C, card_D]:
if mouse.isPressedIn(card, [0,]):
continueRoutine = False
break
trialルーチン開始時に参加者がマウスのボタンを押しちゃっている
可能性があるので、ルーチン開始1秒後から判定を行いたい。
ルーチン開始からの時刻は予約された内部変数tに格納されている
のでt>1の時に判定を行う。
28
29. if t>1:
for card in [card_A, card_B, card_C, card_D]:
if mouse.isPressedIn(card, [0,]):
continueRoutine = False
break
for文を使って、card_Aからcard_Dまで順番に調べる。ルーチンに
置いた刺激コンポーネントは(原則)その名前の変数に格納され
ている。
刺激内にカーソルが置かれている状態でマウスのボタンが押され
ているかはmouseオブジェクトのisPressedIn()で判定できる。
29
30. if t>1:
for card in [card_A, card_B, card_C, card_D]:
if mouse.isPressedIn(card, [0,]):
continueRoutine = False
break
予約された変数continueRoutineをFalseにすれば、ルーチン内の残
りの処理を行った後にルーチン終了処理に入る。直ちに終了する
必要がある場合はbreakも使える。 →「PsychoPy Builderで作る心理学実験」11章
ここのbreak文はカードを特定したらそれ以上for文を継続せずに次の
処理へ進むためです。breakを削除したら次のstepでどうなってしま
うか考えるとよい勉強になると思います。
30
31. for thisTrial in trials:
# trialルーチンの初期化処理
while continueRoutine and …:
#
# 刺激の更新・入力の処理など
#
if t>1:
for card in [card_A, card_B, card_C, card_D]:
if mouse.isPressedIn(card, [0,]):
continueRoutine = False
break
# trialルーチンの終了処理
このように埋め込まれるというイメージを持とう。
31