从 Python 条件分支到 s×n 矩阵

复习 f-string、条件分支、pass 与嵌套语句,同时开始接触 n 元线性方程组和矩阵表示。

Read in English →

今天在图书馆继续复习 Python 条件语句,也看了丘维声老师的高等代数课。两部分都还停留在辨认基本概念的阶段:Python 容易在符号和缩进上出错,高代第一节课则一下子出现了很多新名词。

图书馆书桌上的电脑、平板、笔记和耳机,电脑正在播放高等代数课程
今天的学习现场:一边整理笔记,一边在 Python 和高等代数之间切换。

f、冒号与缩进

格式化字符串的 f 要写在引号外面,并且紧挨着开引号,例如 f"{number} 是一个整数"。如果把 f 写进引号,它就只会成为普通字符,Python 也不会替换花括号里的变量。

ifelifelse 后面都不能忘记冒号。今天还需要把“顶格”说得更准确一点:elifelse 应当与它们所对应的 if 保持相同缩进,不是任何时候都从整行最左边开始。进入某个分支以后,里面的代码还要再缩进一级。

下面的闰年判断同时包含了外层 if 和内层 if—elif—else

year = int(input("请输入年份:"))

if year % 4 == 0:
    if year % 100 != 0:
        print(f"{year} 是闰年")
    elif year % 400 == 0:
        print(f"{year} 是闰年")
    else:
        print(f"{year} 不是闰年")
else:
    print(f"{year} 不是闰年")

这里,内层的 elifelse 与内层 if 对齐;最后一个 else 则与最外层 if 对齐。嵌套以后,缩进本身就是程序结构的一部分,不能只看每一行写了什么。

编辑器中关于闰年判断、正负数判断和用户名判断的 Python 条件语句练习
条件分支练习。代码不长,但冒号、对齐与嵌套层级都需要逐项检查。

pass 不是跳过后续程序

pass 是一条不执行任何操作的空语句。Python 不允许代码块完全空着,所以暂时没有准备好分支逻辑时,可以先用它占位:

if year > 2026:
    pass

print("程序继续运行")

执行到 pass 时什么也不会发生,程序会继续向下运行。它与 continuebreakreturn 不同,既不会直接进入下一轮循环,也不会退出循环或结束函数。

从 n 元线性方程组到矩阵

今天还看了丘维声老师高等代数课的第一节。课程从 n 元线性方程组讲到矩阵、向量空间以及方程组解的情况,概念来得很密。我现在还没有把它们真正连起来,只能先抓住矩阵尺寸这条线。

丘维声老师在黑板前讲解 n 元线性方程组、矩阵和向量空间之间的关系
第一节课先搭起了一张概念地图,目前还需要把每个框之间的联系慢慢补上。

如果一个线性方程组有 s 个方程、n 个未知数,那么它的系数可以排成一个 s × n 矩阵:s 表示行数,对应方程的数量;n 表示列数,对应未知数的数量。因此,一个 4 × 4 矩阵有四行四列;如果它是方程组的系数矩阵,就对应四个方程和四个未知数。

把未知数组成列向量 x,把等号右边的常数组成列向量 b,整个方程组可以简写成 Ax = b。若把常数列也接到系数矩阵右边,就得到增广矩阵 [A | b],它的尺寸是 s × (n + 1)。矩阵在这里不只是一张数字表,而是一种更紧凑地记录方程组的方法。

课程还把 n 元线性方程组带到了 n 维向量空间。现在我只能先记住:n 个未知数组成的解可以写成一个 n 维列向量。它与解空间、线性相关之间到底怎样连接,还要继续往下听。

图书馆书桌上的高等代数教材和 Understanding Analysis
高代和分析都摆在桌上,今天先把刚出现的符号和概念分清楚。

今天的困难,一个是 Python 的缩进层级,另一个是高等代数概念之间的关系。下一次可以各做一件具体的事:重新默写一段嵌套条件语句,再写出一个含三个方程、四个未知数的系数矩阵,亲自确认“行对应方程、列对应未知数”。

今天先记到这里。

评论

0 条