深色模式
第 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,所有编程语言都一样。
三条实用结论:
- 显示:位数多时用
round(x, 2)或 f-stringf"{x:.2f}"处理,看起来就正常了。 - 比较:不要用
==,用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(手写版本)- 算钱:金额一定用
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 练一练
- 让用户输入两个数字,输出它们的和、差、积、商(注意除法结果是小数)。
- 让用户输入身高(米)和体重(公斤),计算 BMI 并保留 2 位小数(公式:体重 ÷ 身高²)。
- 已知
s = " Hello, Python! ",把它变成"hello, python!"并输出。
本章关键词
变量、赋值、int / float / str / bool / None、// % **、f-string、切片、input()、类型转换