Module 3: Python 基础语法
从零开始学编程 —— 变量、运算、条件、循环
本章概览
编程的本质是用代码表达逻辑。本章将带你掌握 Python 的核心语法,从最基础的变量和数据类型,到条件判断和循环控制。这些是所有程序的基石,也是后续学习数据处理、统计分析的必备基础。
学习目标
学完本章后,你将能够:
- 理解变量的本质,熟练使用 Python 数据类型
- 掌握算术、比较、逻辑运算符
- 使用条件语句(
if-elif-else)实现决策逻辑 - 使用循环(
for、while)处理重复任务 - 理解 Python 与 Stata/R 的语法差异
- 编写简单的数据处理和分析程序
章节内容
01 - 变量与数据类型
核心问题: 如何在 Python 中存储和操作数据?
核心内容:
- 变量的创建和命名规范
- 五种基本数据类型:
- 整数(int): 年龄、人口、年份
- 浮点数(float): 收入、GDP、利率
- 字符串(str): 姓名、地区、文本
- 布尔值(bool): 是否就业、是否治疗组
- None: 缺失值表示
- 类型转换(
int(),float(),str()) - 类型检查(
type(),isinstance()) - 对比 Stata/R 的变量类型
实际应用:
# 研究场景:教育收益率
years_edu = 16 # 受教育年限(整数)
income = 75000.50 # 年收入(浮点数)
name = "Alice" # 姓名(字符串)
is_employed = True # 是否就业(布尔值)02 - 运算符
核心问题: 如何进行数学计算和逻辑判断?
核心内容:
- 算术运算符:
+,-,*,/,//,%,** - 比较运算符:
==,!=,>,<,>=,<= - 逻辑运算符:
and,or,not - 赋值运算符:
=,+=,-=,*=,/= - 成员运算符:
in,not in - 运算优先级
实际应用:
# 计算教育收益率
income_college = 75000
income_high_school = 50000
return_to_edu = (income_college - income_high_school) / income_high_school * 100
print(f"教育收益率: {return_to_edu:.1f}%") # 50.0%
# 判断高收入者
is_high_earner = income_college > 70000 and is_employed03 - 条件语句
核心问题: 如何让程序根据条件做出不同决策?
核心内容:
if语句:单条件判断if-else语句:二选一逻辑if-elif-else语句:多条件分支- 嵌套条件语句
- 条件表达式(三元运算符)
- 对比 Stata(
if/else)和 R(if/ifelse)
实际应用:
# 收入分组
if income < 30000:
income_group = "低收入"
elif income < 80000:
income_group = "中等收入"
else:
income_group = "高收入"
# 政策干预资格判断
eligible = "符合" if income < 50000 and is_employed else "不符合"研究场景:
- 分组统计(低/中/高收入)
- 政策干预资格筛选
- 异常值标记
- 虚拟变量生成
04 - 循环
核心问题: 如何高效处理重复任务?
核心内容:
for循环: 遍历序列(列表、范围、字符串)while循环: 基于条件的重复- 循环控制:
break(跳出)、continue(跳过)、else(正常结束) - 嵌套循环: 处理多维数据
- 列表推导式: 简洁的循环语法
- 对比 Stata(
forvalues/foreach)和 R(for/apply)
实际应用:
# 计算多个教育水平的收入
edu_levels = [12, 14, 16, 18, 20]
for years in edu_levels:
income = 30000 + 5000 * years
print(f"{years}年教育 → 收入: ${income:,}")
# 清洗数据:删除负收入
incomes = [50000, -100, 75000, -500, 60000]
clean_incomes = [x for x in incomes if x > 0]研究场景:
- 批量数据处理
- 蒙特卡洛模拟
- 稳健性检验(多个模型)
- Bootstrap 抽样
05 - 小结和复习
内容:
- 核心概念回顾
- 综合练习题
- Stata/R/Python 语法对照表
- 常见错误和调试技巧
- 下一步学习建议
Python vs Stata vs R 语法对比
变量创建
| 操作 | Python | Stata | R |
|---|---|---|---|
| 创建变量 | age = 25 | gen age = 25 | age <- 25 |
| 修改变量 | age = 30 | replace age = 30 | age <- 30 |
| 查看类型 | type(age) | describe age | class(age) |
条件判断
| 操作 | Python | Stata | R |
|---|---|---|---|
| 单条件 | if x > 0: | if x > 0 { | if (x > 0) { |
| 多条件 | if/elif/else | if/else if/else | if/else if/else |
| 条件赋值 | y = 1 if x>0 else 0 | gen y = (x>0) | y <- ifelse(x>0, 1, 0) |
循环
| 操作 | Python | Stata | R |
|---|---|---|---|
| 数值循环 | for i in range(10): | forvalues i = 1/10 { | for (i in 1:10) { |
| 列表循环 | for x in list: | foreach x in list { | for (x in list) { |
| 条件循环 | while x < 10: | while x < 10 { | while (x < 10) { |
如何学习本章?
学习路线
第 1 天(2小时): 变量与数据类型
- 阅读 01 - 变量与数据类型
- 运行所有代码示例
- 尝试修改变量值和类型
第 2 天(2小时): 运算符
- 阅读 02 - 运算符
- 练习算术、比较、逻辑运算
- 完成练习题
第 3 天(3小时): 条件语句
- 阅读 03 - 条件语句
- 编写收入分组程序
- 练习嵌套条件
第 4 天(3小时): 循环
- 阅读 04 - 循环
- 用循环处理数据
- 学习列表推导式
第 5 天(2小时): 复习和实践
- 完成 05 - 小结和复习
- 综合练习题
- 对比 Stata/R 代码
总时间: 12 小时(1-2 周)
最小化学习路径
如果时间紧张,优先学习:
必学(核心语法,6小时):
- 01 - 变量与数据类型
- 02 - 运算符(基础部分)
- 03 - 条件语句(if-elif-else)
- 04 - 循环(for 循环 + 列表推导式)
选学(进阶技巧):
- while 循环
- 嵌套循环
- 复杂条件表达式
学习建议
动手实践 > 阅读理解
- 每个代码示例都要在 Jupyter 中运行
- 修改参数,观察输出变化
- 尝试自己编写类似代码
对比学习
- 将 Python 代码与 Stata/R 对比
- 理解语法差异背后的逻辑
- 用 Python 复现以前的 Stata 分析
循序渐进
- 先掌握基础语法,再学高级技巧
- 不要跳过练习题
- 遇到困难先查文档,再求助社区
建立直觉
- 理解"为什么"比记住"怎么做"更重要
- 思考代码背后的逻辑
- 将编程概念与研究场景关联
常见问题
Q: Python 的索引为什么从 0 开始? A: 这是计算机科学的传统。虽然一开始不习惯,但很快就能适应。记住:list[0] 是第一个元素。
Q: 缩进有什么作用? A: Python 用缩进表示代码块,而不是 {} 或 end。这强制代码格式整洁,但要注意不要混用空格和Tab。
Q: 为什么 = 是赋值,== 是比较? A: = 将右边的值赋给左边的变量,== 判断两边是否相等。这在所有编程语言中都是标准用法。
Q: 列表推导式太难了,能不能不学? A: 初期可以用普通 for 循环,但列表推导式会让代码更简洁。建议先掌握基础循环,再回来学习。
Q: 学完本章就能做数据分析了吗? A: 还不行。本章只是语法基础,实际数据分析需要学习 Pandas(Module 6-7)。但这些语法是后续学习的必要基础。
下一步
完成本章后,你将掌握:
- Python 的基础语法和编程逻辑
- 变量、运算、条件、循环的使用
- 与 Stata/R 的语法对比
在 Module 4 中,我们将学习数据结构(列表、字典、元组、集合),为处理复杂数据做准备。
在 Module 6-7 中,我们将学习 Pandas,开始真正的数据分析工作!
继续加油!掌握这些基础语法,你已经走在成为 Python 数据分析师的路上了!