![Python王者归来](https://wfqqreader-1252317822.image.myqcloud.com/cover/412/31794412/b_31794412.jpg)
3-4 字符串数据类型
所谓的字符串(string)数据是指两个单引号(')之间或是两个双引号(")之间任意个数字元符号的数据,它的数据类型代号是str。在英文字符串的使用中常会发生某字中间有单引号,其实这是文字的一部分,如下所示:
This is James's ball
如果我们用单引号去处理上述字符串将产生错误,如下所示:
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P39_28802.jpg?sign=1739226631-dmFeBMQgdTXw6JkQGUMfKOVSAZwFjNkm-0-869ca83f12e2ca2febc091669201e570)
碰到这种情况,我们可以用双引号解决,如下所示:
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P39_28805.jpg?sign=1739226631-SYiQdTlEwU6yzkcAVpD1EptH13d1CiVJ-0-6cdcb75b773faf62893836870282acdb)
程序实例ch3_13.py:使用单引号与双引号设定与输出字符串数据的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P39_28808.jpg?sign=1739226631-8xQtoqM1Mq6cnfsu3HDpj8dOAMzmKoFj-0-afe7bb203dbcd2e82830f645ab2f07dc)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P39_28814.jpg?sign=1739226631-7fUxZNCKyI1zgnRhNqjNFz0FaQfPIZaW-0-0c5ceda15a6cdbe91d2729e29d0b2ece)
3-4-1 字符串的连接
数学的运算符“+”,可以执行两个字符串相加,产生新的字符串。
程序实例ch3_14.py:字符串连接的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P39_28818.jpg?sign=1739226631-SMct3vXBRhEywvHltjEk9hpq38LGaGSD-0-b2ae87970f1b2fccc3a997f8c0db9e29)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P39_28824.jpg?sign=1739226631-wwPemZLyLSDXL92ROh93TOhAfxcz6Yr9-0-f84f2c05a23713574f3f48c0db7db5a7)
3-4-2 处理多于一行的字符串
程序设计时如果字符串长度多于一行,可以使用三个单引号(或是三个双引号)将字符串包夹。
程序实例ch3_15.py:使用三个单引号处理多于一行的字符串。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P39_28828.jpg?sign=1739226631-awhIXJyBOdoDgbQD1Z2aXzTIh4RMWtAx-0-32bb3dfd839f8c1812359e018fde9f6a)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P40_29233.jpg?sign=1739226631-6fwIf8MO86dF5dx2jpqn1orsNUCrF9bX-0-57764a510f39005049a3d97a1f314094)
读者可以留意第2行Silicon左边的3个单引号和第3行末端的3个单引号。
3-4-3 逸出字符
在字符串使用中,如果字符串内有一些特殊字符,如单引号、双引号等,必须在此特殊字符前加上“\”(反斜杠),才可正常使用,这种含有“\”符号的字符称逸出字符(Escape Character)。下表Hex值是指ASCII值。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-T40_238596.jpg?sign=1739226631-bzfkYzO3u1858JgXzGB783p6SY4R69P8-0-136f1b984fd444b39dbf1340f27aa511)
字符串使用中特别是碰到字符串含有单引号时,如果是使用单引号定义这个字符串时,必须要使用此逸出字符,才可以顺利显示,可参考ch3_16.py的第3行。如果是使用双引号定义字符串则可以不必使用逸出字符,可参考ch3_16.py的第6行。
程序实例ch3_16.py:逸出字符的应用,这个程序第9增加“\t”字符,所以“can’t”跳到下一个Tab键位置输出。同时有“\n”字符,所以“loving”跳到下一行输出。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P40_29436.jpg?sign=1739226631-LKYxn7lTLZWUIrUi4fTeZ0WiNnJDGF6g-0-225b03ef6e8fb1beeb419e0e611418fa)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P40_29442.jpg?sign=1739226631-97eOQHQxs5SvV701OGA08khWxDkoLt4d-0-5e3cc28531712ee801fe3d5b9f58a2cc)
3-4-4 强制转换为字符串
str( )函数可以强制将数值数据转换为字符串数据。
程序实例ch3_17.py:使用str( )函数将数值数据强制转换为字符串的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P40_29446.jpg?sign=1739226631-gyVSSDLzpW2KZHRC93ZgeKWHqk1ZBqFS-0-a337fdcb5f9aec4f0b2b66ad1ff328da)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P40_29452.jpg?sign=1739226631-fzVf6DcLuYr0mAjyHdXIz8wZ411dxWGV-0-4235a03d9319ca0a109f7c3cc5f50bfb)
上述字符串相加,读者可以想成是字符串连接执行结果是一个字符串,所以上述执行结果555是数值数据,222333则是一个字符串。
3-4-5 将字符串转换为整数
在未来的程序设计中也常会发生将字符串转换为整数数据,下列将直接以实例做说明。
程序实例ch3_18.py:将字符串数据转换为整数数据的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P41_29858.jpg?sign=1739226631-rBMov0rfyKEGs9H0QOmzZZuulMPuAXS9-0-99bdab16c671e62be951de04c41b9e0c)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P41_29864.jpg?sign=1739226631-gPRpwJuEWlmee7iMfmMo00deSxrwOh2J-0-8e4705a99ffd8040e67d6a7c7b567108)
上述执行结果55是数值数据,2233则是一个字符串。
3-4-6 字符串数据的转换
如果字符串含一个字符或一个文字时,我们可以使用下列执行数据的转换。
● chr( x ):可以返回函数x值的字符,x是ASCII码值。
● ord( x ):可以返回函数字符参数的Unicode码值,如果是中文字也可传回Unicode码值。如果是英文字符,Unicode码值与ASCII码值是一样的。
程序实例ch3_19.py:这个程序首先会将整数97转换成英文字符‘a’,然后将字符‘a’转换成Unicode码值,最后将中文字‘魁’转成Unicode码值。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P41_29869.jpg?sign=1739226631-ldhCQLI0O6GnyO7XXyr1V8VOEyUwrcEd-0-fb3d29de9cb990f52a3bdd0cf0eb10a6)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P41_29875.jpg?sign=1739226631-qmSd0i05Mak5yCvPmO76zcJP8NQDz6qY-0-d45352b424e6be90ae5ac634e64f0428)
3-4-7 字符串与整数相乘产生字符串复制效果
在Python可以允许将字符串与整数相乘,结果是字符串将重复该整数的次数。
程序实例ch3_20.py:字符串与整数相乘的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P41_29879.jpg?sign=1739226631-ENEZHZLUl9ZZjBVFI9edxXlLtFTSQ9EK-0-ace014e379b13e2d10da62d1b6c412f8)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P41_29885.jpg?sign=1739226631-NXNLDtOvLrLVt4af2f0iftbHLtDcJIRv-0-c5d40af0babb37e4f8b949460e70d8b8)
3-4-8 聪明地使用字符串加法和换行字符\n
有时设计程序时,想将字符串分行输出,可以使用字符串加法功能,在加法过程中加上换行字符“\n”即可产生字符串分行输出的结果。
程序实例ch3_21.py:将数据分行输出的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P42_30289.jpg?sign=1739226631-TfS7Q76xiYrXv0bRQmoanC81wDfswiGL-0-eacb779f5c16cd3c6251ea2e296ee0ac)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P42_30295.jpg?sign=1739226631-uYkSvouFmQtLjGa7XjPK3Ykw3ZdQaKuu-0-cfb9b70c396fb1c5d3094ddd2cd9303b)
3-4-9 字符串前加r
在使用Python时,如果在字符串前加上r,可以防止逸出字符(Escape Character)被转译,可参考3-4-3节的逸出字符表,相当于可以取消逸出字符的功能。
程序实例ch3_22.py:字符串前加上r的应用。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P42_30299.jpg?sign=1739226631-Ovx9Cs7gjUPPReZoKUKZl3GQbrkaZsXU-0-9501447e7690a3a9fb9e3d89db979397)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P42_30305.jpg?sign=1739226631-oAepqElfgl2ReFTELiYb1xq6PiIg77YF-0-b1803d5073670460dc1b550fa08746f5)
这个功能在本书第16章正规表达式将会有许多应用。
习题
本书所有程序实作题,叙述不完整部分是由读者自行发挥创意,例如,输入或输出格式、测试数据、验证程序正确的数据笔数等。
1.请列出下列数值的2进位、8进位、16进位的值。
(a) 100 (b) 55 (c) 299 (d) 399 (e) 86
2.请将下列数值转成10进位。
(a) 0b11110010 (b) 0o76543 (c) 0xaaabbb
3.假设a是10,b是18,c是5,请计算下列执行结果,取整数结果。
(a) s = a + b - c (b) s = 2 * a + 3 - c (c) s = b * c + 20 / b
(d) s = a % c * b + 10 (e) s = a ** c - a * b * c