Psychopy | 第2期:从Stroop看条件与循环
Psychopy | 第2期:从Stroop看条件与循环
- 1 相关概念的简单引入
- 2 条件分支结构的介绍
- 3 两种循环结构的介绍
- 4 Stroop代码详细讲解
- 5 系列课程的总结
Hello,
这里是行上行下,我是喵君姐姐~
最近在家实在无聊,所以只好安安心心学习啦。你最近在家干什么呢?
今天继续邀请阿槑给你带来Psychopy系列教程,希望你会继续喜欢并且一直支持哟~
1 相关概念的简单引入
在之前几期,我们学习了Psychopy的入门以及数据类型与运算符。
今天,我们继续从Stroop范式来学习psychopy的条件与循环。
提到心理学行为实验,Stroop范式的影响与重要性不言而喻。
对于Stroop范式来说,我们需要控制呈现的条件、文字、颜色相互匹配,匹配方式如表所示:
那么,如何快速的实现这样的匹配呢?
我们可以利用条件分支与循环的结构来完成:
list = ['red', 'blue'] for word in list: for color in list: if word == color: condition = 'same' else: condition = 'diff' print(condition, word, color)
代码看起来有点复杂,我们现在分别来学习其中涉及的两种结构:条件分支与循环。
2 条件分支结构的介绍
条件分支结构形式比较简单,基本形式为:
if <布尔表达式>: <代码段 | pass>
在这里,布尔表达式是一类只能以 True 或 False 为取值的代码,如 1==2;pass是一个占位符,表示“什么也不做”。
由于Python中的循环或分支不允许为空,所以需要使用pass占位;代码段 与 pass 有其中之一即可。
当我们看到 if 这个单词时,我们脑海中蹦出来的意思就是“如果”,同样的,在 Python 中,if 也可以简单地理解为“如果”的意思。
也就是说,当 if 后面的被满足时,则继续执行后面的代码,否则跳过这一代码。如:
a = 1 b = 2 if a < b: print('a<b')
此时我们可以看到结果如下:
而相反:
a = 2 b = 1 if a < b: print('a<b')
则 ‘a<b’ 无法被输出。
条件分支结构除了像上述那样单独使用if外,对于相互并列的不同条件,我们使用可以if…elif…elif…else…来进行并列,具体来说:
当有两种互斥的条件时,可以使用 if…else…
a = 2 b = 1 if a < b: print('a<b') else: print('a>=b')
此时运行我们可以得到:
可以看到,在else后面的条件内容是被省略掉的。
在编写程序过程中,我们有时会遇到内容比较繁琐的条件,此时可以将内容简单的互斥条件放到if后,这样就可以省去繁琐的内容。
比如,当我们想使 a<=1 且 a>=5 时输出 ’right’,而其他情况输出 ’wrong’ 相比于:
a = 0 if a <= 1 and a >= 5: print('right') else: print('wrong')
这样编写显得更为方便:
a = 0 if 1 < a < 5: print('wrong') else: print('right')
而当有两个及以上条件并列时,我们可以使用elif来进行并列,如:
a = 2 b = 1 if a < b: print('a<b') elif a == b: print('a==b') elif a > b: print('a>b')
同样的,最后的 elif a>b: 可以简写为 else:
a = 2 b = 1 if a < b: print('a<b') elif a == b: print('a==b') else: print('a>b')
在日常编写程序时,if 条件分支结构需要注意两个细节:
其一,对于每一个 if…: 的形式,最后的冒号往往容易忽略;
其二,Python 相较于其他编程语言最明显的特点在于其通过缩进来对代码段进行划分的。
也就是说,开头有缩进的代码表示这段代码是属于上面某个分支或循环,一个缩进是四个空格,可以单击 Tab 键来进行快速缩进。
3 两种循环结构的介绍
在 Python 中,循环有两种形式,一种是开篇代码中所展示的 for 循环,还有一种是 while 循环:
第一种是 for 循环,其基本形式为:
for <变量> in <序列>: <代码段 | pass>
其中,for循环可以遍历一个序列,如字符串、元组、列表等。
循环故名思意即重复,其运行就是重复执行一段代码,过程是:
1 从序列中取下一个值并赋值
2 执行一段代码
3 跳转至1,直到序列中没有下一个值
例如:
for i in ['a','b','c','d','e']: print(i)
其执行过程为:
1 给 i 赋值 ‘a’
2 输出 i 也就是 ‘a’
3 重复第1步,赋值内容为 ‘b’
4 重复第2步,输出内容为 ‘b’
……
9 重复第1步,赋值内容为 ‘e’
10 重复第2步,输出内容为 ‘b’
这样,我们便可以得到输出的结果:
在日常编写程序时,for循环同样需要注意冒号问题与缩进问题。
第二种循环是 while 循环,其基本形式为:
while <布尔表达式>: <代码段 | pass>
在 while 循环中,如果 while 后面的布尔表达式取值为 True ,则会不停运行该循环体(代码段),直到不再符合条件,如:
a = 0 while a<2: a+=1 print(a)
其执行过程为:
1 给 a 赋值 0
2 判断a<2为真,进入循环(a+1并输出)
3 此时a为1,重复第2步
4 此时a为2,重复第2步(判断a<2为假,退出循环)
注意:如果while后的条件仍然为真,会一直运行直到该条件为假为止
这样我们就可以得到结果:
如果缩进发生改变,则有所不同,如:
a = 0 while a<2: a+=1 print(a)
其运行过程为:
1 给 a 赋值 0
2 判断a<2为真,进入循环(a+1)
3 此时a为1,重复第2步
4 此时a为2,重复第2步(判断a<2为假,退出循环)
5 打印输出2
注意:打印输出的命令前无缩进,即不在while的代码段中,运行while代码段时其不运行
输出结果为:
同样的,如果缩进发生错误,则会导致代码无法正常运行,如:
a = 0 while a<2: a+=1 print(a)
会导致:
可见缩进是有多么的重要!!!
同时,在 while 循环使用的过程中如果编写不当会造成死循环问题:
while True: <代码段 | pass>
此时 while 后面的内容一直为 True,如果不加以限制则会造成死循环(无限次执行代码段中的内容)。
而要避免死循环的发生,我们可以使用 break 语句跳出,如:
a = 0 while True: a+=1 print(a) if a == 2: break
break 语句可以直接跳出循环使其停止,该例子运行过程为:
1 给 a 赋值 0
2 恒为True,进入循环(a+1并输出)
3 判断a==2为假(a为1,不进入条件)
3 重复第2步
4判断a==2为真
5 运行break,跳出循环,停止运行
此时输出:
break 同样可以用于 for 循环,例如:
for i in ['a','b','c','d','e']: if i == 'c': break print(i)
执行过程为:
1 给 i 赋值 ‘a’
2 判断i=='c’为假,不进入条件
3 输出 i 也就是 ‘a’
4 重复第1步,赋值内容为 ‘b’
5 重复第2,3步,输出内容为 ‘b’
6 重复第1步,赋值内容为 ‘c’
7 重复第2步,判断i=='c’为真,运行break停止for循环并跳出
注意:输出在break之后,虽然i赋值为’c’的周期已经运行,但是break会导致循环从该处直接停止
此时输出:
除了 break 语句,另一种可以中断循环的语句为 continue 语句。
与 break 语句不同,continue 语句只是中断当前一个循环,例如,对于 while 循环:
a = 0 while True: a+=1 if a == 2: continue print(a) if a == 4: break
执行过程为:
1 给 a 赋值 0
2 恒为True
3 执行+1,此时a为1
4 判断a==2为假,不进入条件
5 输出a(也就是1)
6 判断a==4为假,不进入条件
7 重复2,3,此时a为2
8 重复4,a==2为真
9 执行continue,该次循环中止
10 重复2,3,此时a为3
11重复4,a==2为假,不进入条件
12 输出a(也就是3)
13 重复6,a==4为假,不进入条件
14 重复2—6,a==4为真,执行break停止
注意:continue只会导致该次循环停止而不影响后续的循环
此时输出:
可以看到,在 continue 执行后,该次循环中止,但整个的while循环并未停止。
同样的对于 for 循环:
for i in ['a','b','c','d','e']: if i == 'c': continue print(i)
执行过程为:
1 给 i 赋值 ‘a’
2 判断i=='c’为假,不进入条件
3 输出 i 也就是 ‘a’
4 重复第1步,赋值内容为 ‘b’
5 重复第2,3步,输出内容为 ‘b’
6 重复第1步,赋值内容为 ‘c’
7 重复第2步,判断i=='c’为真,运行continue停止该次循环并继续
8 重复1–3步
9 重复1—3步,所有元素循环完成,停止
此时输出:
虽然条件分支以及循环这两种结构并不复杂,但是在实际的编写程序过程中,我们更多地会将其以嵌套的方式进行编写。
4 Stroop代码详细讲解
list = ['red', 'blue'] for word in list: for color in list: if word == color: condition = 'same' else: condition = 'diff' print(condition, word, color)
其执行过程为:
1 给list赋值
2 执行第一个for 循环,即变量word赋值为’red’
3 执行第二个之后执行第一个for 循环,即变量color赋值为’red’
4 执行第二个循环下的代码,即条件分支结构以及打印输出
5 返回第3步并给变量color赋值为’green’
6 重新进行第4步(在word为’red’的条件下color的赋值完成)
7 返回第2步并给变量word赋值为’green’
8 继续执行第3,4,5,6步
9 得到结果
与开头的表格相同:
可以看到,在循环的嵌套结构中,代码依旧按照循环的基本逻辑来进行运行。
在嵌套的循环中,每多一级嵌套,对应的缩进也就多一级。
并且,只有当低一级的循环全部运行完成,高一级的循环才会进行下一步赋值,并重新开始低级循环的全部运行过程。
5 系列课程的总结
至此,我们已经学习了Psychopy入门、数据类型与运算符、条件与循环。
基本学完了 Python 在 Psychopy 中需要用到的大多数知识,虽然难度不是很大,但是比较繁杂,建议通过练习以熟悉这些基本的语句和方法。
PS: 本文首发于微信公众号行上行下,后台回复关键词 psychopy第2期 即可获得所述的资料及代码啦!
Psychopy | 第2期:从Stroop看条件与循环相关推荐
- Psychopy | 第4期:实验数据的收集与处理
Psychopy | 第4期:实验数据的收集与处理 1 相关概念的简单引入 2 被试信息录入 3 反应时记录 4 正确率记录 5 完整代码展示 6 系列课程的总结 Hello, 这里是行上行下,我是喵 ...
- python基础课程2(看代码看注释)--条件判断|循环|函数|生成器|类
##人生苦短,我用python ##课程内容 #条件判断 #循环 #类:简单介绍类的用法##条件判断 #if condiction:# dosomething #else: # dosomething ...
- 含类定义的完整python程序_Python——变量,运算,条件,循环
Python Python开发 Python语言 Python--变量,运算,条件,循环 注释 1.注释是什么 注释就是给代码做的一些简短的说明,让我们更好的去理解代码,注意程序执行的时候,不会去执行 ...
- Vue框架之条件与循环的使用
如果是初学者的话,这里先给你一个基础知识的框图,可以了解一下下面代码的由来. 也可以选择我这个链接Vue条件与循环跳转到Vue官网进行学习. 上面是Vue的一个简单案例,不要急,进阶版来了,通过这个框 ...
- Python基础(6)--条件、循环
本文的主要内容是 Python 的条件和循环语句以及与它们相关的部分. 我们会深入探讨if, while, for以及与他们相搭配的else,elif,break,continue和pass语句. 本 ...
- python基础语言与应用第五章_Python基础教程读书笔记(第5章—第6章:条件、循环和其他语句;抽象)...
第五章:条件.循环和其他语句 1:print 和 import 的更多信息 1)使用逗号输出--打印多个表达式,只要将它们用逗号隔开就行: >>> print('Age:',42) ...
- Python基础教程读书笔记(第5章—第6章:条件、循环和其他语句;抽象)
第五章:条件.循环和其他语句 1:print 和 import 的更多信息 1)使用逗号输出--打印多个表达式,只要将它们用逗号隔开就行: >>> print('Age:',42) ...
- Python教程学习简记1--Python数据类型和变量 字符串和编码 list和tuple 条件判断 循环 dict和set
本文主要是学习Python基础: Python数据类型和变量 字符串和编码 list和tuple 条件判断 循环 dict和set 本文根据廖雪峰的官方网站-Python教程,认真学习,一步一步实操并 ...
- 第四篇:python基础之条件和循环
阅读目录 一.if语句 1.1 功能 1.2 语法 1.2.1:单分支,单重条件判断 1.2.2:单分支,多重条件判断 1.2.3:if+else 1.2.4:多分支if+elif+else 1.2. ...
最新文章
- OpenMP知识点汇总
- ORB-SLAM中的ORB特征(提取)
- 清华旷视让全连接层“内卷”,卷出MLP性能新高度
- linux 脚本发邮件短信,shell 监控脚本 短信告警
- python学习手册条件-总算晓得python学习手册正式版
- 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 一 )
- 在整个数据库中查找包含某关键字的所有存储过程
- FreeMarker标签与使用
- 简单了解阿里云Web应用防火墙(下篇)
- proc除了能用于oracle开发_能不能用于mysql开发_MySQL 和 Oracle Enterprise Manager 开发人员 VM...
- 个人展示-LICHUNHUI
- Android安卓备份还原
- 闽南歌歌词有一句电子计算机,一首闽南歌,有一句歌词是(提起男儿的志气)歌名是什么?...
- Systemverilog always_comb 过程块
- Using platform encoding (UTF-8 actually) to copy filtered resources错误
- python爬取58同城租房信息
- python实现转置矩阵_用Python转置矩阵?
- 223611-42-5,S-acetyl-PEG4-alcohol含有硫乙酰基的PEG连接剂
- java入职写不出代码_各位程序员是怎么度过看懂代码但写不出来的时期?
- CRPR能补偿crosstalk吗?