DevCN
菜单
全部文章快讯开发深度热点

Python 变量与字符串:计算学习进度并理解中文长度

用学习进度计算掌握赋值、除法、字符串格式化和显式类型转换,通过中文示例区分字符串长度与 UTF-8 编码后的字节长度。


本节目标

用学习进度计算掌握赋值、除法、字符串格式化和显式类型转换,通过中文示例区分字符串长度与 UTF-8 编码后的字节长度。

知识与使用场景

变量名绑定到对象,不需要先写类型声明。completed = 3 把整数对象绑定到 completed,之后可以重新赋值。为了让代码易懂,同一个名字最好始终承担同一种含义,避免一会儿存数字、一会儿存描述文字。

本节把总计划设为 8,完成量设为 3。/ 执行普通除法,// 得到向下取整的商;例如 -3 // 2 是 -2,而不是向零截断得到的 -1。百分比适合先算比例,再交给格式化表达式展示,格式不会改变原始数值。

Python 的 str 表示 Unicode 文本,encode 后得到 bytes。示例文本“学习Python”包含 8 个码点,在 UTF-8 下占 12 字节。这里的长度不能推广成人眼看到的字符数量:组合音标与部分 emoji 可能由多个码点组成。

完整示例

completed = 3
total = 8
label = "学习Python"

if total <= 0:
    raise ValueError("总计划必须大于零")

print(f"进度:{completed / total:.1%}")
print(f"码点:{len(label)},UTF-8字节:{len(label.encode('utf-8'))}")
print(f"整数转换:{int('12')},整除:{-3 // 2}")

预期结果

进度:37.5%
码点:8,UTF-8字节:12
整数转换:12,整除:-2

运行与逐步理解

保存为 lesson.py 并用上一节的解释器运行。程序先检查分母,避免计算时才出现除零异常。.1% 会将比例按百分比显示,并保留一位小数,因此 3/8 显示为 37.5%。如果自己先乘以 100,再使用百分比格式,就会重复放大。

第二行对同一文本分别做 len 和 UTF-8 编码,观察表示形式如何影响长度。第三行展示字符串到整数的转换。真实的交互输入同样是字符串,不能直接拿来与整数相加;要先转换,并在后面的异常处理章节学习如何报告无效输入。

本例只有固定、可信的完成量。业务里还需决定是否允许负数、超额完成或小数计划;这些是业务规则,不应让格式化结果替你决定。

常见问题与边界

  • int('12.5') 会报 ValueError,它不负责先解析小数再取整。
  • = 是赋值,== 才是比较是否相等。
  • 浮点数可能存在二进制表示误差,不要把显示为两位小数当成精确金额算法。
  • 总数为零必须先处理;如果完成量来自输入,还应验证范围。

动手练习

将 completed 改为 5,再把 label 改为“Python入门”,预测百分比、码点数量与字节数量。

参考答案

进度为 62.5%。Python入门仍由 6 个 ASCII 字母和 2 个汉字组成,因此码点数量为 8,UTF-8 字节数量为 12。把 total 改成 0 会触发明确的 ValueError,后面的输出不再执行。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。