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,后面的输出不再执行。
文章回复
0 条公开回复