93
社区成员
发帖
与我相关
我的任务
分享课程:《Python程序设计》
班级:2342
姓名:罗国淦
学号:20234219
实验教师:王志强
实验日期:2024年3月30日
必修/选修: 公选课
设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
1.翻书学习GUI;


6.完善代码如下(但因为自己记错了,所以阶乘运算的数字放在“!”之后):
#pyinstaller -F -w code/caculator.py
import wx
list=[]
numberend=0
def ending():
global numberend
signped=0
signpnow=0
signpen=0
mark1=None
mark2=None
o=1
op=0
for i in range(0,len(list)):
a=list[i]
if type(a)==int:
a=int(a)
signped=signpnow
signpnow=a
signpen*=10
signpen+=signpnow
else:
signped=signpnow
signpnow=a
if mark1 == "!":
#print("@", signpen)
for i in range(2, signpen + 1):
#print(o)
o *= i
op=1
signpen=0
if signpnow == "=":
if mark1 == "+":
if op==0:
numberend+=signpen
else:
numberend+=o
o=1
op=0
if mark1 == "-":
if op==0:
numberend-=signpen
else:
numberend-=o
o = 1
op = 0
if mark1 == "×":
if op == 0:
numberend *= signpen
else:
numberend *= o
o = 1
op = 0
if mark1=="÷":
if op == 0:
numberend /= signpen
else:
numberend /= o
o = 1
op = 0
if op==1:
numberend+=o
o=1
op=0
else:
if numberend==0 and mark2!="!":
numberend=signpen
signpen=0
if mark1 == "+":
if op==0:numberend+=signpen
else:
numberend+=o
o=1
op=0
signpen=0
if mark1=="-":
if op == 0:
numberend -= signpen
else:
numberend -= o
o = 1
op = 0
signpen = 0
if mark1 == "×":
if op == 0:
numberend *= signpen
else:
numberend *= o
o = 1
op = 0
signpen = 0
if mark1 == "÷":
if op == 0:
numberend /= signpen
else:
numberend /= o
o = 1
op = 0
signpen=0
if op==1:
numberend+=o
o=1
op=0
mark1=signpnow
#print(signped, signpnow, signpen, mark1, numberend, op, o)
class Caculator(wx.Frame):
global list
global numberend
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,"计算器",size=(500,700))
font1=wx.Font(30,wx.DEFAULT,wx.FONTSTYLE_NORMAL,wx.NORMAL)
font2=wx.Font(16, wx.DEFAULT, wx.FONTSTYLE_NORMAL, wx.NORMAL)
panel=wx.Panel(self)
self.printframe=wx.TextCtrl(panel,size=(300,80),style=wx.TE_READONLY|wx.TE_RIGHT|wx.HSCROLL)
self.number1=wx.Button(panel,label="1",size=(80,100))
self.number2=wx.Button(panel,label="2",size=(80,100))
self.number3=wx.Button(panel,label="3",size=(80,100))
self.number4=wx.Button(panel,label="4",size=(80,100))
self.number5=wx.Button(panel,label="5",size=(80,100))
self.number6=wx.Button(panel,label="6",size=(80,100))
self.number7=wx.Button(panel,label="7",size=(80,100))
self.number8=wx.Button(panel,label="8",size=(80,100))
self.number9=wx.Button(panel,label="9",size=(80,100))
self.number0=wx.Button(panel,label="0",size=(80,100))
self.sign1=wx.Button(panel,label="+",size=(80,100))
self.sign2=wx.Button(panel,label="-",size=(80,100))
self.sign3=wx.Button(panel,label="×",size=(80,100))
self.sign4=wx.Button(panel,label="÷",size=(80,100))
self.sign5=wx.Button(panel,label="=",size=(80,100))
self.sign6=wx.Button(panel,label="!",size=(80,100))
self.sign7=wx.Button(panel,label="<——\n"+"退格",size=(80,100))
self.sign8=wx.Button(panel,label="归零",size=(80,100))
self.printframe.SetFont(font2)
self.number1.SetFont(font1)
self.number2.SetFont(font1)
self.number3.SetFont(font1)
self.number4.SetFont(font1)
self.number5.SetFont(font1)
self.number6.SetFont(font1)
self.number7.SetFont(font1)
self.number8.SetFont(font1)
self.number9.SetFont(font1)
self.number0.SetFont(font1)
self.sign1.SetFont(font1)
self.sign2.SetFont(font1)
self.sign3.SetFont(font1)
self.sign4.SetFont(font1)
self.sign5.SetFont(font1)
self.sign6.SetFont(font1)
self.number1.SetBackgroundColour("#90EE90")
self.number2.SetBackgroundColour("#90EE90")
self.number3.SetBackgroundColour("#90EE90")
self.number4.SetBackgroundColour("#90EE90")
self.number5.SetBackgroundColour("#90EE90")
self.number6.SetBackgroundColour("#90EE90")
self.number7.SetBackgroundColour("#90EE90")
self.number8.SetBackgroundColour("#90EE90")
self.number9.SetBackgroundColour("#90EE90")
self.number0.SetBackgroundColour("#90EE90")
self.sign1.SetBackgroundColour("#87CEEB")
self.sign2.SetBackgroundColour("#87CEEB")
self.sign3.SetBackgroundColour("#87CEEB")
self.sign4.SetBackgroundColour("#87CEEB")
self.sign5.SetBackgroundColour("#87CEEB")
self.sign6.SetBackgroundColour("#87CEEB")
self.sign7.SetBackgroundColour("#FF6100")
self.sign8.SetBackgroundColour("#FF6100")
self.number1.Bind(wx.EVT_BUTTON,self.Number1)
self.number2.Bind(wx.EVT_BUTTON,self.Number2)
self.number3.Bind(wx.EVT_BUTTON,self.Number3)
self.number4.Bind(wx.EVT_BUTTON, self.Number4)
self.number5.Bind(wx.EVT_BUTTON, self.Number5)
self.number6.Bind(wx.EVT_BUTTON, self.Number6)
self.number7.Bind(wx.EVT_BUTTON, self.Number7)
self.number8.Bind(wx.EVT_BUTTON, self.Number8)
self.number9.Bind(wx.EVT_BUTTON, self.Number9)
self.number0.Bind(wx.EVT_BUTTON, self.Number0)
self.sign1.Bind(wx.EVT_BUTTON, self.Sign1)
self.sign2.Bind(wx.EVT_BUTTON, self.Sign2)
self.sign3.Bind(wx.EVT_BUTTON, self.Sign3)
self.sign4.Bind(wx.EVT_BUTTON, self.Sign4)
self.sign5.Bind(wx.EVT_BUTTON, self.Sign5)
self.sign6.Bind(wx.EVT_BUTTON, self.Sign6)
self.sign7.Bind(wx.EVT_BUTTON,self.Sign7)
self.sign8.Bind(wx.EVT_BUTTON, self.Sign8)
rowh0=wx.BoxSizer(wx.HORIZONTAL)
rowh0.Add(self.printframe,proportion=0,flag=wx.ALL,border=1)
rowh1=wx.BoxSizer(wx.HORIZONTAL)
rowh1.Add(self.number1,proportion=0,flag=wx.ALL,border=5)
rowh1.Add(self.number2,proportion=0,flag=wx.ALL,border=5)
rowh1.Add(self.number3, proportion=0, flag=wx.ALL, border=5)
rowh1.Add(self.sign1,proportion=0,flag=wx.ALL,border=5)
rowh1.Add(self.sign7,proportion=0,flag=wx.ALL,border=5)
rowh2 = wx.BoxSizer(wx.HORIZONTAL)
rowh2.Add(self.number4, proportion=0, flag=wx.ALL, border=5)
rowh2.Add(self.number5, proportion=0, flag=wx.ALL, border=5)
rowh2.Add(self.number6, proportion=0, flag=wx.ALL, border=5)
rowh2.Add(self.sign2, proportion=0, flag=wx.ALL, border=5)
rowh2.Add(self.sign8,proportion=0, flag=wx.ALL,border=5)
rowh3 = wx.BoxSizer(wx.HORIZONTAL)
rowh3.Add(self.number7, proportion=0, flag=wx.ALL, border=5)
rowh3.Add(self.number8, proportion=0, flag=wx.ALL, border=5)
rowh3.Add(self.number9, proportion=0, flag=wx.ALL, border=5)
rowh3.Add(self.sign3, proportion=0, flag=wx.ALL, border=5)
rowh4 = wx.BoxSizer(wx.HORIZONTAL)
rowh4.Add(self.sign6, proportion=0, flag=wx.ALL, border=5)
rowh4.Add(self.number0, proportion=0, flag=wx.ALL, border=5)
rowh4.Add(self.sign5, proportion=0, flag=wx.ALL, border=5)
rowh4.Add(self.sign4, proportion=0, flag=wx.ALL, border=5)
rowl=wx.BoxSizer(wx.VERTICAL)
rowl.Add(rowh0,proportion=0,flag=wx.BOTTOM|wx.TOP|wx.ALIGN_CENTER,border=45)
rowl.Add(rowh1,proportion=0,flag=wx.EXPAND|wx.LEFT|wx.RIGHT,border=5)
rowl.Add(rowh2, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
rowl.Add(rowh3, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
rowl.Add(rowh4, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
panel.SetSizer(rowl)
def Number1(self,event):
list.append(1)
#print(list)
self.printframe.AppendText("1")
def Number2(self,event):
list.append(2)
self.printframe.AppendText("2")
def Number3(self,event):
list.append(3)
self.printframe.AppendText("3")
def Number4(self,event):
list.append(4)
self.printframe.AppendText("4")
def Number5(self,event):
list.append(5)
self.printframe.AppendText("5")
def Number6(self,event):
list.append(6)
self.printframe.AppendText("6")
def Number7(self,event):
list.append(7)
self.printframe.AppendText("7")
def Number8(self,event):
list.append(8)
self.printframe.AppendText("8")
def Number9(self,event):
list.append(9)
self.printframe.AppendText("9")
def Number0(self,event):
list.append(0)
self.printframe.AppendText("0")
def Sign1(self,event):
list.append("+")
self.printframe.AppendText("+")
def Sign2(self,event):
list.append("-")
self.printframe.AppendText("-")
def Sign3(self,event):
list.append("×")
self.printframe.AppendText("×")
def Sign4(self,event):
list.append("÷")
self.printframe.AppendText("÷")
def Sign5(self,event):
list.append("=")
self.printframe.AppendText("=")
ending()
#while numberend!=0:
#listend.append=numberend%10
#numberend//=10
self.printframe.AppendText(str(numberend))
while list!=[]:
list.pop()
def Sign6(self,event):
list.append("!")
self.printframe.AppendText("!")
def Sign7(self,event):
list.pop()
l=self.printframe.GetLineLength(0)
self.printframe.Remove(l-1, l)
#print(l)
def Sign8(self,event):
global numberend
self.printframe.Clear()
while list != []:
list.pop()
#print(list)
numberend=0
if __name__ == "__main__":
app=wx.App()
caculator=Caculator(parent=None,id=-1)
caculator.Show()
app.MainLoop()
为了编这个计算器,我特意花了一个多小时自学了GUI,然后再不断尝试编写计算器程序。中间遇到很多次报错而不清楚是什么原因,我就尝试把一条条代码注释掉或进行修改,看问题出在哪里。这样弄了一个上午才终于变成了。成就感满满,这就是自己先付出,后收获的甜蜜蜜。