7A: 字符串

第7节课有三个部分:A,B,C。没有顺序。

目前为止,我们只是简单的使用了字符串(类型是str)。这门课我们会对字符串做出一些处理:分离、组合字符,查看字符串中单独的字符

什么是字符?

计算机里的数据基本上都是以 0 和 1 的序列形式储存的:比如文本,电子书,图片,歌曲,视频,"可执行文件"如游戏和应用。字符串是一种文本数据,以如下形式储存:

  • 字符串是一系列字符组成的(比如,字符串"Hello, World!"包含13个字符,如"H","e"和标点" ","!"。
  • 每个字符实际上由一个数字表示("H"是由40表示;这是美国信息交换标准代码/统一码

(数字是以0-1二进制形式储存。)

将字符串看作为字符的序列: S[]

为了对字符串进行操作,我们需要提取出字符串里的每个字符。在Python中,这是以如下方式进行:我们有一个字符串S和一个整数index

S[index]
返还了字符串S中的第index位字符。按照惯例,字符串以索引0开始:所以S[0]是第一个字符,S[1]是第二个字符,以此类推。在"Hello, World!"中:

索引:0  1  2  3  4  5  6  7  8  9 10 11 12
字符: H  e  l  l  o  ,     W  o  r  l  d  !
注意:索引6是空格。

在很多其他的编程语言中,字符另有一个类别。在 Python 中,字符是长度为 1 的字符串,所以他们的类型 是 str。

得出字符串的字符个数:len

为了得到字符串中的字符个数,我们使用Python中的方程len。比如,len("Hello, World!")得出13。

选择题练习: 最后一个字符
哪一个代码可以用来得出字符串S最后一个字符?
正确!虽然len(S)得出字符串的字符总数,但因为索引是从0开始,最后一个字符的索引是len(S)-1

下面是一个使用len[]的例子。

示例: 字符串长度和字符

截取字符串:S[:]

截取字符串的某一部分会给你一个子链。比如,字符串"eat"和"ted"是"repeated"的子链。为了在Python中提取出一个子链,我们要用到

S[firstIndex:tailIndex]
来获得子链,从索引firstIndex开始到tailIndex-1结束。在运行下列程序前先想一下下列程序的输出都是什么。
示例: 子字符串

注意在截取子链的时候,firstIndex是包括在子链里的,而tailIndex是不包括的。这是一个常犯的错误。然而,它也有一些好的作用。比如,因为这种形式,子链 s[i: j]的长度是总是 j-i。这一管理常常被描述成一把尺子:

编程练习: 字符串剔除
写一段程序使其使用input()读取字符串,输出的字符串不要第一个和最后一个字符,其余的不变。(假设原字符串长度至少是2)比如,inputFairy会打印出air
你可以在下面的框中输入程序的输入。

粘贴字符串:+

我们知道1+2=3。对于字符串来说,我们却得到的是如下结果:

示例: 字符串加法

正如你所看到的那样,S+T会得出一个由ST依次连接的新字符串。这个字符串粘贴操作也叫做连接符

编程练习: 头和尾巴
编写一个程序来用input()读取一个字符串,输出的字符串第一位和最后一位均互换,其余的一致。(假设输入的字符串长度至少为2)。例如,输入Fairy会打印出yairF。提示:答案与上一题有部分重叠。
你可以在下面的框中输入程序的输入。

如果想要连接数字,那么就需要先把数字转换为字符串。否则的话就会得到两种错误中的一个,根据你尝试的顺序。运行这个程序,观察会得到什么错误。
示例
重新排列行的顺序,会得到两种连接错误
  • print("high " + 5)
  • print(110 + " percent")
这是一个正确的例子:str()方程可以在连接前使数字转变成字符串。
示例
通过使用str()将数字转变成字符串

正如我们在第四课提到的那样,你可以将字符串与整数相乘:S * n 代表S + S + ... + S

示例
字符串相乘

字符代码:ord, chr

在我们这节课的序中提到了计算机将每个字符用数字表示。那么到底哪一个数字代表了哪一个字符呢?通常来说取决于你的电脑使用的编码,但是现在几乎所有的计算机都使用一套通用的从32到255的编码。下面是一系列从32到127的编码及所代表的字符:

ord: 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
chr:      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
ord: 48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
chr:  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
ord: 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
chr:  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
ord: 80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
chr:  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
ord: 96  97  98  99  100 101 102 103 104 105 106 107 108 109 110 111
chr:  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
ord: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
chr:  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~
在之后的第八节课里,你将编写一个程序来导出这个表。
将整个表都记住其实没有很大用处,但是有一些数据记住的话会有帮助:

  • 小写字母a, b, c, ..., z字符代码是连续的
  • 大写字母A, B, C, ..., Z字符代码是连续的
  • 数字0, 1, 2, ..., 9字符代码是连续的

32代表空格,127代表“控制”字符(比较特殊)。有一些控制字符,如9代表tab,10 和13代表换行.

在 Python 中,你可以通过使 用 ord 方程将一个字符转变为 相应的数字编码。chr方程做得是相反的事情:将一个数字转变为相应的字符。

示例
ordchr的例子

编程练习: 下一个字母
编写一个程序,输入一个字符(长度为1的字符串),假设这是一个大写的字符;输出应为字母表中的下一个字符。如果输入的是'Z',输出应为'A'。(需要使用到if从句。还有一个提示点击这里)
你可以在下面的框中输入程序的输入。

有一些系统只支持从32到127之间可打印的字符;其他的程序接受的可打印的字符可达255或65535;通用码中有成千上万个字符。here or 这里有更多关于这个的历史。

下面是两个练习题。

编程练习: Pig Latin
Pig Latin是一种语言。将英语翻译成Pig Latin语,你需要将第一个字母移到最后,再加上"ay"。比如,monkey翻译成Pig Latin就是onkeymayword就是 ordway。编写一个程序使将一个单词转换成Pig Latin语。(现实中,Pig Latin语的规则比这个要复杂得多,但是在这里我们忽略掉其他规则。)
你可以在下面的框中输入程序的输入。

编程练习: 名字游戏
Name Game会以一个人的名字为基础编一首歌。请听歌曲来了解是怎么一回事:
你的程序的输入是一个人名,比如"pearl",打印出歌曲:

pearl, pearl, bo-bearl
banana-fana fo-fearl
fee-fi-mo-mearl
pearl!
注意:未改动的名字出现了三次;首字母被换成b, f, 或m也出现了三次。(实际上,这个歌曲的规则比这个要复杂得多,但是在这里我们忽略其他规则。)
你可以在下面的框中输入程序的输入。

该学习下一节课啦!