变量与数据类型
这是什么:变量 = 给数据起的名字,一个贴了名字的盒子,随时存、随时取。
为什么用:上一章我们让电脑说了句话,但它转头就忘——程序还没学会记住数据。没有变量,程序里只能写死数字,改一个值要翻遍整个文件。
如何用:用 = 号赋值就能创建变量,本章把字符串、整数、浮点数、布尔这四种类型都试一遍。
变量:给数据贴标签
变量就是一个贴了名字的盒子。赋值用等号 =,意思是"把右边的值装进左边":
name = "小青蛙" # 字符串 str:一串文字
age = 3 # 整数 int:没有小数点
weight = 0.3 # 浮点数 float:带小数点
is_cute = True # 布尔 bool:只有 True 和 False
print(name, age, weight, is_cute)
你会看到:
小青蛙 3 0.3 True
一行一个赋值,4 种最常用的数据类型就齐了。# 后面是注释,写给人看的,电脑直接忽略。
起名有三条规矩:
- 只能用字母、数字、下划线,且不能以数字开头(
age2合法,2age报错) - 区分大小写:
Age和age是两个不同的变量 - 别用 Python 的保留字当名字(如
if、for、print)
见名知义是好习惯:student_age 永远比 a 靠谱。
type():查看类型
分不清一个数据是什么类型?问 type():
print(type("小青蛙"))
print(type(3))
print(type(0.3))
print(type(True))
你会看到:
<class 'str'>
<class 'int'>
<class 'float'>
<class 'bool'>
f-string:把变量嵌进文字
想把变量和文字拼在一起说?在引号前加个 f,花括号 {} 里放变量名:
name = "小青蛙"
age = 3
print(f"{name} 今年 {age} 岁,明年就 {age + 1} 岁啦")
你会看到:
小青蛙 今年 3 岁,明年就 4 岁啦
注意 {age + 1}——花括号里还能做算术,Python 先算出结果再填进去。
逐概念解读
| 写法 | 作用 |
|---|---|
name = "小青蛙" |
赋值:把右边的值装进左边的"盒子" |
"小青蛙" / 3 / 0.3 |
字符串 str / 整数 int / 浮点数 float |
True / False |
布尔 bool,首字母必须大写 |
type(x) |
查看 x 的类型 |
f"...{x}..." |
f-string:把花括号里的变量(或表达式)换成值再输出 |
# 注释 |
注释:写给人看,电脑忽略 |
记忆口诀
等号贴标签,type 报家门,f-string 花括号里挖个坑。
❓ 常见问题
Q1:报 NameError: name 'name' is not defined 是什么意思?
原因:Python 只认识"定义过的名字",这个名字它没见过——九成是拼错了。naem 和 name 在它眼里是两个人:
naem = "小青蛙" # 定义时手滑打错了
print(name) # 取的时候又拼对了
NameError: name 'name' is not defined
修复三步:① 看报错里的行号,跳到那一行;② 逐个字母对照定义处和使用处的拼写;③ 改到完全一致——大小写也算拼写,Age 和 age 互不相认。
举一反三:以后凡见 NameError 都按这个套路查:要么拼错,要么压根还没定义(比如调用写在了定义前面)。它是新手期出勤率最高的报错,见多了扫一眼就知道病灶。
Q2:age = 3 和 age = "3" 差在哪?
差在类型:带引号是字符串 str,没引号是整数 int,长得一样也互不相认。字符串不能直接做算术——"3" + 1 会报 TypeError,因为 Python 猜不出你想"拼接"还是"相加"。
修复:做算术前先转型:int("3") + 1 得 4;反过来 str(3) + "岁" 能把数字拼进文字。
举一反三:以后学到 input() 会发现它收上来的永远是字符串,拿到手先 int() 再算,是高频操作。分不清类型就 type() 问一句。
Q3:print(name) 和 print("name") 差在哪?
差在有没有引号:不带引号 = 取变量盒子里装的东西;带引号 = 原样打印这串字:
name = "小青蛙"
print(name) # 不带引号:打印变量里装的值
print("name") # 带引号:打印 name 这四个字符本身
你会看到:
小青蛙
name
新手期"少了个引号""多了个引号"引发的输出诡异,八成是这个原因。检查口诀:引号里的永远是"台词",引号外的才是"变量"。
Q4:为什么 0.1 + 0.2 打印出来是 0.30000000000000004?
print(0.1 + 0.2)
你会看到:
0.30000000000000004
不是 Python 坏了——电脑底层用二进制存数,而 0.1、0.2 在二进制里是无限小数,存进去时就"差了一点点",相加后误差露出马脚。所有编程语言都这样,不是你的错。现阶段记住两点就够:算钱等精确场景先用整数(比如用"分")来算;浮点数比大小前先用 round() 四舍五入再比。
Q5:想交换两个变量的值,要搬一个"空盒子"倒手吗?
不用!Python 有专属语法,一行搞定:
a, b = 1, 2 # 一次给两个变量赋值
a, b = b, a # 右边先打包成 (2, 1),再同时装回左边
print(a, b)
你会看到:
2 1
关键在执行顺序:Python 先把右边的 b, a 算好打包,再一次性发给左边,所以不会互相覆盖。顺便还学会了 a, b = 1, 2 这种一行多赋值的写法。
📦 完整小示例
用变量 + f-string 做一张电子名片,存成 my_card.py:
name = "呱小吉"
age = 3
weight = 0.3
is_frog = True
print("----- 名片 -----")
print(f"姓名:{name}")
print(f"年龄:{age} 岁")
print(f"体重:{weight} 公斤")
print(f"是青蛙吗:{is_frog}")
print(f"明年就 {age + 1} 岁啦")
print("----------------")
你会看到:
----- 名片 -----
姓名:呱小吉
年龄:3 岁
体重:0.3 公斤
是青蛙吗:True
明年就 4 岁啦
----------------
逐段中文精讲
- 第 1~4 行(数据区):四行赋值把"名片要用到的数据"集中摆在开头,想换个人用这张名片,只改这四行就够——数据和展示分开,是老手写代码的底层习惯。
- 第 5 行(空行)与第 6 行(顶部分隔线):数据区和展示区之间用空行隔开,一眼就能分出"存数据的"和"干活的";接着一串
-拼出卡片顶边,纯装饰,让输出更像"一张卡片"。 - 第 7~10 行(f-string 展示区):每行都是
f"文字{变量}文字"的套路:引号外的f开启"填坑模式",{name}是挖好的坑,运行时用变量的值把坑填上。 - 第 11 行(顺带算一笔):
{age + 1}证明坑里不只能放变量,还能放算式——Python 先算出3 + 1 = 4,再把4填进去。 - 第 12 行(底部分隔线):和第 6 行呼应,卡片封底。
跑通后做个小实验:把 age = 3 改成 age = 4,只动数据区那一行,重新运行——整张名片自动更新。这就是"变量"二字的分量:数据改一处,处处跟着变。
🎯 什么时候用它
- 会变的数据都用变量:游戏分数、购物车总金额、下载进度——凡是程序运行中会变的数,都装进变量里,随用随取、随存随改。
- 配置集中管理:文件路径、要访问的网址、提示文字,在程序开头统一赋值成变量;以后要改只动开头一处,不用满篇找。
- f-string 拼报告:账单短信"尊敬的{姓名},您本月消费{金额}元"、成绩单、日志——凡"模板里挖坑、运行时填数"的活,f-string 一把好手。
动手改
- 新建
me.py,用变量存下你的名字、年龄、身高,再用一句 f-string 全部打印出来 - 把
age = 3改成age = "3"(加上引号),用print(type(age))看看变成了什么类型 - 试试
print(1 + "1"),看看报什么错——想想为什么文字和数字不能直接相加
下一章:条件判断,让程序学会"看情况办事" 🐸