本节书摘来自华章计算机《Python语言程序设计》一书中的第3章,第3.3节,作者:[美]梁勇(Y. Daniel Liang) 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.3 字符串和字符
关键点:字符串(第1章讲过)是一连串的字符。Python处理字符和字符串的方式是一样的。
在Python里,你除了可以处理数值,还可以处理字符串。一个字符串就是一串包括文本和数字的字符。字符串必须被括在一对单引号( ' )或者双引号( " )里。Python没有字符数据类型。一个字符的字符串代表一个字符。例如:
![30949486ba48790ebb0da31cb4ba7685f4bd6ea4](https://i-blog.csdnimg.cn/blog_migrate/fb9c29cb838c0117a7b0eb509f5c6a9f.png)
第一条语句将只有字符A的字符串赋值给变量letter。第二条语句将只有数字字符4的字符串赋值给变量number。第三条语句将字符串“good morning”赋值给变量message。
注意:本书统一使用双引号来括住多个字符构成的字符串,用单引号来括住单个字符的字符串或空字符串。这个习惯与其他程序设计语言是一致的,因此很容易就能让你将一个Python程序转换成其他语言程序。
3.3.1 ASCII码
计算机在内部是使用二进制数的(参见第1.2.2节)。在计算机里,一个字符被存储为一连串的0和1。把一个字符映射成它对应的二进制被称为字符编码。对字符编码的方式有很多。编码表定义编码字符的方式。流行的编码标准是ASCII(美国信息交换标准代码),它是一个比特的编码表,足以表示所有的大小写字母、数字、标点符号以及控制字符。ASCII码使用0到127来表示字符。附录B中给出ASCII码表示的字符。
3.3.2 统一码
Python也支持统一码。统一码是一种编码表,它能表示国际字符。ASCII码表是统一码的子集。统一码由统一码协会(Unicode Consortium)建立,支持世界上各种语言所写的文本进行交换、处理和展示。一个统一码以“u”开始,后面紧跟四个十六进制数字,它们从“u0000到uFFFF”(有关十六进制数的信息参见附录C)。例如,“welcome”被翻译成中文后就是两个字符:“欢”和“迎”。这两个字符的统一码表示是“u6B22u8FCE”。
程序清单3-3中的程序显示两个中文字符和三个希腊字母,如图3-1所示。
程序清单3-3 DisplayUnicode.py
![ce5329e704ecbd814028c39d33a46ca4ab340b94](https://i-blog.csdnimg.cn/blog_migrate/5cd8a36e873ec103d4b0f56022b5823a.png)
如果你的系统里没有安装中文字体,你将看不到相应的中文字符。在这种情况下,为了避免错误,就从你的程序里删除“u6B22u8FCE”。希腊字母α、β、γ的统一码表示是“u03b1”、“u03b2”和“u03b3”。
3.3.3 函数ord和chr
Python提供ord(ch)函数来返回字符ch的ASCII码,用chr(code)函数返回code所代表的字符。例如:
![326b272cfa4c0043530193499a17a3a584df4aae](https://i-blog.csdnimg.cn/blog_migrate/507c98e4b7511cd92b38acc30b814a17.png)
a的ASCII码值是97,比A(65)的编码值要大。小写字母的ASCII码是从a开始,然后是b、 c依次类推直到z的连续整数。大写字母也是一样的。任何小写字母的ASCII码与它对应的大写字母的ASCII码的差值都一样:32。这是一个很有用的处理字符的特性。例如,任何小写字母的大写字母,如下代码所示:
![cbf7442810d6ecdef61ecb2267ffb00b267bad76](https://i-blog.csdnimg.cn/blog_migrate/8e0046c7204c5179afb432d0322b592e.png)
第六行将一个小写字母赋值给lowercaseletter。第七行获取它对应的大写字母。
3.3.4 转义序列
假如你想输出带有引号的字符串。你能编写如下所示的语句吗?
" >
答案是不行!这条语句有一个错误。因为Python认为第二个双引号就是这个字符串的结尾,因此,它就不知道该如何处理剩下的字符。
为了解决这个问题,Python使用一种特殊的符号来表示特殊的字符,如表3-3所示。这种由反斜杠“”和其后紧接着的字母或数字组合构成的特殊符号被称为转义序列。
字符“n”也被称为换行符或行结束(EOL)字符,它们表示一行的结束。字符“f”让打印机从下一页打印。字符“r”被用来把光标移动到同一行的第一个位置。字符“f”和“r”在本书中很少被用到。
现在,你可以使用下面的语句打印带引号的消息:
" >
注意:符号和"在一起代表一个字符。
3.3.5 不换行打印
当使用print函数时,它会自动打印一个换行符,这会导致输出提前进入下一行。如果你并不想在使用print函数后换行,可以使用下面的语法在调用print函数时传递一个特殊的参数end =“anyendingstring”:
" >
例如,下面的代码:
![1d608609084dcfcb7321382c2370fc9161fe834d](https://i-blog.csdnimg.cn/blog_migrate/8b6a8e511eec1aa28e589b43565ad008.png)
显示:
" >
第1行打印AAA和一个空字符' ',第2行打印BBB,第三行打印CCC和 ,第4行打印DDD和。注意:第2行的' '表示一个空字符串。所以,' '不会打印任何内容。
你也可以使用下面的语法使用end参数打印各项条目:
" >
例如:
![1bfdc00e02e462f0ad9d00eb0e450d7a3055e3fe](https://i-blog.csdnimg.cn/blog_migrate/305f04e13ffebf4566bba98d3ccb95d5.png)
显示
![596d7e0897b13288f1bba5841d54841ed80030dc](https://i-blog.csdnimg.cn/blog_migrate/815b3b4006f11ebd9e69114a6c97c350.png)
3.3.6 函数str
str函数可以将一个数字转换成一个字符串。例如:
![73034d85e090e1291c56f6c217faf7f27ece4a76](https://i-blog.csdnimg.cn/blog_migrate/14378e019a0ecbdfc841e9d77b6444ac.png)
3.3.7 字符串连接操作
你可以使用运算符+来对两个数字做加法。你也可以使用+运算符来连接两个字符串。下面是一些例子:
![3043a58be3bc33ed7d6bfeace747d86269276cf6](https://i-blog.csdnimg.cn/blog_migrate/3c57b73d25d86e6f65e54fd44705fffa.png)
第1行把三个字符串连接成一个。在第5行,str函数将变量chapterNO中的数值转换成一个字符串。这个字符串与“Chapter”连接在一起得到一个新字符串“Chapter 3”。
增强型赋值运算符+=也能用来连接字符串。例如:下面的代码就将字符串“message”与字符串“and Python is fun”连接在一起。
" >
3.3.8 从控制台读取字符串
为了从控制台读取一个字符串,可以使用input函数。例如:下面的代码从键盘读取了三个字符串:
![a6e7983a7e6add39439876e9c4dcebc64fcdc8bf](https://i-blog.csdnimg.cn/blog_migrate/4f37835e0e28b8991eb8cbb946357307.png)
检查点
3.5 使用ord函数找出1、A、B、a和b的ASCII码,使用chr函数找出十进制数40、59、79、85和90所对应的字符。
3.6 如何显示字符和"?
3.7 如何用统一码编写一个字符?
3.8 假如运行下面程序的时候输入A。那么输出什么?
" >
3.9 假如运行下面的程序的时候输入A和Z。那么输出什么?
![b997ea0ce467e0924d66e9d6e25a0ca02c3c2220](https://i-blog.csdnimg.cn/blog_migrate/bee4279af25deadb19671fa716085f42.png)
3.10 下面的代码错在哪里?你能改正吗?
![f4e11509686c4d5d5984bd02b864b63dcd89926f](https://i-blog.csdnimg.cn/blog_migrate/d120b30e6139e75d436871d3f4eb7f9a.png)
3.11 显示下面代码的结果。
![7263f5396c3f0af05c38f05365bce15a98eb6ef9](https://i-blog.csdnimg.cn/blog_migrate/ee317438e7a23bf85961fbac8e5ce26b.png)