学径 LearnPath

CAICP-E · Python 编程基础 / Wiki

类型转换

把一种类型的值,换成另一种类型。

它是什么

类型转换 是把一种 类型 变成另一种。

电脑不会随便把文字当数字用。 你要开口请它换。 换成功了,才能做另一种运算。

三个最常用的帮手:

  • int() 转整数
  • float() 转小数
  • str()字符串
python
print(int("12") + 1)       # 13
print(float("3") * 2)      # 6.0
print("明年" + str(12))    # 明年12

还有 bool(),用来得到真或假。 空字符串、数字 0,转成布尔值常常是 False。 非空文字、非零数字,常常是 True

名字从哪来

转换的英文常叫 conversion。 有的语言叫 cast,中文有时译成「强制类型转换」。

早期语言里,整数和小数在芯片上的放法就不一样。 写程序的人必须明确:我要把这份数据按另一种说明书来读。

Python 把常见转换做成了看起来像函数的名字:intfloatstr。 它们其实也是类型的名字。 喊类型的名字并加上括号,就是「请按这个类型重新做一份」。

这和数学课上的单位换算有点像。 3 米可以换成 300 厘米。 不换的话,不能和「厘米」直接相加。

它怎么工作

转换常常做出新值。 旧的盒子不一定被改掉。

python
text = "8"
n = int(text)
print(text)  # 还是字符串
print(n)     # 整数 8

input 得到字符串。 要计算就先转。

哪些转得动:

  • int("12") 可以
  • float("3.5") 可以
  • float("3") 可以,得到 3.0
  • int(3.9) 可以,得到 3,小数部分直接丢掉,不是四舍五入
  • str(True) 可以,得到 "True"
  • int("3.2") 不行,整数不要小数点
  • int("十二") 不行
  • int("") 不行

失败时会出现 ValueError。 先看内容像不像一个数。 详见 调试

str() 几乎总能把别的值变成文字。 数字、真假、列表都可以变。 列表变成文字后,是带方括号的那一串字,不能再当列表用下标乱改。

int(True)1int(False)0。 这是历史习惯,和 逻辑运算 有关。

想保留两位小数,转换之后还常用 round。 见 内置函数

生活里在哪里

  • 把「三十二」说成 32,才能用计算器加。
  • 把 85 分写进奖状,变成文字「85」。
  • 汇率:把一种货币的数字,按比率换成另一种。
  • 食谱:把 1 杯牛奶估成毫升。不换单位,很难倒准。
  • 温度:摄氏和华氏是两种刻度,数字不能直接比。

程序里最常见的现场:键盘进来的是字,算术需要的是数。 中间必须有人做翻译。 这个翻译就是类型转换。

和相近概念的差别

类型转换是「变成另一种」。 比较 是「问问相不相等、谁更大」,不改变原来的值。

3 == 3.0 可以是真。 这不是把整数变成了小数。 两边仍是两种类型。

拼接 "3" + "1" 得到 "31",也不是转换。 那是字符串自己的加法。

int("3.2") 失败,不等于 int(float("3.2"))。 有小数点时,常常要先变成 float,必要时再 int

常见误会

误会 1:文字和整数直接 +

先统一类型。 要么都变成数去加,要么都变成字去拼。

误会 2:把 int("3.14") 当成功的例子。

有小数点,请用 float

误会 3:转换后忘记赋值。

后面仍拿着旧字符串。 新值要放进盒子,才算换好了。

误会 4:int(3.9) 会得到 4。

直接丢掉小数部分,得到 3。 四舍五入请用 round

误会 5:转换永远成功。

内容不像目标类型,就会报错。 报错是在说「这份材料换不了」,不是程序讨厌你。

想知道更多

  • 书:潘洪波《小学生 Python 趣味编程》(用问答小程序练「先问、再转、再算」)。
  • 书:埃里克·马瑟斯《Python 编程:从入门到实践》(输入之后立刻转换,是书里的常规写法,可和家长一起对照)。

未登录时不会保存学习进度