从 0.4 − 0.3 开始:Python 基础与学习策略调整

在图书馆复习 Python 运算符、条件语句与浮点误差,并重新确定学校教材、Understanding Analysis、Python 和英语之间的主次关系。

Read in English →

今天上午去了一会儿图书馆,晚上又回去了。主要继续学 Python 的基础语法,也重新整理了数学、编程和英语之间的学习顺序。

中间还有一个很实际的问题:刚才写的东西忘记保存了。写 Python 时也老是忘记切换中英文输入法,结果不是符号打错,就是写到一半才发现状态不对。这些不算难知识,却会不断打断练习。

图书馆书桌上的平板、耳机和正在运行 Python 课程与代码的笔记本电脑
今天的学习现场:上午来了一会儿,晚上又回到图书馆继续写 Python。

先把几个运算符说准确

今天接触到的几个运算符,写法很短,但含义不能只靠中文名字猜。

  • / 是普通除法。在 Python 3 中,结果通常以 float 表示,例如 7 / 2 得到 3.54 / 2 得到 2.0
  • // 是向下取整除法(floor division)。7 // 2 得到 3,但 -7 // 2 得到 -4,因为它向负无穷方向取整,不是简单地把小数部分删掉。
  • % 是取模运算。比如 7 % 2 得到 1。它和 // 满足 a == (a // b) * b + a % b
  • ** 表示乘方,例如 2 ** 3 得到 8
  • +=-= 是增强赋值。x += 1 可以理解为用 x + 1 的结果更新 xx -= 1 同理。

这些概念目前还只是基础辨认,之后需要用正数、负数和小数分别试几次,特别是 //% 的组合。

ifelse 后面的冒号

今天还反复碰到一个语法细节:ifelse 这一行都要以冒号结束,下一行再用缩进表示代码块。

score = 700

if score >= 680:
    print('恭喜你进入大学生活')
else:
    print('高考结束')

冒号告诉 Python 接下来会出现一个代码块,缩进则说明哪些语句属于这个分支。只记得条件、忘了冒号或缩进,程序都不能按预期运行。

电脑屏幕上的 Python 比较表达式以及 if 和 else 条件语句练习
比较表达式与条件分支练习。今天仍处在一边跟课、一边确认语法的阶段。

为什么 0.4 0.3 不一定正好显示为 0.1

上午还注意到一个现象:输入 0.40.3 后,程序输出的差是 0.10000000000000003

这不能简单理解成“电脑按二进制运算,所以一定会损失”。更准确地说,许多有限的十进制小数,在二进制中没有有限表示。Python 的 float 只能保存一个非常接近它们的二进制近似值,运算后,这个很小的误差有时就会显示出来。

x = 0.4
y = 0.3

print(x + y)  # 0.7
print(x - y)  # 0.10000000000000003

如果只是比较计算结果是否“足够接近”,可以使用 math.isclose();如果是金额等需要精确十进制表示的场景,可以了解 decimal.Decimal。今天先记住误差的来源,还不能算掌握了浮点数。

Python 终端显示零点四减零点三得到零点一零零零零零零零零零零零零零零三
0.4 0.3 的输出把浮点近似误差直接显示了出来。

把学习主线重新排清楚

今天也调整了一下学习策略。现在更适合把学校教材放在第一主线:先跟紧课程里的定义、定理、例题和作业,把本专业的基础打牢。

Abbott 的 Understanding Analysis 作为第二遍理解。它暂时不替代学校教材,也不急着大量刷题,而是帮助我接触严格定义、定理为什么成立,以及数学证明应该怎么写。等学校课程碰到相近主题时,再回到书里做对应阅读,主次会更清楚。

Python 和 English 继续保留。Python 用来训练计算与表达过程,英语则放进教材、术语和原文阅读的具体语境里。这样不是同时铺开四条同样重的线,而是一条课程主线,加上分析学、编程和英语三个辅助方向。

手机屏幕上关于学校数学教材、Understanding Analysis 与辅助学习方向的策略记录
把新的主次关系写下来:学校教材为主,Understanding Analysis 为辅,Python 和英语持续推进。

下一次写代码前,我需要先看一眼输入法状态,运行前保存文件;学习结束时,再用几行字记下“今天试了什么、哪里还不确定、下次从哪继续”。这比等到忘记保存以后再生气更具体。

今天先记到这里。

评论

0 条