上一篇你让 Python 开口说话了,但它说的都是写死在代码里的话。真正替你干活时,数据每次都是新的:三月的报表有 860 行,四月变成 1200 行;要处理的文件名也每次都不同。总不能让程序靠你每月改一次代码来运转。所以这一篇解决一个小而关键的问题:程序怎么把数据“记住”,再把记住的东西说进输出里。你要认识两样东西:变量(variable)和四种最基础的数据类型。至于“一次记住 80 个文件名”那种成批记住的本事,靠的是列表,那是后面单独一篇的事——今天先专心把单个数据记牢、用好。
赋值:把右边的值装进左边的名字
print("正在整理 2024 年 3 月的报表……") 能跑,但“2024 年 3 月”是焊死在代码里的。改成先记后用的写法:
1文件名 = "2024年3月报表.xlsx"
2行数 = 860
3print(文件名)
4print(行数)运行后输出两行:2024年3月报表.xlsx 和 860。这里的 = 叫 赋值(assignment),它的含义和数学里的等号有本质区别,这是新手最容易混淆的一处。数学里 1 + 1 = 2 表示两边永远相等;程序里的 行数 = 860 是一个 有方向的动作:先看右边,把右边的值“装进”左边这个名字。名字只是贴在数据上的标签,就像快递盒上的收件人姓名——盒子里的东西才是本体,标签用来之后找到它。从这一行起,代码里再提到 行数,Python 就会自动去取那个 860。
所以记住这个读法:先右边,后左边。左边必须是名字,写 3 = 单价 会直接报错,因为数字 3 本身不能被改名。右边则可以是算式,Python 会先算完再存 1:
1行数 = 860
2列数 = 12
3格子数 = 行数 * 列数 # 先算出 10320,再装进“格子数”
4print(格子数)行尾 # 开头的是注释,给人看的,Python 不会执行。给变量起名有几条规矩:只能由字母、数字、下划线组成,不能以数字开头,不能含空格;英文名区分大小写,month 和 Month 是两个不同变量。像 if、for 这类词是 Python 留给语法用的,不能拿来当名字——下一篇你马上会亲眼见到它们。变量名技术上允许用中文(上面例子就是),但 Python 官方教程里的习惯写法是英文,如 width、height,长期写代码建议入乡随俗 1。
四种基础类型:装进变量的东西不一样
变量存的数据本身带着 类型(type),类型决定了它长什么样、能对它做什么运算。新手阶段先认识这四种:
| 类型 | 含义 | 例子 | 常见用途 |
|---|---|---|---|
int | 整数,不带小数点 | 3、-1、860 | 行数、次数 |
float | 浮点数,带小数点 | 12.5、3.14 | 单价、比例 |
str | 字符串,一段文字 | "报表.xlsx" | 文件名、提示语 |
bool | 布尔值,只有两个 | True、False | 判断的“是/否” |
两个最要紧的细节。第一,字符串必须用引号包起来,单引号双引号都行,但必须成对。引号是给 Python 的暗号:“这是文字,不是名字”。反过来,数字千万不要加引号——"860" 是文字“860”,不是能参与计算的 860。第二,类型不同,能做的运算就不同:整数和小数能算数,字符串的 + 却是把两段文字首尾接在一起,"1" + "2" 得到 "12",而不是 3。
float 这个怪名字来自“浮点”(floating point),大致可以理解成“小数点可以浮动的小数”。布尔值 True 和 False 首字母必须大写,它们只回答“是还是否”,是给判断准备的——下一篇的 if 全靠它当家 3。记不清某个东西是什么类型时,可以让 Python 自己告诉你:在 IDLE 的 Shell 里敲 type(行数),回车会显示 <class 'int'>,试试无妨。
用 f-string 把变量嵌进一句话
print(行数) 能输出数字,但光秃秃一个 860,谁看得懂它是什么?更常用的做法是把变量嵌进一句完整的话里。最省心的写法叫 f-string:在引号前面加一个字母 f,想插入变量的地方用花括号 {} 包起来 2:
1单价 = 12.5
2数量 = 4
3print(f"订单金额是 {单价 * 数量} 元。")输出:订单金额是 50.0 元。。f 是 format(格式化)的缩写,加了它,Python 就知道引号里有“坑位”要填:花括号就是坑位,运行时会自动替换成里面那个变量的当前值,里面甚至可以直接写算式。两个容易翻车的点:f 千万别漏——漏了它会老老实实把 {单价 * 数量} 当普通文字打出来;花括号要用英文半角 {},中文全角括号不认。从今天起,你的 print 可以一律写成 f-string,省心得多。
两个最常见的报错,先认识就不慌
NameError: name '行数' is not defined:意思是“行数”这个名字还没被赋值,你就拿来用了。常见于三种情况:拼写不一致;确实忘了先赋值 1;字符串漏了引号——写 print(报表) 时 Python 以为 报表 是个变量名,查无此名就报这个错。修法只有一条路:先赋值、后使用,仔细核对拼写,文字记得加引号。
TypeError: can only concatenate str (not "int") to str:这个报错常来自想手动拼句子,比如 print("第" + 月份 + "个月")。字符串用 + 只能接字符串,整数 月份 混进来,Python 直接拒绝。这正是 f-string 存在的最大理由:不必再操心手动拼接时类型对不对,一律写成 print(f"第{月份}个月"),类型问题自动消失。
两段小例子,现在就能跟着敲
在 IDLE 新建文件,任选一段输入,按 F5 运行:
1文件名 = "3月销售数据.xlsx"
2记录数 = 860
3print(f"开始整理:{文件名},共 {记录数} 条记录")1单价 = 12.5
2数量 = 4
3总价 = 单价 * 数量
4print(f"订单金额是 {总价} 元")到这里,程序已经能记住数据、把数据算进结果、再完整地说给你听——它有了“记忆”。但记住之后呢?真正的干活是 看情况行事:如果金额超过 100 就发提醒,如果记录数少得可疑就报警。这需要程序比较两个东西、判断真伪,而判断的结果正是布尔值 True 或 False——下一站,if。