-编程基础 Lecture 2 - Core Elements of Progr

官方信息技术老师·10 页·深入(追求细节与边界)·0 次浏览·3 天前
变量与作用域表达式与语句类型系统控制流

-编程基础 Lecture 2 - Co

看完这组图解,你将透彻理解变量作用域、表达式与语句边界、类型系统与控制流的细节

按 空格/→ 演示下一步

1 / 10 页

全部页面点击任意一页,跳回舞台从这页播放

变量与作用域表达式与语句类型系统控制流

-编程基础 Lecture 2 - Co

看完这组图解,你将透彻理解变量作用域、表达式与语句边界、类型系统与控制流的细节

1第 1 页 · -编程基础 Lecture 2 - Co

Lecture 2 Introduction

Lecture 1 我们搞懂了「程序是什么、为什么要写」——这节课钻进程序内部,看任何代码都拆不开的几个基本零件。不认识它们,后面所有高级概念都会变空中楼阁。

变量与数据类型
变量是装数据的命名盒子;数据类型决定盒子里能装什么、能做哪些运算
控制结构
if 分支与 for/while 循环,决定代码走哪条路、重复几遍
函数
把一段逻辑打包命名,可重复调用,让代码更短更易读
输入与输出
程序读入外界数据、输出结果——是程序与外界交互的唯一通道
做一道菜对应 →写一个程序

食材=变量, 切配顺序=控制结构, 菜谱=函数, 上桌=输出

2第 2 页 · Lecture 2 Introduction

Types of Programming Lan

上节我们把程序拆成「输入-处理-输出」三件套。但程序本身是用什么「写」出来的?从冯·诺依曼时代纸带上的孔,到今天 IDE 里高亮的 Python,工程语言其实分了好几层。

低级语言
直接面向硬件:机器码(二进制)与汇编(助记符)
高级语言
接近人类语言与数学表达,必须翻译后才能执行
编译 vs 解释
编译型先翻译再运行;解释型边译边执行
编程范式
命令式 / 函数式 / 逻辑式——决定「怎么写」计算
领域专用 DSL
为特定场景量身定制,如 SQL、正则、LaTeX
人类的口语、方言与行业术语对应 →编程语言的层级与领域划分

口语→通用语言;行业话→DSL;越专用越贴场景,越通用越灵活

3第 3 页 · Types of Programming Lan

Python Objects

上页说到 Python 是面向对象语言。这页打开黑箱:数字、字符串、函数、类本身,在 Python 里统统都是「对象」。这是它最核心、也最反直觉的设计。

一切皆对象
数字、字符串、函数、类、模块都是对象,没有例外
三要素
identity 唯一地址、type 不可改类型、value 内容值
变量是引用
变量像便签贴在对象上,多个名字可指向同一对象
可变性
可变对象原地改值;不可变改则生成新对象
身份证对应 →Python 对象

身份证号=identity(唯一)、血型=type(不可改)、姓名=value(可改)

a is b    id(a)=id(b)a \text{ is } b \iff \text{id}(a) = \text{id}(b)
4第 4 页 · Python Objects

Variables and Naming

上一页我们看到 Python 里一切皆对象,但对象堆在内存里谁也找不到——得有个名字把它拽出来用。

变量是名字
贴在对象上的标签,不是装对象的盒子
赋值是绑定
= 让名字指向对象,旧对象若无其他引用则被回收
命名规则
字母数字下划线,不能以数字开头,大小写敏感
保留字不可用
if/for/return 等关键字已被语言占用
命名风格
PEP 8 建议变量用 snake_case,常量用 UPPER_CASE
便签贴箱子对应 →变量绑定对象

便签(名字)可撕下贴到别的箱子(对象)上,箱子本身不变

5第 5 页 · Variables and Naming

Strings

上页我们给变量赋值时,文本总要用引号包起来——那就是字符串。它在 Python 里有一套严格而反直觉的行为规则,这一页把它讲透。

有序字符序列
Unicode 字符按顺序排列,每个字符都有位置索引;正向 0 起、反向 -1 起
不可变对象
str 一旦创建就不能改任何字符;s[0]='a' 直接报错;所谓"修改"实际都是返回新字符串
切片语法
s[start:stop:step] 取子串;start 含 stop 不含;step 负值反向;越界返回截断
str 与 bytes
str 是 Unicode 文本,bytes 是字节;两者需 encode/decode 才能互转
常用方法
split/join/replace/strip/find 都返回新串;推荐 f-string 格式化
打印好的纸质书页对应 →Python 字符串

书页印好后字就固定,不能改其中一字而不重印;想改字必须重印整页,正对应 str 的不可变

6第 6 页 · Strings

Simple Scripts

学过了对象、变量、字符串这些「零件」,现在把它们组装起来——写一个能直接跑的小程序。这种程序有专门的名字:脚本。

脚本定义
一段可直接运行、用来完成某个具体小任务的代码文件
逐行执行
由解释器按顺序执行,无需编译成可执行文件
轻量短小
通常几十到几百行,专注解决一个问题
典型用途
批量改文件名、爬数据、自动发邮件、文本清洗
适用边界
不适合大型应用、需要复杂架构或高性能的场景
按菜谱一步步炒菜对应 →写一个简单脚本

照步骤依次执行,做完这顿饭就结束,不需要「餐厅」式的前后台

7第 7 页 · Simple Scripts

Branching Programs

前面写的脚本都是从上到下顺序跑的直线。但程序不止这一种——遇到不同情况要选路走,这就是分支。

布尔条件
返回真或假的表达式,是分支的岔路口
if / else
条件真走一条、假走另一条,二选一
if/elif/else
选项多于两个时串联判断;elif ≠ 多个独立 if
嵌套分支
分支里再开分支,靠缩进锁住归属
Python 边界
用缩进而非花括号;elif 命中即停
餐厅多个点餐窗口对应 →if/elif/else 链

走到第一个能出餐的窗口就停下,后面的窗口不再询问

8第 8 页 · Branching Programs

本节要点

  • Python万物皆对象,类型绑定于对象而非变量
  • 变量是标签不是盒子,多个名字可指向同一对象
  • 字符串不可变,任何操作都返回新字符串对象
  • 程序控制流三种形态:顺序、分支、循环
  • 分支靠布尔表达式选路径,注意边界与短路
延伸主题:循环结构 while 与 for函数定义与模块化异常处理 try/except
9第 9 页 · 本节要点

课后思考

先遮住答案自己思考三分钟,再对照参考答案——重点不是对错,而是思路是否走完整。

1为什么 Python 把数字、字符串、函数都设计成「对象」?这样做统一了什么、带来了什么代价?

参考答案统一了「属性 + 方法」的访问语法(obj.x)。代价是每个整数都要分配对象,占内存、运算慢。C 的 int 只是裸值,没有方法——这正是 Python 对象模型的额外成本。

2假设你要写一个校验用户输入密码强度的脚本,你会怎么组合「分支判断」和「字符串操作」?先列思路,再想边界情况。

参考答案提示:分支判断处理条件(长度、字符类型),字符串方法完成具体检查。边界情况别漏:空串、全空格、Unicode。多个 if-elif 可提前 return 简化逻辑。

3「一切皆对象」在 C 语言里还成立吗?举一个反例,说明 Python 的对象模型给了 C 没有的哪些便利。

参考答案不成立。C 的 int 是裸值,没有方法、没有类型标签,数组退化为指针。想调用「方法」得自己写函数传指针——Python 对象模型的便利背后,是动态类型与内存开销的代价。

10第 10 页 · 课后思考