基础 · #1 / 11
变量、类型与输入/输出
名字、类型转换与用户输入
为什么重要
你在 Python 中修复的每一个 bug,都始于理解类型、名字和输入/输出。
核心思想
变量是贴在对象上的标签。你随时可以重新贴标签,但对象本身保持不变——而且对象始终携带着它自己的类型。
试一试
type() 是你最快的调试器。当数字表现得像字符串(或反过来)时,type() 会告诉你原因。
age = 25
height = 5.9
name = "Ada"
is_engineer = True
print(age, type(age).__name__)
print(height, type(height).__name__)
print(name, type(name).__name__)
print(is_engineer, type(is_engineer).__name__)
input() 永远返回一个字符串。在做数学运算之前先做类型转换——否则会得到 "2" + "3" == "23"。
# input() blocked in Pyodide — pretend the user typed "42"
raw = "42"
print("raw:", raw, type(raw).__name__)
n = int(raw)
print("n*2 =", n * 2)
# What happens if you forget to cast?
try:
print(raw + 1)
except TypeError as e:
print("TypeError:", e)
快速检查
- 问:
input()是什么类型? 答:str - 问:
int("10.5")会发生什么? 答: 它会报错——要先转换成float。
小练习
- 请求输入两个数字,并打印它们的和。
- 用输入把厘米转换成米。
常见错误
- 错误:
age = input(...)之后写age + 1。 修正:age = int(input(...))。 - 错误: 遮蔽内置名字,比如
list = []。 修正: 使用更好的名字。
关键要点
- 变量指向对象;类型属于对象。
input()永远返回一个str——在做数学运算前用int()/float()转换。- 用
type()来诊断莫名其妙的 bug。 - Python 是动态类型的:同一个名字可以重新绑定到另一种类型。