尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python入门实战:华氏温度转摄氏温度小程序

Python入门实战:华氏温度转摄氏温度小程序 之前学习 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 本案例的完整流程我们要实现的程序很简单程序运行后提示用户输入一个华氏温度用户通过键盘输入数值并按回车程序把输入的字符串转换为数值类型程序根据公式计算对应的摄氏温度程序把结果输出到屏幕上。整个流程只需要几行代码就能完成但每一步背后都对应着 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 EditionJetBrains 出的 Python 专业 IDE社区版免费功能完整但启动相对较重。IDLEPython 自带的简易编辑器安装 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 关键字如if、for、while推荐使用小写字母加下划线的 snake_case 风格例如temp_f、celsius_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 格式化方式在字符串前加一个f或F然后用花括号{}把变量或表达式包起来非常直观。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(...))时如果用户输入了abcfloat()会抛出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语句才会跳出。用户输入q或Q时.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 变量命名要见名知意新手容易犯的一个错误是给变量起很随意的名字比如a、b、c、t。代码写完后自己可能还记得含义但过两周再看就很痛苦。建议用能表达含义的英文单词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(53)可以直接得到数字 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 入门最核心的流程定义变量、获取用户输入、转换类型、执行算术运算、格式化输出、封装函数、处理异常、使用循环。这些知识点并不是零散的语法碎片而是组装成了一个真正能运行、能交互、有容错的小程序。接下来可以按下面的路线继续深入条件判断如果输入的温度低于某个阈值给出不同的提示练习if-elif-else。循环进阶把第四版代码改成固定次数循环或使用for循环遍历一组测试数据。文件读写读取一个包含多个华氏温度的文本文件批量转换为摄氏温度后写入新文件。数据格式化用format()、.2f、对齐方式等规则生成美观的报表。图形界面尝试用 Tkinter 或 PySide 做一个带输入框和按钮的桌面小程序。测试学习pytest为fahrenheit_to_celsius函数编写自动化测试。每一步都是建立在今天这段代码基础之上的自然延伸。写代码最忌讳只看不练建议把本文提到的四个版本都运行一遍再尝试修改里面的参数和提示语体验一下“改代码 → 出效果”的反馈过程。亲手敲过一遍并理解了每一行的作用之后Python 入门的第一块基石就算真正打牢了。如果本文对你有帮助可以收藏备用也欢迎在评论区交流运行结果和遇到的问题。下一篇实战系列会在这个基础上引入条件判断和循环让程序具备更完整的逻辑能力。
返回列表