簡易計算器 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
英文地址,請注明出處:http://en.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分支來新建一個分支 …