Python入门实战:华氏温度转摄氏温度小程序
2026/8/30 18:10:15 网站建设 项目流程

之前学习 Python 的时候,很多教程一上来就讲变量、列表、字典,概念背了一堆,但真正自己动手时还是不知道代码该怎么组织。其实入门阶段最需要的不是背诵语法,而是通过一个完整的小程序,把“输入数据 → 处理数据 → 输出结果”这条主流程跑通。本文就从一个非常经典、也非常适合新手练手的案例说起:编写一个华氏温度转摄氏温度的小程序。

这个案例虽然简单,但涉及的知识点非常集中:变量、数据类型、input 输入、float 类型转换、算术表达式、print 输出、字符串格式化,稍加扩展还能练习函数封装、异常处理和循环。可以说,把这一段代码真正吃透,Python 基础语法的一大半就算稳了。适合完全零基础的新手,也适合学过一点语法但缺少完整实战经验的朋友用来巩固。

1. 背景与核心概念

1.1 为什么用温度转换作为入门案例

温度转换几乎是所有编程语言教程里的“保留节目”,地位类似于“Hello World”。原因很直接:

  • 公式简单,不需要额外背景知识;
  • 输入输出关系清晰,能直观看到程序做了什么;
  • 涉及数值运算,适合理解类型转换;
  • 后续可以轻松扩展成带界面的版本、批量文件处理版本,甚至接入物联网传感器数据。

而且这个例子有一个天然的真实感。你出游时如果看到的天气预报是华氏度,就需要快速换算成自己熟悉的摄氏度。写一个小程序来完成换算,比每次掏出手机计算器更快,也更有“程序解决实际生活问题”的感觉。

1.2 华氏度与摄氏度的换算关系

摄氏度(Celsius,符号 °C)和华氏度(Fahrenheit,符号 °F)是两种常见的温度计量单位。

摄氏度以水的冰点为 0°C,沸点为 100°C,是国际单位制(SI)的一部分,也是我国日常使用的温标。华氏度以冰点为 32°F,沸点为 212°F,主要在美国等少数国家使用。

两者之间的换算公式如下:

  • 华氏度转摄氏度:C = (F - 32) × 5 / 9
  • 摄氏度转华氏度:F = C × 9 / 5 + 32

注意,公式中5 / 9在 Python 3 里得到的是浮点数结果,不是整数除法。这个细节后面会展开说明。

1.3 本案例的完整流程

我们要实现的程序很简单:

  1. 程序运行后,提示用户输入一个华氏温度;
  2. 用户通过键盘输入数值并按回车;
  3. 程序把输入的字符串转换为数值类型;
  4. 程序根据公式计算对应的摄氏温度;
  5. 程序把结果输出到屏幕上。

整个流程只需要几行代码就能完成,但每一步背后都对应着 Python 的基础知识。把这套流程理解透了,后面写任何“输入-计算-输出”型的程序都会非常顺畅。

2. 环境准备与版本说明

2.1 Python 版本选择

目前 Python 官方已经全面进入 Python 3 时代。本文的所有代码都基于 Python 3 编写,建议使用 Python 3.8 及以上版本。我本地环境用的是 Python 3.11,不过这段代码没有依赖任何新特性,Python 3.8、3.9、3.10、3.12 都可以正常运行。

新手在下载 Python 时,直接去 Python 官网下载对应系统的安装包即可。Windows 安装时有一个很重要的勾选项:Add Python to PATH,一定要勾选。如果没有勾选,后面在命令行里执行python命令时会出现“python 不是内部或外部命令”的报错。

macOS 和 Linux 系统一般自带 Python 3,但版本可能偏旧。如果命令python3 --version能正常输出版本号,就说明环境已经可用。

2.2 开发工具推荐

写 Python 不一定需要安装复杂的 IDE。刚开始建议用轻量编辑器,等代码量大了再切换到专业 IDE。

  • VS Code:免费、插件丰富,配合 Python 官方插件可以获得代码补全、调试、虚拟环境支持,非常适合新手长期使用。
  • PyCharm Community Edition:JetBrains 出的 Python 专业 IDE,社区版免费,功能完整,但启动相对较重。
  • IDLE:Python 自带的简易编辑器,安装 Python 后就有,适合临时写几行代码,但做大一点的项目体验一般。

本文的示例用 VS Code 演示,但代码本身在哪个工具里都能运行。

2.3 项目目录结构

我们新建一个项目目录,用来存放本系列的学习代码:

python-tutorial/ └── lesson01/ └── fahrenheit_to_celsius.py

第一步先创建一个名为python-tutorial的文件夹,在该文件夹下再创建lesson01子文件夹,里面新建fahrenheit_to_celsius.py文件。这个文件就是我们要编写的 Python 脚本。

新建文件后,可以先在文件里写一行最简单的输出代码,测试环境是否正常:

# 文件路径:lesson01/fahrenheit_to_celsius.py print("Hello, Python!")

在终端里进入lesson01目录,执行:

python fahrenheit_to_celsius.py

如果看到屏幕输出Hello, Python!,说明 Python 环境已经准备完成。

3. 核心语法拆解

在写完整代码之前,我们先拆解这个案例涉及的核心语法点。这一节建议反复看,每个点都是后续编程使用频率极高的基础。

3.1 input():从键盘获取输入

input()是 Python 内置函数,作用是等待用户在终端输入一行文本,按下回车后返回用户输入的字符串内容。

temp_f = input("请输入华氏温度: ")

运行这一行时,程序会先在屏幕上显示提示文字“请输入华氏温度: ”,然后等待用户输入。用户输入的内容无论是什么数字或字母,input()的返回值永远是字符串类型

这是新手最容易忽略的一点。即使你输入的是数字100,程序接收到的也不是整数 100,而是字符串"100"。字符串不能直接参与数学运算,所以下一步必须做类型转换。

3.2 变量与赋值

变量是用来存储数据的容器。Python 的变量不需要提前声明类型,直接赋值即可。

temp_f = input("请输入华氏温度: ")

这里temp_f就是变量名。=是赋值运算符,含义是把右侧的值存入左侧的变量。变量名的命名遵守几个简单规则:

  • 只能由字母、数字、下划线组成;
  • 不能以数字开头;
  • 不能使用 Python 关键字(如ifforwhile);
  • 推荐使用小写字母加下划线的 snake_case 风格,例如temp_fcelsius_temp

3.3 float():字符串转浮点数

float()是 Python 内置函数,可以把数字字符串或整数转换为浮点数。

temp_f = float(temp_f)

如果用户输入的是"100",转换后就变成浮点数100.0。这样一个数值类型的变量就可以参与算术运算了。

这里需要提一个常见的转换错误:如果用户输入的不是数字,比如"abc",执行float("abc")时会抛出ValueError异常。这种情况怎么处理,后面“进阶版代码”会演示用try-except捕获异常。

3.4 算术运算符与表达式

Python 支持常见的算术运算符:

运算符含义示例
+加法5 + 3
-减法5 - 3
*乘法5 * 3
/除法5 / 2
//整除5 // 2
%取余5 % 2
**幂运算2 ** 3

华氏度转摄氏度的公式用代码表达如下:

temp_c = (temp_f - 32) * 5 / 9

注意5 / 9在 Python 3 中执行的是浮点除法。如果你不小心写成5 // 9,结果会是 0,因为整除直接丢弃小数部分。这是新手很容易踩的坑,后面排查部分会再提。

3.5 print():输出结果

print()是 Python 内置的输出函数。它可以把一个或多个值输出到终端。

print("摄氏温度为:", temp_c)

多个参数之间默认用空格分隔。所以上面这行代码输出的效果是:

摄氏温度为: 37.77777777777778

如果不希望输出这么长的小数,可以配合字符串格式化来控制位数。

3.6 字符串格式化:让输出更友好

Python 3.6 之后引入了 f-string 格式化方式,在字符串前加一个fF,然后用花括号{}把变量或表达式包起来,非常直观。

print(f"摄氏温度为: {temp_c:.2f}")

这里:.2f表示把temp_c格式化为保留两位小数的浮点数。例如输入华氏温度100,输出结果为:

摄氏温度为: 37.78

相比原来的长串小数,这个输出明显更友好,也更适合直接展示给用户。

4. 完整实战案例

4.1 版本一:最简实现

我们先写一个最精简的可运行版本。这个版本不考虑异常处理和代码复用,重点是让整体流程跑通。

# 文件路径:lesson01/fahrenheit_to_celsius.py # 1. 用户输入华氏温度(字符串类型) temp_f = input("请输入华氏温度: ") # 2. 字符串转浮点数 temp_f = float(temp_f) # 3. 摄氏度换算公式 temp_c = (temp_f - 32) * 5 / 9 # 4. 输出结果,保留两位小数 print(f"摄氏温度为: {temp_c:.2f}")

运行方式与前面测试环境时一样,在终端执行:

python fahrenheit_to_celsius.py

运行效果如下:

请输入华氏温度: 100 摄氏温度为: 37.78

这个版本虽然只有短短几行,但已经完成了“输入 → 处理 → 输出”的完整闭环。你可以尝试多输入几个值验证公式,比如输入32,输出应该是0.00;输入212,输出应该是100.00

4.2 版本二:封装成函数

企业开发中,我们通常不会把核心逻辑直接裸露在脚本顶层,而是封装成函数。这样函数可以被其他地方重复调用,也方便测试。

所谓“函数”,可以理解为一个能完成特定功能的代码块。用def关键字定义,函数名字后面跟着括号,括号里放参数。

# 文件路径:lesson01/fahrenheit_to_celsius_v2.py def fahrenheit_to_celsius(f): """将华氏温度转换为摄氏温度""" return (f - 32) * 5 / 9 def main(): temp_f = float(input("请输入华氏温度: ")) temp_c = fahrenheit_to_celsius(temp_f) print(f"摄氏温度为: {temp_c:.2f}") if __name__ == "__main__": main()

这里有几个新知识点:

  • def fahrenheit_to_celsius(f):定义了一个名为fahrenheit_to_celsius的函数,参数是f
  • 函数体里return表示把计算结果返回给调用方。
  • main()函数负责组织程序的主流程。
  • if __name__ == "__main__":是 Python 的一个固定写法,表示“当这个文件被直接运行时,执行 main()”。如果文件被其他模块导入,这一行不会执行,避免产生副作用。

这个写法是 Python 项目中最常见的结构之一,建议从一开始就习惯它。

4.3 版本三:增加输入校验

前面提到,如果用户输入的不是数字,程序会直接报错退出。真实场景中用户输入不可控,所以我们需要加入异常处理。这里引入 Python 的try-except语句:

# 文件路径:lesson01/fahrenheit_to_celsius_v3.py def fahrenheit_to_celsius(f): """将华氏温度转换为摄氏温度""" return (f - 32) * 5 / 9 def main(): try: temp_f = float(input("请输入华氏温度: ")) temp_c = fahrenheit_to_celsius(temp_f) print(f"摄氏温度为: {temp_c:.2f}") except ValueError: print("输入格式错误,请输入一个数值。例如 98.6") if __name__ == "__main__": main()

try块里放可能出错的代码。当执行float(input(...))时,如果用户输入了"abc"float()会抛出ValueError,程序不会终止,而是跳转到except ValueError分支继续执行,提示用户输入错误。

这样程序就算遇到非法输入也能保持正常运行,体验会好很多。

4.4 版本四:支持连续转换

目前的版本一次运行只能转换一个温度。如果想连续转换多个温度,就要用到while循环。

# 文件路径:lesson01/fahrenheit_to_celsius_v4.py def fahrenheit_to_celsius(f): """将华氏温度转换为摄氏温度""" return (f - 32) * 5 / 9 def main(): while True: user_input = input("请输入华氏温度(输入 q 退出): ") if user_input.lower() == "q": print("程序已退出。") break try: temp_f = float(user_input) temp_c = fahrenheit_to_celsius(temp_f) print(f"摄氏温度为: {temp_c:.2f}\n") except ValueError: print("输入格式错误,请输入一个数值。\n") if __name__ == "__main__": main()

while True是一个无限循环,只有遇到break语句才会跳出。用户输入qQ时,.lower()会把字符串转换成小写,所以Q也能被识别为退出命令。

运行效果:

请输入华氏温度(输入 q 退出): 100 摄氏温度为: 37.78 请输入华氏温度(输入 q 退出): 32 摄氏温度为: 0.00 请输入华氏温度(输入 q 退出): q 程序已退出。

4.5 结果说明

四个版本的代码,难度逐渐递增,但核心公式始终没有变。第一个版本适合理解基础;第二个版本引入了函数封装;第三个版本补上了异常处理;第四个版本加入了循环交互。从工程角度看,第四个版本已经具备了一个小型命令行工具的基本雏形:明确的函数边界、健壮的输入容错、可循环使用。

建议读者按顺序把这四个版本自己敲一遍,不要直接复制粘贴。边敲边思考每一行代码的作用,这样才能真正把语法转化为自己的编程能力。

5. 常见问题与排查思路

新手在运行这段代码时可能会遇到一系列报错。我把常见的几种情况整理成下面的表格,并给出定位思路。

问题现象常见原因排查思路
NameError: name 'temp_f' is not defined变量名拼写不一致,或者变量还没有被赋值就使用检查变量名大小写和拼写,检查赋值语句是否在引用语句之前
ValueError: could not convert string to float: 'abc'用户输入了非数字内容,float()无法转换try-except捕获ValueError,或先校验输入内容
SyntaxError: invalid syntax括号不匹配,或使用了中文输入法的标点符号检查代码中所有的括号、引号、冒号是否都是英文半角符号
IndentationError: unexpected indent代码缩进不正确,Python 用缩进表示代码块统一使用 4 个空格缩进,不要混用 Tab 和空格
计算结果永远是0.0公式中把5 / 9误写成5 // 9,整除结果为 0检查公式,确认除法运算符是/
终端窗口一闪而过脚本运行结束后窗口自动关闭,看不到输出在命令行手动运行脚本,或用 IDE 的运行按钮
执行python提示“不是内部或外部命令”安装 Python 时没有勾选“Add Python to PATH”修复安装或手动配置环境变量

除了表格里的内容,还有一个值得注意的问题:如果用户在某个 Python 2 环境中运行带print(f"...")的代码,会报语法错误,因为 f-string 是 Python 3.6 才引入的语法。现在入门学习请直接使用 Python 3,不要再用 Python 2 了。

另外,如果你在 VS Code 中运行代码,注意选择正确的解释器。左下角的状态栏会显示当前使用的 Python 环境。如果同时安装了多个 Python 版本,可能会出现解释器不匹配的情况,导致某个模块安装后找不到。

6. 最佳实践与工程建议

6.1 变量命名要见名知意

新手容易犯的一个错误是给变量起很随意的名字,比如abct。代码写完后自己可能还记得含义,但过两周再看就很痛苦。

建议用能表达含义的英文单词:

  • temp_f表示华氏温度;
  • temp_c表示摄氏温度;
  • fahrenheit_to_celsius作为函数名,描述“华氏转摄氏”这个行为。

Python 官方推荐变量名和函数名使用小写字母加下划线(snake_case),类名使用大驼峰(PascalCase),常量通常全大写。在后续项目中尽早养成这个习惯,能省下大量读代码的时间。

6.2 把核心逻辑封装成函数

即使是几行的小程序,也建议把核心计算逻辑封装成函数。这样做的好处是:

  • 核心逻辑只有一份,便于修改和维护;
  • 可以在函数内部加上 docstring(文档字符串),说明函数的用途;
  • 方便在编写自动化测试时直接导入函数进行断言。

举个例子,如果后续需要写测试,可以直接这样验证函数:

assert fahrenheit_to_celsius(32) == 0 assert fahrenheit_to_celsius(212) == 100

这种测试方式比运行整个程序、人工观察输出要可靠得多。

6.3 不要对用户输入做任何假设

用户的输入是不可控的。真实程序运行中,用户可能输入空格、字母、负数、超长数字、甚至粘贴一段文字。所以在处理外部输入时,一定要做好边界处理:

  • float()转换前可以先strip()去掉首尾空格;
  • 对转换过程使用try-except捕获异常;
  • 如果有业务范围限制(例如温度不能低于绝对零度),需要额外校验。

如果你想在代码里加入物理世界的边界校验,可以了解一个冷知识:-40°C 正好等于 -40°F。这是一个可以用来验证程序是否正确的好用例。

6.4 安全提醒:不要使用 eval()

有些新手会在处理用户输入时使用eval()函数,因为eval("5+3")可以直接得到数字 8。但从安全角度来说,eval()会执行任意字符串内容,存在严重的安全风险。用户输入的内容如果被恶意利用,可能导致程序执行危险操作。

简单总结:生产环境中永远不要使用eval()处理用户输入。类型转换用int()float(),数学计算用表达式或标准库中的ast.literal_eval()(在完全可信且需要解析字面量时才考虑)。

6.5 保留适当的小数精度

温度转换结果大部分情况下没有必要展示十多位小数,保留 1 到 2 位小数即可。在 f-string 中用:.2f控制格式,既能让输出更美观,也能避免浮点数精度问题引起的困惑。

这里顺带提一个浮点数的经典现象:

print(0.1 + 0.2)

输出结果是0.30000000000000004,而不是0.3。这是计算机存储浮点数的二进制精度问题,所有编程语言都存在。学会用格式化输出来规避展示层面的误差,是入门阶段就应该掌握的技巧。

6.6 利用命令行参数扩展程序

当前版本是通过input()交互式输入温度的。如果希望程序可以直接处理命令行传参,比如执行python fahrenheit_to_celsius.py 100直接得到结果,可以用sys.argv或者更推荐的argparse标准库。

示例思路如下:

import sys def fahrenheit_to_celsius(f): return (f - 32) * 5 / 9 if __name__ == "__main__": if len(sys.argv) < 2: print("用法: python fahrenheit_to_celsius.py <华氏温度>") sys.exit(1) temp_f = float(sys.argv[1]) temp_c = fahrenheit_to_celsius(temp_f) print(f"摄氏温度为: {temp_c:.2f}")

这样程序就多了一种使用方式,更加灵活。需要注意的是,sys.argv中的参数默认也是字符串类型,所以依然需要调用float()做类型转换。

7. 总结与学习路线

通过华氏温度转摄氏温度这个小项目,我们完整走了一遍 Python 入门最核心的流程:定义变量、获取用户输入、转换类型、执行算术运算、格式化输出、封装函数、处理异常、使用循环。这些知识点并不是零散的语法碎片,而是组装成了一个真正能运行、能交互、有容错的小程序。

接下来可以按下面的路线继续深入:

  1. 条件判断:如果输入的温度低于某个阈值,给出不同的提示,练习if-elif-else
  2. 循环进阶:把第四版代码改成固定次数循环,或使用for循环遍历一组测试数据。
  3. 文件读写:读取一个包含多个华氏温度的文本文件,批量转换为摄氏温度后写入新文件。
  4. 数据格式化:用format().2f、对齐方式等规则,生成美观的报表。
  5. 图形界面:尝试用 Tkinter 或 PySide 做一个带输入框和按钮的桌面小程序。
  6. 测试:学习pytest,为fahrenheit_to_celsius函数编写自动化测试。

每一步都是建立在今天这段代码基础之上的自然延伸。写代码最忌讳只看不练,建议把本文提到的四个版本都运行一遍,再尝试修改里面的参数和提示语,体验一下“改代码 → 出效果”的反馈过程。亲手敲过一遍并理解了每一行的作用之后,Python 入门的第一块基石就算真正打牢了。

如果本文对你有帮助,可以收藏备用,也欢迎在评论区交流运行结果和遇到的问题。下一篇实战系列会在这个基础上引入条件判断和循环,让程序具备更完整的逻辑能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询