查看原文
其他

第1期 | psychopy:数据类型及运算符

喵君姐姐 壹脑云科研圈 2022-10-07


Hello,这里是行上行下,我是喵君姐姐~


上期我们邀请阿槑讲解了psychopy入门,今天继续邀请阿槑进行相关知识的讲解哟~

psychopy是基于python来进行编写以及运行的,而python中,数据类型及其运算是最为基础的知识。本期就给大家介绍在编写心理学实验过程中比较常用的数据类型以及其适用的运算方法。

先拍思维导图

 


在行为实验编写过程中,常用的数据类型包括字符串,整型,浮点型,元组,列表,字典

因为这一部分涉及的内容与方法比较多,因此这里只介绍在心理学实验编写过程中最常用的相关内容。
 
1 字符串

对于字符串,在我们推送的第0期中已经有过一些介绍,当时我们以'psychology' 为例介绍了字符串的基本形式(psychopy coder入门,点击即可跳转哟)。

同时,在Python中,字符串是可以进行运算的。比较常用的是字符串的相加以及字符串与整数的相乘。

注:在本文中,操作基本是在Shell中完成的,>>> 后是输入的内容,无 >>> 标记的为回车后输出内容。下同:


在例子中我们可以看到,字符串之间相加就是将加起来的每一部分拼在一起,而字符串与整数的相乘则是把内容重复相应的次数。

需要注意的是,字符串只有这两种简单的运算方式,其余方式如减、除等都会报错。
 
2 整型

所谓整型,可以将其简单地理解为整数。在python中,所有的数学基本运算形式在python中都可以直接实现。比如,当我们在Shell中输入3+2,回车就可以得到5这一结果。同样的,我们在脚本中输入以下内容, 也可以在Output得到同样的结果。

a = 3+2
print (a)

在python中,包括加,减,乘,除,乘方,括号等基本运算形式都可以直接通过输入相应的算式来进行运算。python的运算符主要分为四个大类:

首先是算术运算符,就是我们平时常用的加(+),减(-),乘(*),除(/)等。

需要注意的是,除法在python2(psychopy2)和python3(psychopy3)中的规则有些许差异。

python2(psychopy2)的环境下,运算中的小数位数(尤其是除法)取决于除数与被除数的小数位数,如 3/2 会得到 1 ,而 3.0/2 或者 3/2.0 会得到1.5。

与之相对,在python3(psychopy3)环境下则不会出现这个问题, 3/2 可得 1.5,如果想在此环境下得到类似于python2(psychopy2)的结果,则需使用准确除(//)来进行运算,如3//2就可得到1。

另外,乘方的表示方法为(**),也就是说,2**3 是指 2 的 3 次方,从Shell中我们可以直接得到结果 8。

还有一个平时比较少见的运算方法是取余(%),当我们在Shell中输入 3/2 时,我们可以得到结果 1.5,而当我们输入 3%2 时,我们会得到 3/2 运算过程的余数 1。

第二类是赋值运算符,这一类基本是以 = 来进行变量的赋值,如之前的脚本中,我们先将 a 赋值为 3+2 的运算结果,然后通过 print 将这一结果输出出来。

a = 3+2
print (a)

赋值运算中存在比较特殊的一种表达形式,当我们需要进行类似于运算 a = a+5 时,我们可以直接将其简写为 a+=5,这一方法在四则运算的任何一种运算形式中都适用。

值得注意的是,如果在Shell中直接输入 a+=5 ,将会报错 name 'a' is not defined. 也就是说,在使用这一运算时需要先给 a 赋值,对于单独的 a = a+5 来说,等号右边的 a 是没有被定义的,在访问时会出错,也就无法进行进一步的运算。

第三类是比较运算符,主要包括等于(==),不等于(!=),大于(>),小于(>),大于等于(>=),小于等于(<=)。

这一类运算符可以得到符号两边的内容是否符合规则,比如,当我们在Shell中输入 1==2 时,就可以得到 False 这一结果,而输入 1<=2时,则可以得到True这一结果:
 

最后一类被称为逻辑运算符,主要包括 and, or, not 三类。

其中,and 的两边都为True 时,才会得到 True,如:
 

or 的两边只要有一边为 True 时,就可以得到 True:
 

而 not 则是将 True 和 False 之间进行相互转化。
 

3 浮点型

浮点型从直观上来看就是小数,整型中涉及的所有运算在浮点数中也都适用,虽然看起来整型与浮点型都是数字,但是在python中二者属于两种不同的数据类型。

此外,整数和浮点数之间可以正常的加减乘除运算,但是其无法与字符串进行运算(字符串与整数相乘除外)。
 

要想使二者顺利相加,需要将整型或浮点型转化为字符串,用方法str()进行转换。


同样的,字符串想要转化成整型或浮点型则需要用 float() 或 int() 来进行转换。

当使用float()方法进行转换时,转换出来的是浮点型的形式:
 

如果想要获得整型,则需要继续使用 int() 函数去掉小数:


或者,int()也可以直接将是整型数字形式的字符串转化为数字:
 

但是浮点型的字符串并不能这样转化
 

此外,int() 函数在去除小数的时候并不遵循四舍五入的原则,而是直接去掉小数部分
 

4 元组

所谓元组,其形式是小括号中存在的一组内容,可以是数字,也可以是字符串,比如:

(11.8, 11, 'psychology')

元组最大的特点在于内容固定,无法修改或去除元素。

对于元组来说,可以做的常用操作包括计算元素个数,连接,重复,成员运算符,按索引访问以及查找索引。

计算元素个数可以使用 len() 来进行操作,如:
 

连接类似于字符串;
 

重复同样与字符串类似;
 

当我们想判断某个元素是否在该元组中时,我们可以用成员运算符(in或not in)进行操作。
 

当我们想要访问元组中某个元素时,我们可以通过元素的索引进行访问,与我们一般的习惯不同,Python中元素的索引从0开始计算的,对于:

(11.8, 11, 'psychology')

这一元组,11.8位于第0位,11位于第1位,'psychology'位于第2位。

因此,当我们想访问11时,我们可以通过位置得到:
 

注意,在访问特定位置时位置标号使用的是中括号。

对于元素比较多的元组,如果我们想取元组中的一部分元素,可使用划分(切片)的方式从元组中取一组连续的元素,同时这种方式将会产生一个新的元组,其格式与访问单个元素不同的地方是有一个冒号,例如:


可以看到,对于冒号两边的位置序数来说,遵循左闭右开原则,即在例子中1<=索引序数<5,即 1,2,3,4 号位被划分出来。

特殊的,如果想划分从开头到某一位置的元素或从某一位置元素开始到最后的所有元素,则可直接:


同样遵循左闭右开原则
同理
 

按索引访问还有一种比较少用的方法即使用负数;
 

而查找索引,类似于按索引访问的逆运算,即通过某一内容来得出该内容所在的位置序数;


如果元组中有重复的元素,index() 则会得出该元素第一次出现的位置;



元组还有一个特殊的地方在于当只有一个元素时需要在元素后加逗号才能构成元组,否则只能输出为数字或字符串,如:


5 列表

相对于元组,列表形式是更为常用的形式。

从直观上来看,列表与元组的区别之一在于列表是用中括号来包括它的元素,如:

[11.8, 11, 'psychology']

列表与元组相似,所有元组可以进行的包括计算元素个数,连接,重复,成员运算符,按索引访问以及查找索引等操作对于列表都可以进行,且使用方法基本一致。

除了这些基本的功能外,列表还可以进行添加,删除,反序操作

添加我们一般使用列表对象的append()方法进行,这一方法是在列表的尾部添加新元素:


如果要在某个位置添加新元素,则使用insert(),其中第一个参数为位置,第二个参数为内容:


与添加相对,删除我们可以使用pop()方法来进行操作,pop()的对应参数是具体的元素位置,它会首先返回该位置的元素,并将改元素删除,如果不写数字,则默认为删除最后一个元素:


删除的另一个方法是 remove(), 与pop() 不同,remove()方法的参数是具体的元素内容,且当有重复元素时,删除第一个匹配的元素:


反序则使用方法 reverse()


6 字典

还是先从直观上来说,字典是用大括号来包括元素的,并且每个元素都是 关键字:值(key:value) 这样的形式,如:

{'Bob':'psychology', 'Mike':30, 'Alice':[1,2,3]}

其中,关键字只能是不可变变量(如字符串、整型、浮点型、元组);与之相对,内容的形式不限。

一般来说,关键字会使用字符串的形式。需要注意的是,在一个字典中,关键字只能有一个,但是不同的键可以对应相同的值。

与元组与列表不同,字典有其独特的规则。

首先,在访问时不能使用索引进行访问,而要通过关键字来进行访问,如:


其次,移除字典中的元素使用 del;


或者,与列表相似,使用pop()方法;


最后,修改或添加可以在类似于关键字索引来进行,如:

修改


添加


到此,Python中常用的运算与数据类型已经基本介绍完毕。

虽然内容比较多,但是以上介绍的规则在后面的心理学实验编写过程中都会常用到。

当然,无论是字符串,数字,还是元组,列表,以及字典,其操作的全部规则与内置方法还有很多,如果有兴趣可以通过Python的官网 www.python.org 或者其他途径搜索获取。

在自己尝试操作中,这一部分建议直接在Shell中进行操作即可。

PS:后台回复关键词psychopy第1期即可获得所述的资料及代码啦!


作者:阿槑

排版:喵君姐姐



第0期:psychopy coder入门
中英文期刊分区介绍及查询方法
非常时期专项调查 | 中国文化心理大调查第二期
Neuroimage | 孤独症与功能近红外光谱(fNIRS)

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存