feat: 初始化 Python 零基础教学课程
This commit is contained in:
472
01_python基础/1_2_变量与数据类型/README.md
Normal file
472
01_python基础/1_2_变量与数据类型/README.md
Normal file
@@ -0,0 +1,472 @@
|
||||
# 第 1-2 课:变量与数据类型
|
||||
|
||||
## 一、本课目标
|
||||
|
||||
完成本课后,你应该能够:
|
||||
|
||||
1. 解释变量是什么,以及为什么程序需要变量;
|
||||
2. 使用赋值符号 `=` 创建变量;
|
||||
3. 区分字符串、整数、浮点数和布尔值;
|
||||
4. 使用 `type()` 查看数据类型;
|
||||
5. 遵守 Python 变量命名的基本规则;
|
||||
6. 使用变量进行简单计算和文字输出;
|
||||
7. 使用 `int()`、`float()`、`str()` 完成简单类型转换;
|
||||
8. 看懂变量重新赋值后发生的变化。
|
||||
|
||||
## 二、前置知识
|
||||
|
||||
开始本课前,你应该已经能够:
|
||||
|
||||
- 使用 `python 文件名.py` 运行 Python 程序;
|
||||
- 使用 `print()` 输出文字;
|
||||
- 知道引号包围的内容是字符串;
|
||||
- 知道 `#` 开头的内容是注释。
|
||||
|
||||
## 三、变量是什么
|
||||
|
||||
变量(Variable)是程序中用于保存数据的名称。
|
||||
|
||||
可以把变量想象成一个贴有标签的盒子:
|
||||
|
||||
```text
|
||||
标签:user_name
|
||||
盒子中的数据:"Bruce"
|
||||
```
|
||||
|
||||
在 Python 中可以这样写:
|
||||
|
||||
```python
|
||||
user_name = "Bruce"
|
||||
```
|
||||
|
||||
这行代码表示:把字符串 `"Bruce"` 保存起来,并使用名称 `user_name` 指向它。
|
||||
|
||||
之后只要使用变量名,就能取得对应的数据:
|
||||
|
||||
```python
|
||||
print(user_name)
|
||||
```
|
||||
|
||||
变量的价值在于:数据可以被保存、重复使用和修改,不必在每个地方重复写相同内容。
|
||||
|
||||
## 四、认识赋值符号
|
||||
|
||||
下面代码中的 `=` 称为赋值符号:
|
||||
|
||||
```python
|
||||
age = 18
|
||||
```
|
||||
|
||||
赋值操作按照“先看右边,再交给左边”的方式理解:
|
||||
|
||||
1. Python 先得到右边的整数 `18`;
|
||||
2. 再让左边的变量名 `age` 指向这个数据。
|
||||
|
||||
这里的 `=` 暂时不要理解成数学中的“左右相等”。Python 中判断两个值是否相等会使用 `==`,将在条件判断课程中学习。
|
||||
|
||||
## 五、四种基础数据类型
|
||||
|
||||
数据类型用于描述一个数据属于哪一类,以及它通常可以参与哪些操作。
|
||||
|
||||
### 5.1 字符串 `str`
|
||||
|
||||
字符串(String,类型名为 `str`)用于表示文字:
|
||||
|
||||
```python
|
||||
user_name = "Bruce"
|
||||
learning_goal = "开发 LLM Agent"
|
||||
```
|
||||
|
||||
字符串必须使用成对的单引号或双引号包围。
|
||||
|
||||
即使内容看起来像数字,只要有引号,它仍然是字符串:
|
||||
|
||||
```python
|
||||
phone_number = "13800000000"
|
||||
```
|
||||
|
||||
电话号码通常不用于数学计算,因此使用字符串保存更合适。
|
||||
|
||||
### 5.2 整数 `int`
|
||||
|
||||
整数(Integer,类型名为 `int`)是不带小数部分的数字:
|
||||
|
||||
```python
|
||||
age = 18
|
||||
course_count = 8
|
||||
temperature = -2
|
||||
```
|
||||
|
||||
整数不需要引号,可以参加加、减、乘、除等数学运算。
|
||||
|
||||
### 5.3 浮点数 `float`
|
||||
|
||||
浮点数(Floating-point Number,类型名为 `float`)通常用于表示带小数部分的数字:
|
||||
|
||||
```python
|
||||
height = 1.75
|
||||
price = 19.9
|
||||
progress = 0.25
|
||||
```
|
||||
|
||||
“浮点数”是计算机领域的常用名称,初学阶段可以先把它理解为小数。
|
||||
|
||||
### 5.4 布尔值 `bool`
|
||||
|
||||
布尔值(Boolean,类型名为 `bool`)只有两个值:
|
||||
|
||||
```python
|
||||
is_learning = True
|
||||
is_finished = False
|
||||
```
|
||||
|
||||
- `True` 表示真、是、成立;
|
||||
- `False` 表示假、否、不成立。
|
||||
|
||||
首字母必须大写,并且不能添加引号。`"True"` 是字符串,不是布尔值。
|
||||
|
||||
布尔值经常用于记录某个状态,例如:
|
||||
|
||||
- 用户是否登录;
|
||||
- 任务是否完成;
|
||||
- 数据是否有效;
|
||||
- 接口调用是否成功。
|
||||
|
||||
## 六、使用 `type()` 查看数据类型
|
||||
|
||||
`type()` 可以告诉我们一个数据的类型:
|
||||
|
||||
```python
|
||||
user_name = "Bruce"
|
||||
age = 18
|
||||
|
||||
print(type(user_name))
|
||||
print(type(age))
|
||||
```
|
||||
|
||||
输出结果:
|
||||
|
||||
```text
|
||||
<class 'str'>
|
||||
<class 'int'>
|
||||
```
|
||||
|
||||
目前只需要关注最后的 `str` 和 `int`。`class` 与类的概念会在面向对象阶段详细学习。
|
||||
|
||||
`type()` 主要用于学习和排查问题。实际开发中,不需要为每一个变量都输出类型。
|
||||
|
||||
## 七、变量与字符串的区别
|
||||
|
||||
请比较:
|
||||
|
||||
```python
|
||||
user_name = "Bruce"
|
||||
|
||||
print(user_name)
|
||||
print("user_name")
|
||||
```
|
||||
|
||||
输出为:
|
||||
|
||||
```text
|
||||
Bruce
|
||||
user_name
|
||||
```
|
||||
|
||||
原因是:
|
||||
|
||||
- `user_name` 没有引号,Python 会把它当作变量名,并读取变量保存的数据;
|
||||
- `"user_name"` 有引号,Python 会把它当作普通文字直接输出。
|
||||
|
||||
这是初学阶段非常重要的区别。
|
||||
|
||||
## 八、变量命名规则
|
||||
|
||||
### 8.1 必须遵守的规则
|
||||
|
||||
Python 变量名:
|
||||
|
||||
1. 可以包含英文字母、数字和下划线;
|
||||
2. 不能以数字开头;
|
||||
3. 不能包含空格、连字符等符号;
|
||||
4. 区分英文字母大小写;
|
||||
5. 不能使用 Python 关键字。
|
||||
|
||||
正确示例:
|
||||
|
||||
```python
|
||||
user_name = "Bruce"
|
||||
age2 = 18
|
||||
course_count = 8
|
||||
```
|
||||
|
||||
错误示意:
|
||||
|
||||
```text
|
||||
2age = 18 # 不能以数字开头
|
||||
user name = "Bruce" # 不能包含空格
|
||||
user-name = "Bruce" # 不能使用连字符连接单词
|
||||
```
|
||||
|
||||
错误示意放在文本代码块中,是为了避免它们被误认为可运行的 Python 代码。
|
||||
|
||||
### 8.2 推荐的命名风格
|
||||
|
||||
Python 普通变量通常使用蛇形命名法(snake_case):
|
||||
|
||||
```python
|
||||
user_name = "Bruce"
|
||||
learning_days = 1
|
||||
is_course_finished = False
|
||||
```
|
||||
|
||||
蛇形命名法使用小写英文单词,并用下划线连接多个单词。
|
||||
|
||||
变量名应该能说明数据的含义。推荐使用 `learning_days`,不推荐使用 `a`、`x1` 这类难以理解的名称。
|
||||
|
||||
代码标识符使用英文,注释和教学文档使用中文。这样既符合常见开发习惯,也便于与第三方库和团队代码协作。
|
||||
|
||||
## 九、使用变量进行计算
|
||||
|
||||
整数和浮点数可以参与计算:
|
||||
|
||||
```python
|
||||
completed_lessons = 1
|
||||
new_lessons = 1
|
||||
total_lessons = completed_lessons + new_lessons
|
||||
|
||||
print(total_lessons)
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```text
|
||||
2
|
||||
```
|
||||
|
||||
代码执行过程是:
|
||||
|
||||
1. `completed_lessons` 保存整数 `1`;
|
||||
2. `new_lessons` 保存整数 `1`;
|
||||
3. Python 读取两个变量中的整数并相加;
|
||||
4. 计算结果 `2` 保存到 `total_lessons`;
|
||||
5. `print()` 输出结果。
|
||||
|
||||
## 十、变量可以重新赋值
|
||||
|
||||
变量保存的数据可以改变:
|
||||
|
||||
```python
|
||||
learning_days = 1
|
||||
print(learning_days)
|
||||
|
||||
learning_days = 2
|
||||
print(learning_days)
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```text
|
||||
1
|
||||
2
|
||||
```
|
||||
|
||||
第二次赋值后,再使用 `learning_days` 时得到的是新数据 `2`。
|
||||
|
||||
Python 变量甚至可以在运行过程中指向不同类型的数据:
|
||||
|
||||
```python
|
||||
value = 10
|
||||
value = "十"
|
||||
```
|
||||
|
||||
这种能力称为动态类型。它很灵活,但随意改变变量的数据类型容易让代码难以理解,所以实际开发中应让同一个变量尽量保持含义和类型稳定。
|
||||
|
||||
## 十一、简单的类型转换
|
||||
|
||||
有时需要把一种类型的数据转换成另一种类型。
|
||||
|
||||
### 11.1 字符串转换为整数
|
||||
|
||||
```python
|
||||
age_text = "18"
|
||||
age = int(age_text)
|
||||
|
||||
print(age)
|
||||
print(type(age))
|
||||
```
|
||||
|
||||
`int()` 会尝试把合适的内容转换为整数。
|
||||
|
||||
### 11.2 字符串转换为浮点数
|
||||
|
||||
```python
|
||||
price_text = "19.9"
|
||||
price = float(price_text)
|
||||
```
|
||||
|
||||
### 11.3 数字转换为字符串
|
||||
|
||||
```python
|
||||
course_count = 8
|
||||
course_count_text = str(course_count)
|
||||
```
|
||||
|
||||
### 11.4 转换并不总能成功
|
||||
|
||||
下面的转换会报错:
|
||||
|
||||
```text
|
||||
int("十八")
|
||||
```
|
||||
|
||||
因为 Python 不知道应该怎样把中文文字“十八”直接转换成整数。遇到无法转换的数据时,会产生错误。异常处理会在后续课程学习。
|
||||
|
||||
## 十二、使用格式化字符串输出变量
|
||||
|
||||
如果想把固定文字和变量数据组合起来,可以使用格式化字符串,简称 f-string:
|
||||
|
||||
```python
|
||||
user_name = "Bruce"
|
||||
learning_days = 2
|
||||
|
||||
print(f"{user_name} 已经学习 Python {learning_days} 天。")
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```text
|
||||
Bruce 已经学习 Python 2 天。
|
||||
```
|
||||
|
||||
使用方法:
|
||||
|
||||
1. 在字符串开始引号前写小写字母 `f`;
|
||||
2. 在字符串中使用花括号 `{}` 包围变量名;
|
||||
3. Python 会把花括号中的变量替换成变量保存的数据。
|
||||
|
||||
f-string 是现代 Python 中非常常用、易读的字符串格式化方式。
|
||||
|
||||
## 十三、当前电脑上有两个 Python 解释器
|
||||
|
||||
第一课练习结果显示:
|
||||
|
||||
```text
|
||||
PowerShell:Python 3.13.5
|
||||
PyCharm:Python 3.11.15
|
||||
```
|
||||
|
||||
这说明电脑上安装了不止一个 Python 解释器。它们就像同一种工具的两个版本。
|
||||
|
||||
目前的基础代码可以在两个版本中运行,因此不影响学习。以后安装第三方库时,需要注意“库安装到了哪个解释器”,否则可能出现已经安装但代码仍提示找不到的情况。
|
||||
|
||||
现阶段请记住:
|
||||
|
||||
- 在 PowerShell 中,本项目默认使用 `python` 命令;
|
||||
- 在 PyCharm 中,运行按钮会使用项目设置中选择的解释器;
|
||||
- 看到不同 Python 版本不必紧张,但提问错误时应保留完整的运行命令和解释器路径。
|
||||
|
||||
虚拟环境和依赖管理将在 Python 进阶阶段系统学习。
|
||||
|
||||
## 十四、运行本课示例
|
||||
|
||||
在 PowerShell 中执行:
|
||||
|
||||
```powershell
|
||||
cd D:\Code\Python\01_python基础\1_2_变量与数据类型
|
||||
python variables_and_types.py
|
||||
```
|
||||
|
||||
运行时请对照代码和输出,重点观察:
|
||||
|
||||
- 变量名与字符串的区别;
|
||||
- 四种数据类型的 `type()` 结果;
|
||||
- 变量重新赋值前后的变化;
|
||||
- f-string 如何把变量放入一句话中。
|
||||
|
||||
## 十五、常见错误
|
||||
|
||||
### 15.1 使用了不存在的变量
|
||||
|
||||
```text
|
||||
NameError: name 'user_name' is not defined
|
||||
```
|
||||
|
||||
常见原因:
|
||||
|
||||
- 变量还没有赋值就被使用;
|
||||
- 变量名拼写错误;
|
||||
- 大小写不一致。
|
||||
|
||||
### 15.2 忘记给字符串加引号
|
||||
|
||||
```python
|
||||
user_name = Bruce
|
||||
```
|
||||
|
||||
Python 会把 `Bruce` 当成变量名,而不是文字。如果这个变量不存在,就会产生 `NameError`。
|
||||
|
||||
正确写法:
|
||||
|
||||
```python
|
||||
user_name = "Bruce"
|
||||
```
|
||||
|
||||
### 15.3 把赋值方向写反
|
||||
|
||||
```text
|
||||
18 = age
|
||||
```
|
||||
|
||||
变量名应写在赋值符号左边,数据或计算表达式写在右边。
|
||||
|
||||
### 15.4 类型不同导致操作失败
|
||||
|
||||
```text
|
||||
"18" + 1
|
||||
```
|
||||
|
||||
`"18"` 是字符串,`1` 是整数。两种不同含义的数据不能直接进行这个加法操作。需要先确认业务目的,再进行合适的类型转换。
|
||||
|
||||
## 十六、课堂练习
|
||||
|
||||
打开 `practice.py`,按照中文注释完成练习。你将创建一组描述自己学习情况的变量,并输出一段学习档案。
|
||||
|
||||
运行命令:
|
||||
|
||||
```powershell
|
||||
python practice.py
|
||||
```
|
||||
|
||||
本课仍然不提前提供答案。完成后告诉我,我会读取并运行你的代码进行验收。
|
||||
|
||||
## 十七、思考题
|
||||
|
||||
1. `age = 18` 和 `age = "18"` 有什么区别?
|
||||
2. 为什么 `print(user_name)` 和 `print("user_name")` 的结果不同?
|
||||
3. `True` 与 `"True"` 是同一种数据类型吗?
|
||||
4. 为什么推荐使用 `learning_days`,而不是 `a`?
|
||||
5. 如果先执行 `score = 10`,再执行 `score = 20`,最后输出的值是什么?
|
||||
|
||||
## 十八、本课小结
|
||||
|
||||
- 变量是程序中保存和引用数据的名称;
|
||||
- `=` 用于把右边的数据赋给左边的变量;
|
||||
- `str` 表示字符串,`int` 表示整数,`float` 表示浮点数,`bool` 表示布尔值;
|
||||
- `type()` 可以查看数据类型;
|
||||
- 变量名与带引号的字符串含义不同;
|
||||
- 变量名应清晰,并优先使用蛇形命名法;
|
||||
- 变量可以用于计算,也可以被重新赋值;
|
||||
- `int()`、`float()` 和 `str()` 可以进行基础类型转换;
|
||||
- f-string 可以清晰地组合固定文字和变量数据。
|
||||
|
||||
## 十九、验收标准
|
||||
|
||||
- [ ] 能解释变量和赋值的含义;
|
||||
- [ ] 能创建字符串、整数、浮点数和布尔值变量;
|
||||
- [ ] 能使用 `type()` 查看变量类型;
|
||||
- [ ] 能判断一个变量名是否符合基本规则;
|
||||
- [ ] 能使用变量完成简单计算;
|
||||
- [ ] 能使用 f-string 输出包含变量的句子;
|
||||
- [ ] 能完成并运行 `practice.py`;
|
||||
- [ ] 能回答五道思考题。
|
||||
41
01_python基础/1_2_变量与数据类型/practice.py
Normal file
41
01_python基础/1_2_变量与数据类型/practice.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# 第 1-2 课课堂练习:创建个人 Python 学习档案
|
||||
#
|
||||
# 完成要求:
|
||||
# 1. 根据每道题的注释,在指定位置编写代码。
|
||||
# 2. 变量名使用有意义的英文蛇形命名法。
|
||||
# 3. 字符串、整数、浮点数和布尔值的数据类型必须正确。
|
||||
# 4. 不要删除题目注释。
|
||||
# 5. 完成后运行:python practice.py
|
||||
|
||||
|
||||
# 练习一:创建一个字符串变量 user_name,保存你的名字或称呼。
|
||||
|
||||
# 练习二:创建一个整数变量 learning_days,表示你已经学习 Python 的天数。
|
||||
|
||||
# 练习三:创建一个浮点数变量 daily_learning_hours,表示你计划每天学习的小时数。
|
||||
# 例如每天学习一个半小时,可以保存为 1.5。
|
||||
|
||||
# 练习四:创建一个布尔值变量 is_first_lesson_finished,表示你是否完成了第一课。
|
||||
|
||||
# 练习五:分别使用 type() 输出以上四个变量的数据类型。
|
||||
# 运行后应能看到 str、int、float 和 bool。
|
||||
|
||||
# 练习六:创建整数变量 completed_lessons,保存已经完成的课程数 1。
|
||||
# 再创建整数变量 current_lessons,保存当前正在学习的课程数 1。
|
||||
# 将两者相加,并把结果保存到变量 total_lessons 中。
|
||||
# 最后输出 total_lessons。
|
||||
|
||||
# 练习七:使用 f-string 输出一段完整的学习档案。
|
||||
# 句子中至少包含 user_name、learning_days 和 daily_learning_hours 三个变量。
|
||||
# 预期形式类似:Bruce 已学习 Python 2 天,计划每天学习 1.5 小时。
|
||||
|
||||
# 练习八:创建字符串变量 lesson_count_text,保存字符串 "2"。
|
||||
# 使用 int() 将它转换为整数,并把结果保存到 lesson_count 变量中。
|
||||
# 分别输出 lesson_count 的值和数据类型。
|
||||
|
||||
|
||||
# 完成全部练习后,请检查:
|
||||
# 1. 程序能否从头到尾运行且没有错误;
|
||||
# 2. 四种基础数据类型是否选择正确;
|
||||
# 3. 变量名是否能清楚表达数据的含义;
|
||||
# 4. f-string 中的花括号是否使用了正确的变量名。
|
||||
75
01_python基础/1_2_变量与数据类型/variables_and_types.py
Normal file
75
01_python基础/1_2_变量与数据类型/variables_and_types.py
Normal file
@@ -0,0 +1,75 @@
|
||||
# 第 1-2 课示例:变量与数据类型
|
||||
#
|
||||
# 建议先阅读本课 README.md,再从上到下阅读和运行本文件。
|
||||
# 每一段示例只演示一个主要知识点,便于对照终端输出进行理解。
|
||||
|
||||
|
||||
# 一、创建变量并输出变量保存的数据
|
||||
# 赋值符号右边的字符串 "Bruce" 会交给左边的变量 user_name。
|
||||
user_name = "Bruce"
|
||||
print(user_name)
|
||||
|
||||
|
||||
# 二、变量名与字符串不是同一个概念
|
||||
# 第一行读取变量中的数据,因此输出 Bruce。
|
||||
# 第二行直接输出引号中的文字,因此输出 user_name。
|
||||
print(user_name)
|
||||
print("user_name")
|
||||
|
||||
|
||||
# 三、创建四种基础数据类型
|
||||
# str:字符串,用于表示文字。
|
||||
learning_goal = "开发 LLM Agent"
|
||||
|
||||
# int:整数,用于表示没有小数部分的数字。
|
||||
completed_lessons = 1
|
||||
|
||||
# float:浮点数,初学阶段可以把它理解为小数。
|
||||
daily_learning_hours = 1.5
|
||||
|
||||
# bool:布尔值,用于表示真或假、是或否。
|
||||
is_first_lesson_finished = True
|
||||
|
||||
|
||||
# 四、使用 type() 查看每个变量的数据类型
|
||||
print(type(learning_goal))
|
||||
print(type(completed_lessons))
|
||||
print(type(daily_learning_hours))
|
||||
print(type(is_first_lesson_finished))
|
||||
|
||||
|
||||
# 五、使用变量进行简单计算
|
||||
# 两个整数相加后,计算结果会保存到 total_lessons 中。
|
||||
new_lessons = 1
|
||||
total_lessons = completed_lessons + new_lessons
|
||||
print(total_lessons)
|
||||
|
||||
|
||||
# 六、重新给变量赋值
|
||||
# learning_days 最初保存 1,第二次赋值后改为保存 2。
|
||||
learning_days = 1
|
||||
print(learning_days)
|
||||
|
||||
learning_days = 2
|
||||
print(learning_days)
|
||||
|
||||
|
||||
# 七、进行基础类型转换
|
||||
# age_text 是字符串,使用 int() 后得到整数 18。
|
||||
age_text = "18"
|
||||
age = int(age_text)
|
||||
print(age)
|
||||
print(type(age))
|
||||
|
||||
# course_count 是整数,使用 str() 后得到字符串 "8"。
|
||||
course_count = 8
|
||||
course_count_text = str(course_count)
|
||||
print(course_count_text)
|
||||
print(type(course_count_text))
|
||||
|
||||
|
||||
# 八、使用 f-string 组合固定文字与变量
|
||||
# 字符串前的 f 表示这是格式化字符串。
|
||||
# 花括号中的变量会被替换成变量当前保存的数据。
|
||||
print(f"{user_name} 已经学习 Python {learning_days} 天。")
|
||||
print(f"当前目标:{learning_goal}")
|
||||
Reference in New Issue
Block a user