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 将遇到 “幽灵复制”,即复制列表时导致备份意外改变——这是可变对象引用的经典案例。

Back to Blog

相关文章

阅读更多 »

如何免费学习 Python?

嗨!我对技术世界是新人,想学习 Python 开启我的编程之旅。我已经学过一点 HTML,但我意识到我并不喜欢网页开发……

Python的秘密生活:隐藏的返回

为什么你的 function 结果是 None —— 以及如何修复它。Timothy 看着屏幕笑容满面。他刚刚完成了对 pricing script 的 refactoring,使其变得整洁,……