Skip to content

第 02 章 · 变量、数据类型与运算 ​

本章目标 ​

搞清楚"数据"有哪几种、怎么存进变量、怎么算、怎么让用户输入。

2.1 变量:给数据起个名字 ​

python
name = "小明"
age = 18
height = 1.75
is_student = True
  • = 不是"等于",而是赋值:把右边的值放进左边的名字里。
  • 变量名要能看懂:用 user_name 而不是 a1。
  • 命名规则:字母/数字/下划线,不能以数字开头,区分大小写(Age 和 age 是两个变量)。
  • 通用风格(PEP 8):小写 + 下划线,如 total_price。

Python 是动态类型:变量本身没有类型,名字后面贴的值才有类型。

python
x = 10        # 现在是整数
x = "十"      # 现在贴了个字符串,完全合法

2.2 数字 ​

python
a = 7          # int 整数
b = 3.5        # float 小数
c = 2 + 3j     # complex 复数(知道有这回事就行)

print(a + 2)    # 9
print(a / 2)    # 3.5   ← 除法结果一定是小数
print(a // 2)   # 3     ← 整除,向下取整
print(a % 2)    # 1     ← 取余数
print(a ** 2)   # 49    ← 幂

结论要记住:/ 永远得到小数,// 才是整数。

浮点数有个著名的坑 ​

python
print(0.1 + 0.2)             # 0.30000000000000004
print(0.1 + 0.2 == 0.3)      # False  ← 竟然不相等!
print(round(0.1 + 0.2, 2))   # 0.3

为什么会这样? 因为电脑用二进制存小数,而 0.1、0.2 在二进制里是无限循环小数,存进去时就被截断了,两个不精确的数相加,误差就露出来了。这不是 Python 的 bug,所有编程语言都一样。

三条实用结论:

  1. 显示:位数多时用 round(x, 2) 或 f-string f"{x:.2f}" 处理,看起来就正常了。
  2. 比较:不要用 ==,用 math.isclose():
python
import math
print(math.isclose(0.1 + 0.2, 0.3))       # True
print(abs(0.1 + 0.2 - 0.3) < 1e-9)        # True(手写版本)
  1. 算钱:金额一定用 decimal.Decimal(第 10 章有例子),或者干脆用"分"作整数单位存(100 元存成 10000)。

顺带一个容易误解的:// 是"向下取整",不是"砍掉小数",负数上差别很明显:

python
print(7 // 2)     # 3
print(-7 // 2)    # -4   ← 不是 -3!向下(更小)的方向取整
print(int(-7 / 2))  # -3  ← int() 才是直接截断

2.3 字符串 ​

python
s1 = '单引号'
s2 = "双引号"        # 两种完全等价
s3 = "他说:\"你好\""  # 转义
s4 = '他说:"你好"'    # 或者换个引号,就不用转义
s5 = "第一行\n第二行"   # \n 换行,\t 制表符
s6 = r"C:\Users\new"   # r 前缀 = 原始字符串,反斜杠不当转义
s7 = """多行
字符串"""             # 三引号可以换行

常用操作:

python
name = "Python"
print(len(name))          # 6        长度
print(name[0], name[-1])  # P n      下标:从 0 开始,-1 是最后一个
print(name[0:3])          # Pyt      切片:含头不含尾
print(name.upper())       # PYTHON
print(name.lower())       # python
print(" py ".strip())     # py       去掉两端空格
print("a,b,c".split(",")) # ['a', 'b', 'c']
print("-".join(["a","b"]))# a-b
print("py" in name)       # False    判断包含(区分大小写)
print(name.replace("P", "J"))  # Jython

格式化输出(现在只需要会这一种):

python
name = "小明"
score = 92.5
print(f"{name} 考了 {score} 分")          # 小明 考了 92.5 分
print(f"{score:.1f}")                     # 92.5(保留 1 位小数)
print(f"{3:03d}")                         # 003(补零到 3 位)

f"..." 里的 {} 可以直接写变量名甚至表达式,是日常最常用的写法。

字符串是不可变的:name[0] = "J" 会报错。想改就得生成一个新字符串。

2.4 布尔值与 None ​

python
is_ok = True
nothing = None    # 空值:表示"什么都没有"

判断真假时,这些东西都算"假":False、0、0.0、""、[]、{}、None。其余都算"真"。

python
if []:
    print("不会执行")
else:
    print("空列表被认为是假")

2.5 类型转换 ​

python
print(int("42"))       # 42
print(int(3.9))        # 3       ← 直接砍掉小数,不是四舍五入
print(round(3.9))      # 4
print(float("1.5"))    # 1.5
print(str(100))        # '100'
print(bool(0))         # False
print(bool("0"))       # True    ← 非空字符串都是真,容易踩

int("abc") 会报 ValueError —— 这是"值不合法"的错误,第 8 章会讲怎么处理。

2.6 拿到用户的输入 ​

python
name = input("请输入你的名字:")
print(f"你好,{name}!")

⚠️ input() 拿到的永远是字符串,要算数必须转换:

python
age = input("你几岁?")
print(f"明年你 {int(age) + 1} 岁")

忘了 int() 是最典型的错误:"18" + 1 会报 TypeError。

2.7 注释 ​

python
# 这是单行注释,给人看的
price = 100  # 行末也可以

"""
三引号"字符串"写在函数/文件开头时,用作说明文档(docstring)
"""

2.8 练一练 ​

  1. 让用户输入两个数字,输出它们的和、差、积、商(注意除法结果是小数)。
  2. 让用户输入身高(米)和体重(公斤),计算 BMI 并保留 2 位小数(公式:体重 ÷ 身高²)。
  3. 已知 s = " Hello, Python! ",把它变成 "hello, python!" 并输出。

本章关键词 ​

变量、赋值、int / float / str / bool / None、// % **、f-string、切片、input()、类型转换

试图用自己的方式,重新定义属于我的人生