PYTHON LESSON 002
会变魔术的变量
学会用变量存数据,用 input() 和 int() 做出会互动的小程序。
00 · 学习目标
这一课要解决什么?
学完后,你应该能够
- 变量名 = 值 创建变量
- input("提示") 读入一句话
- int() 把文字变成整数
01 · 核心概念
变量、input 与类型转换
变量是程序中引用对象的名称,赋值语句把右侧表达式的结果绑定到左侧变量名。input() 的返回值始终是 str;需要数值运算时必须进行明确的类型转换。
标识符变量赋值字符串类型转换GESP Python 1 级 · 变量GESP Python 1 级 · 基本数据类型变量的正式含义是“名称与对象的绑定”;“盒子”只是入门类比,不能代替准确概念。
02 · 语法与规则
先记住这 3 条,再开始写程序
变量名 = 值 创建变量先准确读出这条写法的结构与作用。
input("提示") 读入一句话换一组最小数据,手工推演一次结果。
int() 把文字变成整数再用边界值或反例确认它的适用条件。
03 · 完整实例
代码、运行结果和解释放在一起看
# 出生年份计算器
name = input("你叫什么名字?")
age = int(input("你今年几岁?"))
year = 2025
born = year - age
print("———— 计算结果 ————")
print(name + ",你好!")
print("你大约出生在", born, "年")
print("到 2035 年,你就", age + 10, "岁啦!")你叫什么名字?小明 你今年几岁?10 ———— 计算结果 ———— 小明,你好! 你大约出生在 2015 年 到 2035 年,你就 20 岁啦!
假设输入:小明、10(input 读到的内容会显示在提示语后面)。
04 · 逐步理解
每一步只解决一个问题
- 01
变量是会贴标签的盒子
变量就像一个贴了名字的盒子,等号把右边的值装进左边的名字里。之后只要喊这个名字,计算机就知道你指的是盒子里的东西。名字用字母或下划线开头,见名知意最好。
year = 2025 - 02
让程序开口提问
input() 会让程序停下来,等用户敲一句话再按回车。括号里是提示语,读到的内容可以装进变量。注意:input 读到的一定是“文字”,哪怕你敲的是数字。
name = input("你叫什么名字?") - 03
把文字变成数字
文字 "10" 和数字 10 在计算机眼里完全不同:文字不能算减法。int() 像一台转换机,把数字模样的文字变成真正的整数,才能参与计算。
age = int(input("你今年几岁?")) - 04
做一道减法
有了年份和年龄两个数字变量,一道减法就能算出出生年份,结果继续装进新变量 born。变量可以在算式里直接使用,计算机自动取出盒子里的值。
born = year - age - 05
把结果讲出来
print 可以混合输出文字和变量,用逗号隔开。字符串还能用 + 拼接:name + ",你好!" 把名字和问候连成一句话。
print("你大约出生在", born, "年") - 06
换个人再算一次
重新运行,输入同桌的名字和年龄,结果立刻不同。这就是变量的魔力:程序不变,数据在变。试着去掉 int() 运行一次,观察报错信息,读懂它你就赢了。
05 · 练习与检验
自己写出来,才算真正学会
- 1运行程序,输入自己的名字和年龄
- 2把 year 改成今年再算一次
- 3试试去掉 int() 会发生什么
- 4加一句带变量的新年祝福输出
06 · 完整知识
继续理解定义、规则和适用边界
第一次学习先完成上面的六个步骤;需要查定义、核对规则、分析误区或理解“为什么”时,再展开对应知识章。
Python 基础程序执行、输入输出、变量与数据类型从一条语句怎样执行开始,系统掌握 print、input、变量、对象、类型与显式转换。+
正式定义
Python 程序由语句和表达式组成,通常按从上到下的顺序执行。变量名通过赋值绑定到对象;对象有类型和值。input() 始终返回 str,是否转换成 int 或 float 必须由题意决定。
必须掌握
- print(*objects, sep=' ', end='\n') 可以控制对象之间的分隔符和末尾字符。
- input(prompt) 读取一行并去掉行末换行符,返回值一定是字符串。
- 赋值符号 = 建立或更新名字与对象的绑定;== 才是相等比较。
- 核心标量类型包括 int、float、bool、str 和 NoneType;bool 是 int 的子类,但语义上应当用于真假判断。
- int、float、str、bool 可做显式类型转换;转换可能失败,不能把任意文本直接当数字。
- 注释以 # 开始;规范的变量名应表达含义,不能使用关键字。
常见误区
- 把 input() 的结果直接与整数相加
- 混淆 = 与 ==
- 用 float 表示必须精确的十进制金额却不考虑误差
- 变量名覆盖 print、list 等内置名称
适用边界
- 课程先讲同步的文本输入输出;文件、网络、图形界面和异步输入分别在对应章节说明。
- Python 的变量没有固定类型,但对象有类型;这不等于程序可以随意混用类型。
编码与文本字符串、转义、切片与格式化从不可变字符序列到检索、拆分、拼接、格式化和常用判断方法。+
正式定义
str 是不可变的 Unicode 字符序列。下标访问单个字符,切片生成新字符串;任何看似“修改字符串”的方法都会返回新对象。
必须掌握
- 下标从 0 开始,负下标从末尾开始;切片 s[start:stop:step] 不包含 stop,step 不能为 0。
- 转义序列用于在字面量中表示换行、制表、引号、反斜杠或码点;原始字符串仍有末尾反斜杠限制。
- find 找不到返回 -1,index 找不到抛 ValueError;count 统计不重叠出现次数。
- split 把字符串拆成列表,join 用一个字符串连接可迭代对象中的字符串,strip 只删除两端字符。
- f-string 的格式说明可控制宽度、对齐、精度、进制和百分比;格式化不改变原值。
- isalpha/isdigit 等按 Unicode 定义,不只识别英文字母和 ASCII 数字。
常见误区
- 尝试 s[0] = 'A' 原地修改字符串
- 把 strip('ab') 误解为删除完整子串 'ab'
- find 返回 -1 后直接拿去当有效下标
- 把字节长度与字符长度混为一谈
适用边界
- 正则表达式不在低等级字符串必修范围,但复杂模式匹配时应使用 re,而不是堆叠大量 split/find。
- 面向用户的字符计数还可能涉及组合字符和字素簇,len 统计的是 Unicode 码点序列长度。
工程能力异常、文件、测试与调试读懂报错、缩小问题、设计测试,并安全地打开、读取和关闭文本文件。+
正式定义
异常是在运行期间表示错误或特殊情况的对象。调试是用可复现输入和证据定位实际行为与预期行为差异的过程;文件对象连接程序与持久化字节数据。
必须掌握
- 先读 traceback 最后一行的异常类型与消息,再从最靠近自己代码的栈帧向上追踪。
- try 只包可能失败的最小代码;except 捕获具体异常;else 处理成功路径;finally 做必需清理。
- raise 主动报告不满足的前置条件;assert 用于开发期内部假设,不用于校验不可信用户输入。
- with open(...) as file 会在退出代码块时可靠关闭文件。文本模式必须明确编码,本站统一推荐 encoding='utf-8'。
- 测试至少包含正常值、边界值、空数据、极端值和反例;每个测试只应有明确目的。
- 定位错误时一次只改一个假设,保留能稳定复现问题的最小输入。
常见误区
- 使用 except: 吞掉所有错误
- 只测题目样例就认为程序正确
- 文本文件不写 encoding
- 修复报错表象却不验证根因
适用边界
- 在线判题的学生代码由独立 Worker 执行;文件系统、网络和资源权限必须受平台限制。
- 二进制文件、JSON/CSV 和数据库各有专门格式与错误处理方式,不能按普通文本随意拆分。
程序组织类、对象、属性与方法理解对象模型和封装边界,用类表达有状态的实体,而不是把所有程序都强行改成类。+
正式定义
类描述一类对象的数据与行为;实例是类创建的具体对象。实例方法的第一个参数通常命名为 self,用来访问当前实例;__init__ 在实例创建后负责初始化状态。
必须掌握
- 实例属性通常在 __init__ 中通过 self.name = value 建立。
- 实例方法通过 object.method() 调用;Python 会自动把实例绑定给 self。
- 类属性由实例共享,实例属性属于单个对象;同名实例属性会遮蔽类属性。
- __repr__ 面向开发与调试,__str__ 面向用户显示;特殊方法应遵守其协议。
- 继承表达“是一种”关系,组合表达“拥有一个”关系;能用组合清晰表达时不要滥用继承。
- 对象相等默认仍是身份比较;需要按内容相等时要定义相应协议。
常见误区
- 在方法中漏写 self
- 把每个实例独有的可变数据写成类属性
- 只为包装几个无状态函数而建类
- 继承层次过深导致行为难以追踪
适用边界
- 课程使用普通类解释对象模型;dataclass、property、抽象基类和元类是后续工程工具。
- 算法题常用函数和基本容器更直接,不要求为了“面向对象”而增加结构。
完成检查