Python的秘密生活:沉默的类型(类型转换)
发布: (2026年2月5日 GMT+8 12:19)
3 min read
原文: Dev.to
Source: Dev.to
问题
Timothy 写了一个简单的猜数字游戏,但即使他输入了正确的数字,程序仍然提示他猜错了。
# Timothy's Guessing Game
secret_number = 7
guess = input("Guess the number (1-10): ")
if guess == secret_number:
print("You won! Amazing!")
else:
print(f"Sorry, you guessed {guess}, but the number was {secret_number}.")
输出
Guess the number (1-10): 7
Sorry, you guessed 7, but the number was 7.
为什么会这样:Python 的强类型
input()总是返回 字符串(str)。secret_number是 整数(int)。
Python 在比较不同类型的值时 不会 自动进行类型转换。因此比较 guess == secret_number 的结果为 False,因为 '7'(字符串)与 7(整数)根本不同。
类比:把一张狗的照片和真实的狗进行比较——它们看起来相似,但本质上是不同的对象。
解决办法:显式类型转换
在 input() 调用外层加上 int()(或其他合适的转换),将输入的文本转换为整数。
# Timothy's Fixed Game
secret_number = 7
# Convert the input string to an integer
guess = int(input("Guess the number (1-10): "))
if guess == secret_number:
print("You won! Amazing!")
else:
print(f"Sorry, you guessed {guess}, but the number was {secret_number}.")
输出
Guess the number (1-10): 7
You won! Amazing!
重要提示
如果用户输入非数字的单词,例如 "seven",int() 会抛出 ValueError。如何优雅地处理这种情况(例如使用 try/except 或进行验证)是后续课程的内容。
快速参考:常用转换
int("5")→5(整数)float("5")→5.0(浮点数)str(5)→"5"(用于拼接或打印)
尝试 int("hello") 会抛出 ValueError。
要点总结
- 规则:
input()无论用户输入什么,都会返回字符串。 - 修复:使用显式类型转换(
int()、float()等)使数据类型匹配。 - 好处:Python 的严格类型可以防止在不匹配的类型上进行意外操作,促使代码更清晰、更可靠。
展望
在下一期,Timothy 将遇到 “幽灵复制”,即复制列表时导致备份意外改变——这是可变对象引用的经典案例。