继续介绍不同数据类型的转换。下面来看看字符串和整数的相互转换。
首先我们先来看看整数与单一字符的转换。我们从一个问题开始,首先要明确一点,两者并不能混用。
更为常见出错的时候发生在输入数据的处理上。
num = input()
print(num + 1)
运行界面为:
此时不论输入什么数值,都会产生一样的错误,意思是说只能将字符串和字符串连接(即相加)。
正确的处理可以使用int函数:
num = input()
num = int(num)
print(num + 1)
运行界面为:
除此以外,还有一种特殊的转换方法,即将单一字符转换为对应的整数编码。
strs = 'A'
print(ord(strs))
输出为:65。这里的ord函数就返回字符对应的序号编码,ord为ordinal(序号)的意思,大写字母A的序号编码就是65。为什么A对应65序号?这个序号编码通常也被称为字符集,每个常见字符都对应一个唯一的序号。不同的字符集可能对应关系并不完全一样,但是英文字符通常都是一样的,常见的字符集有ASCII、Unicode等。
这是常见的字符编码:
这里对于初学者,往往存在一个问题,就是数字0和整数0的区别。通过目前的字符编码,我们就可以做出准确的区分,从整数来看,字符0其实是48,从字符来看,整数0其实是空字符。
为什么字符要对应编码序号?在计算机数据存储结构中,其实只能存放整数和浮点数,字符和布尔型都是无法直接存放的。因此,计算机通常通过一种编码映射的方式来表达这些类型。比如对于字符,计算机只能存储这些字符对应的序号编码,这是个整数,如果在读取时需要转换为字符,于是计算机会在字符编码表中查找对应的字符,并将该字符显示处理。
布尔型也是一样,真实存储的只是0和1两种整数,也是通过更为简单的编码转换,0转换为False,1转换为True来实现对布尔型数据的展示。
中文字符也有编码序号。
strs = '南'
print(ord(strs))
输出为:21335。
反过来,我们也可以利用chr函数将整数转换为字符,就是转换为对应编码的字符。
num = 65
print(chr(num))
输出为:A。
掌握了这些方法,我们可以利用这种整数编码来巧妙的转换字符。比如将大写变成小写:
strs = 'Z'
print(chr(ord(strs) + 32))
输出为:z。这里为小写的字母“z”,大写字母和小写字母编码差值就是32,因此通过编码差值并累加转换就可以实现大小写转换。
即使是不知道大小写差值多少,我们依然还是可以完成:
strs = 'Z'
print(chr(ord(strs) + ord('a') - ord('A')))
输出内容同上。大家可以自己体会其中巧妙利用整数和字符进行转换的方法。
当然,更为简单的还是利用字符串现成的小写转换函数lower:
strs = 'Z'
print(strs.lower())
输出内容同上。
对于含有多个数字字符的字符串,也可以利用int和str函数直接和整数互相转换。比如通过int函数可以将数字字符串直接转换为对应的整数:
strs = '1234'
print(int(strs) + 1)
输出为:1235。
通过str函数可以将整数直接转换为对应的字符串:
num = 1234
print(str(num) + '1')
输出为:12341。
str还可以用在其他类型到字符串的转换上,如浮点数和布尔型等:
num = True
print('[' + str(num) + ']')
输出为:[True]。
由于str默认为字符转换函数的名称,因此建议大家在定义变量时,一般不要使用str,或者在使用str函数的时候,请尽量避免使用str的同名定义形式,如:
num = 1234
strs = str(num)
print(strs)
如果使用str作为变量名称就有可能出现问题,如:
num = 1234
str = 'ABCD'
print(str(num))
运行界面为:
这里的错误就在于最后一行本来准备转换num为字符串,但是str函数和str变量同名,导致此时str函数失效,最后一行当然不可能靠str字符串变量‘ABCD’来完成真正的类型转换。
说到这里,我们就可以理解对于字符的比较,其实就是字符编码整数的比较。比如:
str1 = 'A'
str2 = 'a'
print(str1 < str2)
输出为:True。
如果是多个字符的字符串,比较规则是从左到右逐个字符依次比较,一旦有一个字符比出大小,比较就结束并以此结果作为字符串的大小比较结果,类似于1对1点球赛:
比如:
str1 = 'aAaaa'
str2 = 'b'
print(str1 < str2)
输出为:True,因为第一个字符比较结果就表明第二个字符串更大。
但是如果两个字符串在比较后,前面都一致,还有一个字符串还有更多字符,则它更大:
str1 = 'aAaaa'
str2 = 'aAa'
print(str1 > str2)
输出为:True。
配套学习资源、慕课视频: