簡介
- 實驗名稱:設計計算器
- 課程:《Python程序設計》
- 班級: 2043
- 姓名: 曲經民
- 學號:20204311
- 實驗教師:王志強
- 實驗日期:2021年4月
- 必修/選修: 選修課
實驗內容
設計並完成一個完整的計算器應用程序,完成加減乘除模等運算,功能多多益善。
實驗要求
1.使用Python語言實現具體的操作運算,並完成程序調試和運行
2.代碼托管到碼雲
實驗過程及結果
一. 實現應用的關鍵步驟設計
1.1圖形化界面
Python GUI編程
-
Tkinter:Tkinter 模塊(Tk 接口)是 Python 的標准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多數的 Unix 平台下使用,同樣可以應用在 Windows 和 Macintosh 系統里。Tk8.0 的后續版本可以實現本地窗口風格,並良好地運行在絕大多數平台中。
-
wxPython:wxPython :是一款開源軟件,是 Python 語言的一套優秀的 GUI 圖形庫,允許 Python 程序員很方便的創建完整的、功能健全的 GUI 用戶界面。
-
Jython:Jython 程序可以和 Java 無縫集成。除了一些標准模塊,Jython 使用 Java 的模塊。Jython 幾乎擁有標准的Python 中不依賴於 C 語言的全部模塊。比如,Jython 的用戶界面將使用 Swing,AWT或者 SWT。Jython 可以被動態或靜態地編譯成 Java 字節碼。
-
......
經過對比,本次實現計算器GUI界面使用Tkinter更為簡潔方便。
Tkinter編程
Tkinter 是 Python 的標准 GUI 庫。Python 使用 Tkinter 可以快速的創建 GUI 應用程序。
由於 Tkinter 是內置到 python 的安裝包中、只要安裝好 Python 之后就能 import Tkinter 庫、而且 IDLE 也是用 Tkinter 編寫而成、對於簡單的圖形界面 Tkinter 還是能應付自如。
注意:Python3.x 版本使用的庫名為 tkinter,即首寫字母 T 為小寫。
創建一個GUI程序
1、導入 Tkinter 模塊
2、創建控件
3、指定這個控件的 master, 即這個控件屬於哪一個
4、告訴 GM(geometry manager) 有一個控件產生了。
實例(Python3.x):
import tkinter
top = tkinter.Tk()
# 進入消息循環
top.mainloop()
1.2 多種運算
Python math模塊
1.Python math 模塊提供了許多對浮點數的數學運算函數。
2.要使用 math 函數必須先導入,查看math包中的內容:
>>> import math
>>> dir(math)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
>>>
各個函數解析:

二. 代碼編寫及調試運行
2.1代碼
from tkinter import Tk
from tkinter import StringVar, Entry, Button
from math import pi, e, sin, cos, tan, log, log10, ceil, degrees, radians, exp, asin, acos, floor
class calculator:
def __init__(self):
window = Tk()
window.title('Scientific Calculator')
window.configure(background="white")
self.string = StringVar()
entry = Entry(window, textvariable=self.string)
entry.grid(row=0, column=0, columnspan=6)
entry.configure(background="white")
entry.focus()
values = ["7", "8", "9", "/", "%", "clear", "AC",
"4", "5", "6", "*", "(", ")", "**",
"1", "2", "3", "-", "=", ",", "0", ".", "min", "+", "sin", "asin", "cos", "acos", "tan()",
"pow", "log10", "max", "abs", "floor", "pi", "e", "log", "ceil", "degrees", "radians"]
text = 1
i = 0
row = 1
col = 0
for txt in values:
padx = 10
pady = 10
if (i == 7):
row = 2
col = 0
if (i == 14):
row = 3
col = 0
if (i == 19):
row = 4
col = 0
if (i == 26):
row = 5
col = 0
if (i == 33):
row = 6
col = 0
if (txt == '='):
btn = Button(window, height=2, width=4, padx=70, pady=pady, text=txt,
command=lambda txt=txt: self.equals())
btn.grid(row=row, column=col, columnspan=3, padx=2, pady=2)
btn.configure(background="yellow")
elif (txt == 'clear'):
btn = Button(window, height=2, width=4, padx=padx, pady=pady, text=txt,
command=lambda txt=txt: self.delete())
btn.grid(row=row, column=col, padx=1, pady=1)
btn.configure(background="grey")
elif (txt == 'AC'):
btn = Button(window, height=2, width=4, padx=padx, pady=pady, text=txt,
command=lambda txt=txt: self.clearall())
btn.grid(row=row, column=col, padx=1, pady=1)
btn.configure(background="red")
else:
btn = Button(window, height=2, width=4, padx=padx, pady=pady, text=txt,
command=lambda txt=txt: self.addChar(txt))
btn.grid(row=row, column=col, padx=1, pady=1)
btn.configure(background="cyan")
col = col + 1
i = i + 1
window.mainloop()
def clearall(self):
self.string.set("")
def equals(self):
result = ""
try:
result = eval(self.string.get())
self.string.set(result)
except:
result = "INVALID INPUT"
self.string.set(result)
def addChar(self, char):
self.string.set(self.string.get() + (str(char)))
def delete(self):
self.string.set(self.string.get()[0:-1])
calculator()
運行界面:

經過測試,計算器可以正確運行
三. 將代碼上傳碼雲
截圖:

感悟思考
- 經歷本次實驗,我首先感受到的是要學會綜合使用Python中的模塊,這能使程序更簡便、美觀、高效。
- 其次是本次實驗中我出現了很多粗心的錯誤,這要求我要更加細心,避免出現低級錯誤。
- 這次實驗也讓我認識到只有通過實踐實驗操作才能將理論知識更好地運用起來,在日后的Python程序設計的課程學習過程中,我要注意實際實驗的重要性。
