Skip to content

第 2 章 变量与数据类型

学习目标

  • 理解变量与赋值的含义
  • 掌握四种基本数据类型:int、float、str、bool
  • 掌握变量命名规则
  • 会用 int()float()str() 做类型转换
  • 会用 input() 接收输入、用 f-string 输出

2.1 变量与赋值

变量是给数据起的名字。赋值用等号 = 完成:把右边的值绑定到左边的名字上。

python
message = "Hello"
print(message)

输出:

Hello

三点规则,先记牢:

  1. 先赋值,后使用。使用未赋值的变量会报 NameError
  2. 可以反复赋值,新值覆盖旧值。
python
x = 10
x = 20
print(x)

输出:

20
  1. Python 是动态类型语言:变量的类型由它当前绑定的值决定,可以随时改变。
python
x = 10        # 此刻 x 是整数
x = "ten"     # 此刻 x 变成了字符串

2.2 四种基本类型

用内置函数 type() 可以查看一个值的类型:

python
print(type(42))
print(type(3.14))
print(type("hi"))
print(type(True))

输出:

<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>

四种基本类型:

  • int:整数,如 42-30
  • float:浮点数,即带小数部分的数,如 3.14-0.5
  • str:字符串,一串文本,必须用引号包裹。
  • bool:布尔值,只有两个取值 TrueFalse,表示真与假。

关于 bool 的两个常识:bool(0)False,bool(1)True;空字符串 ""False,非空字符串为 True

2.3 命名规则

变量名必须遵守以下规则:

  1. 只能包含字母、数字、下划线,且不能以数字开头
  2. 大小写敏感:scoreScore 是两个不同的名字。
  3. 不能使用 Python 关键字。关键字是语言保留给语法用的词,如 forifwhiledefclassimport。注意 printinputtype 不是关键字,它们是内置函数。
  4. 惯例:变量名使用蛇形命名法(snake_case),即小写字母加下划线,如 user_age
python
user_age = 18        # 合法
user_age_2 = 18      # 合法
python
2_user = 18          # SyntaxError: 不能以数字开头
for = 18             # SyntaxError: 使用了关键字

2.4 类型转换

三个内置函数用于在类型之间转换:

  • int(x):转为整数
  • float(x):转为浮点数
  • str(x):转为字符串
python
print(int("123"))     # 字符串 → 整数:123
print(float("3.14"))  # 字符串 → 浮点数:3.14
print(str(123))       # 整数 → 字符串:'123'
print(int(3.99))      # 浮点数 → 整数:3,小数部分直接截断
print(float(7))       # 整数 → 浮点数:7.0

输出:

123
3.14
123
3
7.0

转换不是万能的。把不合法的内容转成整数会报 ValueError:

>>> int("3.14")
ValueError: invalid literal for int() with base 10: '3.14'

int("3.14") 会报错,因为 "3.14" 不是合法的整数写法;想转小数请用 float("3.14")

2.5 输入与输出

内置函数 input() 从键盘读取一行输入,返回值永远是字符串,即使你输入的是数字:

python
name = input("请输入你的名字: ")
age = input("请输入你的年龄: ")
print(type(name), type(age))

运行示例(输入 小明18):

请输入你的名字: 小明
请输入你的年龄: 18
<class 'str'> <class 'str'>

f-string(格式化字符串)是本书推荐的输出方式:在字符串前加字母 f,用花括号 {} 嵌入变量或表达式:

python
print(f"你好,{name}!你今年 {age} 岁")

输出:

你好,小明!你今年 18 岁

如果拿 input() 的结果直接参与算术,会出错——因为它是字符串。需要先转换:

python
age = int(input("请输入你的年龄: "))
next_year = age + 1
print(f"明年你 {next_year} 岁")

动手实践

任务:温度换算。 读入一个摄氏温度,输出对应的华氏温度。换算公式:F = C × 9 ÷ 5 + 32。

python
c = float(input("请输入摄氏温度: "))
f = c * 9 / 5 + 32
print(f"{c} 摄氏度等于 {f} 华氏度")

运行示例(输入 25):

请输入摄氏温度: 25
25.0 摄氏度等于 77.0 华氏度

常见错误

错误写法报错信息原因
print(age)(未赋值)NameError: name 'age' is not defined变量必须先赋值后使用
2_user = 18SyntaxError: invalid syntax变量名不能以数字开头
for = 18SyntaxError: invalid syntax不能使用关键字作变量名
int("3.14")ValueError: invalid literal for int() with base 10: '3.14'字符串内容不是合法的整数
age = input(...) 后直接 age + 1TypeError: can only concatenate str (not "int") to strinput() 返回字符串,需先 int() 转换

章末练习

基础

  1. 定义三个变量,分别保存一个整数、一个浮点数、一个字符串,用 type() 打印它们的类型。
  2. 读入两个整数,输出它们的和与积。
  3. 把字符串 "2026" 转换为整数并加 1,输出结果。

提高

  1. 读入姓名和出生年份,计算并输出年龄(今年是 2026 年)。提示:先把出生年份用 int() 转换。
  2. 不运行代码,写出下面程序的结果,并说明理由:
    python
    a = "10"
    b = 10
    print(a + b)

挑战

  1. 读入一个小数字符串(如 "3.14"),用 float() 转换后,分别输出它的整数部分和 round() 后的结果。注意:round() 采用「银行家舍入」——恰好落在两个整数中间时取最近的偶数,例如 round(2.5) 是 2,round(3.5) 是 4。

章末自测

每题选择一个最佳答案。本书不附答案:完成后交由老师或 AI 老师批改讲解。

  1. 下列哪个是合法变量名?
    • A. 2name
    • B. user_name
    • C. user-name
    • D. user name
  2. type("123") 的结果是?
    • A. <class 'int'>
    • B. <class 'str'>
    • C. <class 'float'>
    • D. <class 'bool'>
  3. int("3.14") 会?
    • A. 返回 3.14
    • B. 返回 3
    • C. 报 ValueError
    • D. 报 TypeError
  4. int(3.99) 的结果是?
    • A. 3
    • B. 4
    • C. 3.99
    • D. 报错
  5. 变量名不能以什么开头?
    • A. 字母
    • B. 下划线
    • C. 数字
    • D. 中文
  6. input() 的返回值类型总是?
    • A. int
    • B. float
    • C. str
    • D. bool
  7. bool("") 的结果是?
    • A. True
    • B. False
    • C. 报错
    • D. 空值
  8. 下列哪个是 Python 关键字?
    • A. print
    • B. for
    • C. input
    • D. type
  9. 输出变量 name 的正确 f-string 写法是?
    • A. print("hello {name}")
    • B. print(f"hello {name}")
    • C. print("hello" + name)
    • D. print(f"hello name")
  10. 变量 x 先赋值 10,再赋值 "ten",此刻 x 的类型是? A. int B. str C. 保持 int D. 报错