# 第 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 ``` 目前只需要关注最后的 `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`; - [ ] 能回答五道思考题。