🐸 青蛙编程网
首页 / Python / Python 基础 / 3. 变量与数据类型

变量与数据类型

这是什么:变量 = 给数据起的名字,一个贴了名字的盒子,随时存、随时取。

为什么用:上一章我们让电脑说了句话,但它转头就忘——程序还没学会记住数据。没有变量,程序里只能写死数字,改一个值要翻遍整个文件。

如何用:用 = 号赋值就能创建变量,本章把字符串、整数、浮点数、布尔这四种类型都试一遍。

变量:给数据贴标签

变量就是一个贴了名字的盒子。赋值用等号 =,意思是"把右边的值装进左边":

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 一把好手。

动手改

  1. 新建 me.py,用变量存下你的名字、年龄、身高,再用一句 f-string 全部打印出来
  2. 把 age = 3 改成 age = "3"(加上引号),用 print(type(age)) 看看变成了什么类型
  3. 试试 print(1 + "1"),看看报什么错——想想为什么文字和数字不能直接相加

下一章:条件判断,让程序学会"看情况办事" 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。