简易计算器 Python 实现

目录

一、代码逐步分析(适合刚入门的朋友看)

1.定义了一个名为simple_calculator的函数,封装了整个计算器的逻辑。

二、深入分析代码块,用更加官方的语词来说(适合想要深入学习的朋友)

主循环结构

退出机制

输入处理核心

解析操作数和运算符

计算逻辑

结果显示

错误处理

程序入口

完整代码:


一、代码逐步分析(适合刚入门的朋友看)

1.定义了一个名为simple_calculator的函数,封装了整个计算器的逻辑。
def simple_calculator():

2.打印欢迎信息和说明:

print("简易计算器")
print("支持运算: + (加), - (减), * (乘), / (除)")
print("输入 'q' 退出程序\n")

在程序开始时显示欢迎信息,告知用户支持的操作以及如何退出。

3.主循环:

while True:

使用一个无限循环,直到用户输入'q'退出。

4. 获取用户输入:

expression = input("请输入算式 (例如: 5 + 3): ")

5. 退出检查:

if expression.lower() == 'q':print("\n感谢使用简易计算器!")break

如果用户输入'q'(不区分大小写),则打印感谢信息并退出循环。

6. 异常处理:

try:# 尝试执行代码
except ValueError:# 处理数值转换错误
except Exception as e:# 处理其他异常

使用try-except块来捕获并处理可能出现的错误。

7. 表达式处理:

parts = expression.split()

将用户输入的表达式按空格分割成列表。

8. 输入格式验证:

if len(parts) != 3:print("错误: 请输入有效的算式格式 (例如: 5 + 3)\n")continue

确保用户输入由三部分组成(两个操作数和一个操作符)。

9. 操作数和操作符解析:

num1 = float(parts[0])
operator = parts[1]
num2 = float(parts[2])

将字符串转换为浮点数,以便进行数学运算。

10. 执行计算:

if operator == '+':result = num1 + num2
elif operator == '-':result = num1 - num2
elif operator == '*':result = num1 * num2
elif operator == '/':if num2 == 0:print("错误: 除数不能为零\n")continueresult = num1 / num2
else:print(f"错误: 不支持的运算符 '{operator}'\n")continue

根据操作符执行相应的计算。除法时检查除数是否为零。

11. 显示结果:

print(f"结果: {result:.2f}\n")

以保留两位小数的格式打印结果。

12. 错误处理:

  • ValueError:当无法将输入转换为浮点数时触发。
  • Exception:捕获其他所有异常(一般不会触发,但为了安全)。

13. 程序入口:

if __name__ == "__main__":simple_calculator()

当脚本直接运行时,调用计算器函数。

二、深入分析代码块,用更加官方的语词来说(适合想要深入学习的朋友)

# 简易计算器代码分析我将详细分析这个简易计算器Python代码的结构、功能和设计思想:## 整体结构1. **函数封装**:`simple_calculator()`函数封装了整个计算器逻辑
2. **主程序入口**:`if __name__ == "__main__":`确保脚本直接运行时启动计算器
3. **交互循环**:使用`while True:`实现持续交互
4. **错误处理**:使用try-except块处理各种可能的错误
## 代码逐部分解析### 1. 用户界面和说明
```python
print("简易计算器")
print("支持运算: + (加), - (减), * (乘), / (除)")
print("输入 'q' 退出程序\n")
  • 功能:显示计算器名称和支持的操作
  • 设计考虑
    • 清晰告知用户可用操作
    • 提示退出方法(输入'q')
    • 使用空行(\n)改善可读性

主循环结构

while True:expression = input("请输入算式 (例如: 5 + 3): ")
  • 功能:创建无限循环,持续接收用户输入
  • 设计考虑
    • 使用while True:实现计算器的持续使用
    • 提供清晰的输入提示,包含示例格式

退出机制

if expression.lower() == 'q':print("\n感谢使用简易计算器!")break
  • 功能:检查用户是否想退出
  • 设计考虑
    • 使用lower()使命令不区分大小写
    • 提供友好的退出消息
    • break语句跳出循环,结束程序

输入处理核心

try:# 分割表达式parts = expression.split()# 验证输入格式if len(parts) != 3:print("错误: 请输入有效的算式格式 (例如: 5 + 3)\n")continue
  • 功能
    • 分割用户输入的表达式
    • 验证输入格式是否正确
  • 设计考虑
    • split()默认使用空格分割,要求用户按"数字 运算符 数字"格式输入
    • 验证表达式是否恰好分成三部分
    • 提供明确的错误提示和示例
    • continue跳过当前循环,等待下一次输入

解析操作数和运算符

num1 = float(parts[0])
operator = parts[1]
num2 = float(parts[2])
  • 功能:将字符串转换为可计算的数据
  • 设计考虑
    • 使用float()支持整数和小数运算
    • 分别提取第一个操作数、运算符和第二个操作数

计算逻辑

result = None
if operator == '+':result = num1 + num2
elif operator == '-':result = num1 - num2
elif operator == '*':result = num1 * num2
elif operator == '/':if num2 == 0:print("错误: 除数不能为零\n")continueresult = num1 / num2
else:print(f"错误: 不支持的运算符 '{operator}'\n")continue
  • 功能:根据运算符执行相应计算
  • 设计考虑
    • 支持四种基本运算:加、减、乘、除
    • 特殊处理除数为零的情况
    • 检查不支持的运算符
    • 使用continue在遇到错误时跳过当前循环
    • 使用result = None作为初始值,便于后续检查

结果显示

print(f"结果: {result:.2f}\n")
  • 功能:格式化输出计算结果
  • 设计考虑
    • 使用f-string格式化输出
    • :.2f保留两位小数,避免浮点数精度问题
    • 添加空行(\n)改善输出可读性

错误处理

except ValueError:print("错误: 请输入有效的数字\n")
except Exception as e:print(f"发生错误: {str(e)}\n")
  • 功能:捕获并处理可能的错误
  • 设计考虑
    • ValueError:处理无法转换为数字的输入
    • Exception:捕获其他所有异常
    • 提供友好的错误提示
    • 使用\n保持输出格式一致

程序入口

if __name__ == "__main__":simple_calculator()
  • 功能:定义程序启动点
  • 设计考虑
    • Python标准做法,确保脚本直接运行时启动计算器
    • 避免在导入时自动执行

完整代码:

def simple_calculator():print("简易计算器")print("支持运算: + (加), - (减), * (乘), / (除)")print("输入 'q' 退出程序\n")while True:# 获取用户输入expression = input("请输入算式 (例如: 5 + 3): ")# 退出检查if expression.lower() == 'q':print("\n感谢使用简易计算器!")breaktry:# 分割表达式parts = expression.split()# 验证输入格式if len(parts) != 3:print("错误: 请输入有效的算式格式 (例如: 5 + 3)\n")continue# 解析操作数和运算符num1 = float(parts[0])operator = parts[1]num2 = float(parts[2])# 执行计算result = Noneif operator == '+':result = num1 + num2elif operator == '-':result = num1 - num2elif operator == '*':result = num1 * num2elif operator == '/':if num2 == 0:print("错误: 除数不能为零\n")continueresult = num1 / num2else:print(f"错误: 不支持的运算符 '{operator}'\n")continue# 显示结果print(f"结果: {result:.2f}\n")  # 保留两位小数except ValueError:print("错误: 请输入有效的数字\n")except Exception as e:print(f"发生错误: {str(e)}\n")# 启动计算器
if __name__ == "__main__":simple_calculator()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87279.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源编译器介绍

文章目录 基本构成传统编译器编译器的发展历史(History of Compiler)GCC 编译过程与原理(GCC Process and Principle)LLVM/Clang 编译过程与原理(LLVM/Clang Process and Principle)GCC与与 LLVM/Clang 的对…

C++ String知识点

当然可以!下面我将以系统全面、通俗易懂、深入浅出的方式,为你讲解 C 中非常核心但也容易被低估的内容 —— std::string。 🌟 C std::string 全面详解 📌 一、string 是什么? C 的 std::string 是 C 标准库中封装好…

全新NVIDIA Llama Nemotron Nano视觉语言模型在OCR基准测试中准确率夺冠

全新NVIDIA Llama Nemotron Nano视觉语言模型在OCR基准测试中准确率夺冠 PDF、图表、图形和仪表板等文档是丰富的数据源,当这些数据被提取和整理后,能够为决策制定提供有价值的洞察。从自动化财务报表处理到改进商业智能工作流程,智能文档处…

gradle的 build时kaptDebugKotlin 处理数据库模块

gradle的 build时输出&#xff1a; Task :app:kaptDebugKotlin 注: Processing class HDCoinBean 注: Processing class HDCurrencyBean 注: Processing class HDSelfAddCoin 注: Processing class MN 注: Creating DefaultRealmModule <—> 80% EXECUTING [7m 56s] IDLE…

二叉树的节点操作算法

235. 二叉搜索树的最近公共祖先 力扣题目链接(opens new window) 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大…

【ubuntu驱动安装】安装nvidia驱动和cuda环境

1、安装驱动 首先查看环境和显卡&#xff1a; 更新apt 查看nouveau是否禁用 如果有返回值禁用nouveau(nouveau是通用的驱动程序)&#xff08;必须&#xff09;&#xff0c;两种文件&#xff0c;22.04是下面那个 添加如下&#xff1a; 终端输入后更新 重启电脑sudo reboo…

力扣HOT100之终章:一些随笔

今天终于把力扣HOT100系列给刷完了&#xff0c;每一道题都记录了自己的思考过程和解题过程中参考的一些题解和视频&#xff0c;方便自己以后再刷的时候快速复习&#xff0c;从2025年3月4日写下第一篇博客&#xff0c;到2025年6月12日完成最后一题并写下最后一篇博客&#xff0c…

榕壹云家政系统:基于Spring Boot与UniApp的智能家政服务解决方案

在数字化浪潮下&#xff0c;传统家政行业正面临效率与服务质量的升级挑战。榕壹云公司依托前沿技术&#xff0c;推出了一款用户端与师傅端二合一的家政服务小程序&#xff0c;通过整合预约上门、分销、储值、优惠券等功能&#xff0c;为家政服务行业提供了一套高效、灵活的数字…

CSRF扩展 JSONP劫持

介绍&#xff1a;JOSNP&#xff08;JSONP with Override Security Negotiation Protocol&#xff09;劫持是一种利用JSONP &#xff08;JSON with Padding&#xff09;跨域数据获取机制的安全漏洞&#xff0c;攻击者通过篡改或伪造JSONP回调函数窃 取用户敏感数据。由于JSONP…

HTTP/HTTPS 协议解析

前言 在当今互联网时代&#xff0c;HTTP/HTTPS 协议作为 Web 通信的基石&#xff0c;承载着几乎所有的网络内容传输。对于我们而言&#xff0c;深入理解这些协议不仅是技术素养的体现&#xff0c;更是构建高性能、安全、可靠 Web 应用的必要条件。 为什么我们需要深入了解 HT…

Flask-login 处理授权逻辑

认证 vs 授权&#xff1a; 在 Web 应用程序的安全机制中&#xff0c;认证&#xff08;Authentication&#xff09; 和 授权&#xff08;Authorization&#xff09; 是两个核心概念&#xff0c;它们虽然紧密相关&#xff0c;但职责和作用不同。 认证&#xff08;Authenticatio…

xenomai3+linux构建linux实时操作系统-基于X86_64和arm

简介&#xff1a; Xenomai是一个实时性解决方案&#xff0c;通过在Linux上添加实时内核Cobalt来增强实时性能。它有三个主要部分&#xff1a;libcobalt&#xff08;用户空间实时库&#xff09;、Cobalt&#xff08;内核空间实时内核&#xff09;和硬件架构特定层&#xff08;ip…

Linux核心文件(core file)详解

一、核心文件&#xff08;core file&#xff09;概述 1.1 什么是核心文件 核心文件&#xff08;core file&#xff09;是Linux操作系统在程序崩溃时生成的一种转储文件。它包含了程序崩溃时的内存内容、寄存器状态和执行状态。通过分析核心文件&#xff0c;开发者可以找到程序…

java中跨域问题及解决方案

1. 什么是跨域 从不同的地址访问另外一个地址就是跨域 2.跨域一定会有异常吗 跨域异常只会在前端发生&#xff0c;后端跨域不会产生异常 因为浏览器有一个叫做同源策略的东西&#xff0c;它发现不同域之间的访问是不安全的行为&#xff0c;会禁止&#xff0c;所以会抛出异常…

网络层协议 IP 协议介绍 -- IP 协议,网段划分,私有 IP 和 公网 IP,路由

目录 1 IP 协议 1.1 IP 协议格式 2. 网段划分 2.1 网络号和主机号 2.2 传统 IP 地址分类和 CIDR 技术 2.3 特殊的 IP 地址 2.4 IP 地址的数量限制 2.5 私有 IP 和公网 IP 3. 路由 网络层主要作用是实现不同局域网之间的通信连接&#xff0c;并为数据在复杂网络环境中的…

【案例分享】KMDA-7611-S001--高性能嵌入式电脑助力双臂轮式人形机器人应用

智能制造时代&#xff0c;双臂轮式机器人需求浮出水面 随着制造业、物流业和电子商务的飞速发展&#xff0c;智能搬运机器人正成为行业降本增效的核心工具。它们不仅解决了传统物流中效率低、成本高、安全性差等痛点&#xff0c;更通过智能化与可扩展性设计&#xff0c;通过自主…

iOS App上线前的安全防线:项目后期如何用Ipa Guard与其他工具完成高效混淆部署

对大多数iOS开发者来说&#xff0c;安全并不是开发早期就能解决的问题。尤其在项目逐步进入上线准备阶段后&#xff0c;才开始集中考虑逆向破解、资源泄露等安全隐患的解决方案。这个阶段往往时间紧张、结构复杂&#xff0c;再要重构源码或引入大规模修改几乎不现实。因此&…

技术佃农时代:当云计算成为新型地主经济

技术佃农时代:当云计算成为新型地主经济 导语:当算力成为生产资料,云账单背后的「数字佃租」正悄然重塑IT生产关系——我们是否在用自己的代码为云厂商开垦数字荒地? 一、揭开云计算的「佃租算法」面纱 // 云经济体的核心收割逻辑 public class CloudLandlord {public sta…

23种设计模式图解

《设计模式&#xff1a;可复用面向对象软件的基础》是软件工程领域的经典著作&#xff0c;由四位顶尖专家&#xff08;Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides&#xff0c;合称GoF&#xff09;编写&#xff0c;首次系统化提出了23种设计模式&#xff0c;分为…

git新建一个分支到gitlab项目目录中

先向git确认身份 git config --global user.email "youexample.com"看一下当前在哪个分支上&#xff08;没啥影响&#xff09; git status lculation$ git status 位于分支 my_new_branch 您的分支与上游分支 origin/main 一致。 用origin/main分支来新建一个分支 …