跳转至

4.6 数据类型基础——作业:直男表白解码

内容梗概

本课布置并讲解数据类型基础的课后作业。老师先演示了一个"表白加密"小程序:把中/英文字符串(如"小红我爱你")通过 ord() 和 hex() 转换成一串十六进制数字发给对方猜。作业要求是逆向操作——写一个**破解程序**,把这样一串十六进制编码还原成原始文字。课上逐行讲解了加密程序的实现思路(遍历字符 → ord 转十进制整数 → hex 转十六进制 → 切片去掉 0x → 拼接),并给出了反向解码的提示。开头还顺带解答了同学关于在 VS Code 中打开终端、选择 CMD/PowerShell 的问题。

知识点详解

VS Code 终端使用(课前答疑)

  • (约 00:31) 有同学问如何在 VS Code 下方打开 CMD/PowerShell 终端:不要按 F5 运行或启动调试,应点菜单"查看 → 终端"打开。
  • (约 01:31) 若默认打开的不是想要的 shell,可在下拉框中选择"默认 shell"切换 CMD 或 PowerShell。
  • (约 01:39) 快捷键:Ctrl + 反引号(数字 1 左边那个键)开关终端。
  • (约 01:45) 老师不推荐用其他调试工具运行代码(可能出现环境不一致问题),统一用终端方式运行;个别问题可在微信群或讨论网站提问。

作业内容

  • (约 02:31) 作业:写一个**破解程序**——把加密后的一串十六进制数字输入进去,程序把原始文字打印出来。
  • (约 07:54) 与上次作业一样提交(提到用 GitHub,但课上表示可能用不了,提交方式待再讨论);本次是硬核写代码,不用写实验报告。

加密程序的实现逻辑(老师讲解)

  • (约 03:07) 定义原始字符串 confession(如 "I love you,"),再定义空字符串 message 保存加密结果。
  • (约 03:30) 用 for ch in confession: 遍历字符串中的每一个字符(for ... in 用法下节课展开,这里先用起来)。
  • (约 07:26) 加密三步:
  • ord(ch) 把字符转成十进制整数;
  • hex(...) 把整数转成以 0x 开头的十六进制字符串;
  • 用切片 [2:](从第三个字符取到最后)去掉 0x 前缀。
  • (约 09:22) 把得到的两位十六进制片段追加到 message 尾部(可用 += 简写,与 C 语言同理),最后打印。
  • (约 08:23) 运行示例:'I' → 0x49 → 取 49;空格 → 20;l → 4C;o → 4F……拼成一整串。

解码(作业)思路提示

  • (约 10:19) 把加密逻辑反过来即可:
  • 每次从编码串中取出**两个**字符;
  • 前面加上 0x,用 int(..., 16) 转成整数;
  • 用 chr() 转成字符;
  • 拼接到结果字符串。
  • 老师故意不给出完整代码,要求同学自己思考完成。

示例与演示

  • 老师在终端切到 desktop 目录运行加密程序,把"小红我爱你"转成一串十六进制 message,调侃这是"直男表白"的常见玩法(并发到群里让大家猜)。
  • 逐行给加密代码写注释讲解:保存结果的 message、遍历字符的 for ch in ...、ord→hex→切片→+= 的组合写法(并展示了拆成中间变量 c 的易懂写法)。

重点与难点

  • 作业核心链路:加密 ord → hex → [2:] → 拼接;解码 取两位 → int(x, 16) → chr → 拼接,两处都要注意 0x 前缀的去掉与补回。
  • for ... in 遍历字符串是超前知识,下节课(循环控制语句)才正式讲,作业中先模仿使用。
  • 切片 [2:] 去前缀、+= 追加,是本作业对 4.2 字符串知识的直接运用。
  • 遇到运行报错可在群里发错误截图求助。

关联内容

  • 直接运用 4.4 的 ord()/chr()/hex()/int(x, base),以及 4.2 的字符串遍历、切片、拼接——是对第 4 章数据类型基础的综合练习。
  • for ... in 预告了下一章循环控制语句的内容。
  • 提交方式沿用此前课程的作业流程(GitHub,细节待定)。