跳转至

4.4 数据类型基础——类型转换

内容梗概

本课讲解数字与字符串之间的类型转换函数。老师对照课件上的转换函数表格逐一演示:int()(含 base 参数)、float()、hex()/oct()/bin()、str(),以及解答同学疑问的一对函数 ord() 与 chr()(字符与 ASCII 码互转),并顺带解释了换行符 0D/0A 的含义。课程预告了以此为基础的作业(编解码程序),在交互模式中边讲边操作。

知识点详解

转换函数总览

  • (约 00:19) 课件表格集中了常用的类型转换函数,课上逐一过一遍再动手试。
  • (约 00:31) complex():把两个数字(整数、小数均可)拼成实部+虚部的复数,用得少,不展开。

int(x, base=10)

  • (约 01:15) 万能函数 int():参数 x 可以是数字或字符串;base 默认 10(十进制)。
  • (约 01:45) 演示 int("987654321"):字符串转成数字,显示时没有引号。
  • (约 02:06) 指定进制:int("0B1010101010", base=2)——把二进制字符串转成十进制整数 682。
  • (约 02:52) 易错点:如果前面 x 不是字符串而是数字,再加 base 参数会报错——用了 base 时 x 必须是字符串。
  • (约 03:06) 如果 x 本身就是带前缀的其他进制数字(如 0b...),直接 int(x) 即可,Python 能根据前缀自行解析,不需要也不能写 base。

float(x)

  • (约 03:47) float("3.14"):把字符串转成浮点数,用法与 int() 类似。

hex() / oct() / bin()

  • (约 04:03) 这一组三个函数把整数转成**带前缀的字符串**:hex() 转十六进制、oct() 转八进制、bin() 转二进制。
  • (约 04:52) 演示 hex(97) 返回字符串 '0x61'(注意结果有引号,是字符串不是数字)。

str(x)

  • (约 08:24) str():把变量或数字转成字符串,是"万能"的转字符串函数。
  • (约 08:53) 注意:str() 对十六进制数转换后显示的仍是十进制形式的字符串;想得到十六进制形式的字符串应该用 hex()。

ord() 与 chr()(字符编码)

  • (约 09:42) 一对函数:ord() 把字符转成对应整数(ASCII/编码值),chr() 把整数转回字符(chr 即 char 的缩写)。
  • (约 10:46) 背景:字符在电脑上最终都存为数字(二进制),数字与字符的对应关系是 ASCII 码表,这就是编码与解码。
  • (约 11:00) 演示 ord('a') 得 97;chr(97) 得 'a'。
  • (约 11:17) 解答上节课遗留问题:换行符 0D 在字符串里写作 '\x0D',ord('\x0D') 得 13(0x0D = 十进制 13);它属于**不可打印字符**,只能用十六进制表示。常与 0A(换行,'\x0A')一起出现——0A 和 0D 是两个不同的字符。

示例与演示

  • int("987654321") → 数字 987654321;int("0B1010101010", base=2) → 682。
  • 演示对非字符串加 base 报错,带全班读错误信息。
  • float("3.14") 字符串转浮点。
  • hex(97) → '0x61',并说明 oct()/bin() 同理不再逐一操作。
  • ord('a') → 97、chr(97) → 'a'、ord('\x0D') → 13。

重点与难点

  • int() 加 base 参数时,被转换的 x 必须是字符串;x 若是带进制前缀的数字本身,则不能加 base。
  • hex()/oct()/bin() 的返回值是**带前缀的字符串**,不是数字。
  • str() 万能但只会给出十进制形式;要进制形式的字符串得用 hex() 等。
  • ord/chr 是字符↔编码值互转的钥匙,是理解字符编码和完成本次作业的核心。
  • 不可打印字符(如 \x0D、\x0A)只能用十六进制转义写出。

关联内容

  • 承上:解答了 4.1(0D 换行符)和 4.2(字符串转义)遗留的问题;依赖 4.1 的进制知识与 4.2 的字符串基础。
  • 启下:本课的 ord/chr/hex 直接构成 4.6 作业"直男表白解码"(字符→十六进制编码与解码)的全部技术基础。
  • 远期:编码/解码概念与后续文件读写、数据分析章节相关;上学期计算机安全维护课也提过字符存为数字。