Python
让Python成为语言研究的利器
Xu & Yang
PhoneticSan
学习参考
Python for Linguists
Natural Language Processing with Python
Introducing Python
Learning Python
Python教程(廖雪峰)
··· ···
Recap
Python可控制的数字型数据包括整数型、浮点型和复数型,其中浮点型即为小数。
与其他程序语言类似,字符型数据需要放在单引号或双引号之中,也可以通过这种方式把数字(默认数字型)变为字符串。
列表是一种单一有序结构,使用append( )函数可以添加元素,insert( )函数插入元素,pop( )函数可以删除元素。
元组(tuple)和列表类似,最大的不同之处在于元组是不可更改的,因此安全性较之列表更高。
字典(dictionary)是最常见的类型,基本构成是{key:value},可以通过key进行索引。
Python:
https://www.python.org/
IDE: Pycharm、VSCode、Anaconda
https://www.jetbrains.com/pycharm/
https://code.visualstudio.com/
https://www.anaconda.com/
文本编辑器:Sublime、Atom
https://www.sublimetext.com /
https://atom.io/
之前我们介绍了各种数据类型,都是比较简单的输入,把Python当作了一个“高级计算器”而已。今天我们介绍程序语言中的控制结构,也是大部分语言通用的几个控制结构:条件结构和循环结构,前者使用if条件句,后者使用for循环或while循环语句,下面我们一一说明。
Python
Linguistics
1
if条件结构
条件结构又被称为分支结构,可以通过判断实现不同的结果。在高中数学课中,我们学到的流程图里,就有这样的结构。在Python中,条件结构的基本构造是if...else...(两个条件),如果有多个条件,那么结构为if...elif...elif...else...,其中的elif可以不限添加。条件为真,执行结果输出;条件为假,则执行else/elif下的结果或条件,进行输出或判断,以此类推。需要注意的是,if/elif写完条件后,以及else之后,务必加冒号。在一个if条件结构下可以继续嵌套新的if条件句。
条件结构图示
我们以一个简单的例子开始。首先我们设置一个变量x,赋一个字符值hat,判断第一个字母是不是a。如果是,输出个congratulations;如果不是,输出其他内容。需要时刻注意,Python计数是从0开始,因此判断x的位置应当是x[0]而不是x[1]。因为第一个字母不是a,所以它走的是第二条路。如果改成其他单词(比如at),那么它判断为真,则直接输出结果。可以看到,if条件结构是只要满足条件,就会输出结果,而不会继续走余下的其他语句。
一个简单的条件结构
在大多数情况下,我们会希望用户自己输入相关内容,然后对条件进行判断,进一步执行代码。解决办法很简单,使用input( )函数进行设定即可。该函数默认输入的是字符型数据,如果需要变为其他类型的数据,比如整数型,则需要再调用int( )函数多写一句即可。
让用户输入数值进行判断
最后,我们为大家提供条件判断常用到的几种运算符。时刻需要注意的是,if和else/elif下的语句需要缩进。在绝大多数的编程软件中会默认缩进,如果没有,使用tab键缩进即可。
条件结构中的运算符
Python
Linguistics
2
for循环结构
循环结构的实现方式有两个,我们首先介绍for循环。for语句的基本构成很简单,即for...in...,在循环中写上需要执行的语句。可以看到,for循环适用于循环次数已知的情况。
for循环结构示意
同样,我们以一个简单的循环的循环结构开始。假设我想计100以内数值和,那么循环次数(循环的开始和结束)都是已知的,因此使用for循环可以简单实现。同样地,首先设置好变量,100以内的表达方式可以使用range( )函数。时刻注意Python计算是从0开始,因此range( )函数中应为101,代码如下所示:
a = 0for i in range(101): a = a + iprint(a)
在执行过程中,计算机读到a的赋值为0,进入循环,首先判断i是不是还在100以内(这里i表示循环次数)。在,执行a=0+0=0(第一个数为0),继续进行循环,直到i的数值超过了100,则跳出循环,输出结果5050。
for循环结果输出
下面我们把if结构和for结构结合起来试一试。假设我想要实现一个程序,检索输入的单词中存在几个元音。在开始前,我们建议先试着画一画流程图,尝试以计算机思维去考虑。
首先要做的,就是定义“元音”(变量),即告诉计算机哪些是元音,这样它才能进行判断有几个元音。比如,我定义元音包括aeiou五个字母,只要有这五个中的一个,就算一次。接着,用户输入的单词需要放在一个变量名里。紧接着需要定义循环次数,以便循环结构知道到第几次就该跳出来,而这个循环次数与单词长度有关。在这个循环结构里,计算机还要进行判断,判断是不是元音。怎么判断?因为我们最开始定义了,因此只需要判断这个位置的字母是不是最开始定义的“元音”这一变量中的元素即可。如果画出流程图,那么大概如下所示。
流程图示意
接下来,就是把这一步步的思路改写为程序语言,具体代码如下,每一句都附有了相关注释:
vowels = 'aeiou' # 定义元音vowelsCount = 0 # 定义元音初始个数word = input('Please input your word: ') # 存放用户输入的单词for letter in word: # 循环次数以word为准 if letter in vowels: # 判断字母是否在元音集合中 vowelsCount += 1print(vowelsCount)
其中,+=表示加上后面的数值后再重新赋值给vowelsCount。运行后,可以发现下面的控制面板出现了让用户进行输入的提示。比如输入单词linguistics,它通过运行程序输出了相应的结果。程序没有报错,因此我们的这个小程序成功了。
计算元音个数的程序
R Project
Linguistics
3
while循环结构
上面我们提到,for循环结构的使用前提是循环次数已知。而在很多情况下,循环多少次,什么时候开始什么时候结束,这是一个未知数。因此,while循环结构的优势便体现了出来。这两种循环结构本质上是一样的,它们的效力也是相当的。while循环语句的基本结构为while...,然后执行相关语句。
由于while语句的基本原理与for相类似,因此我们直接以刚刚的程序语言为例,把其中的for语句改为while语句进行实验。前面的变量定义肯定不变,变化的地方就在于判断循环的语句上。for循环是遍历循环次数,当大于单词长度后跳出循环(break)。while循环则是只要循环次数小于单词长度,我就一直循环下去。那么,我们的代码可以进行如下的变化:
vowels = 'aeiou' # 定义元音集合word = input('Please input your word: ') # 输入单词counter = 0 # 设置循环次数vowelsCount = 0 # 设置元音计数初始值while counter < len(word): # 开始while循环 if word[counter] in vowels: # 进行条件判断 vowelsCount += 1 # 元音计数 counter += 1 # 循环次数增加print(vowelsCount) # 输出结果
不难发现,在while循环中,我们要定义好循环次数的初始值,从而让计算机知道什么时候是在“允许的最大循环次数”之内。在判断中,我们从word这个变量中提取对应位置的字母进行判断,最终输出结果是一样的。
while循环结构
本期主要介绍了两种控制结构:条件结构和循环结构。在这两种结构中,还有许多其他的可操作内容,这在之后的推送中会一一介绍。在熟悉了这两种结构后,你就可以开始写一些比较简单的程序了。
—END—
排版:Xu & Yang