• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
eLiO_FanG
博客园    首页    新随笔    联系   管理    订阅  订阅

基于CMMI的软件工程及实训指导—学习笔记(四)

今天还是继续做小学四则运算,是基于上一次的内容—【基于CMMI的软件工程及实训指导—学习笔记(三)】https://www.cnblogs.com/eLiOFanG/p/13703093.html,进一步优化和升级。

一、升级要求(四选一 )

  • 功能升级
  • 界面升级
  • 性能升级
  • 用不同语言写升级

二、本次升级内容

(一)将上一次的交互式做题变成题库系统,并进行题库性能升级

因为上次我做的事交互式的做题系统,本次就更改为题库系统。主要代码:

 1 #四则运算函数
 2 question = []
 3 result=[]
 4 #分1-6年级 写运算函数
 5 def Arithmetic1():
 6     sign=['+','-','×','÷']
 7     s=random.randint(0,1)
 8     num1=random.randint(1,10)
 9     num2=random.randint(1,10)
10     if s==0:#加法
11         result.append(num1+num2)
12         question.append(str(num1)+'+'+str(num2)+'=  ')
13     elif s==1:#减法
14         num1, num2 = max(num1, num2), min(num1, num2) 
15         result.append(num1-num2)
16         question.append(str(num1)+'-'+str(num2)+'=  ')
View Code
 1 def run(N,n):  #N=年级,n=数量
 2     print('输入所需要的题目数量')
 3     N=int(N)
 4     n=int(n)
 5     m=0
 6     if N==1:
 7         while m<=(n-1):
 8           Arithmetic1()
 9           m=m+1
10         m=1
11         for item in question:
12             display_q.insert('end','第{}题:'.format(m)+item+'\n')
13             m=m+1
14         m=1
15         for item in result:
16             display_a.insert('end','第{}题答案:'.format(m)+str(item)+'\n')
17             m=m+1
View Code

(二)用python做题库系统的GUI界面

用python做GUI界面,主要用到的是python 的tkinter。关于窗口等界面的设置,可以搜索bilibili中的相关视频,这里也有一篇文章可以借鉴一下—【Python GUI之tkinter窗口视窗教程大集合】https://blog.csdn.net/ahilll/article/details/81531587

主要代码:

 1 #创建窗口
 2 window=Tk()
 3 window.title("小学四则运算系统") #窗口名
 4 window.geometry("850x700") #宽x高
 5 
 6 #创建label
 7 label1=Label(window,text="小学数学四则运算题库系统",font=('黑体',25))
 8 label2=Label(window,text='请输入年级:',font=20)
 9 label3=Label(window,text='请输入想要的题目数量:',font=20)
10 label4=Label(window,text='本次题目如下:',font=20)
11 label5=Label(window,text='答案如下:',font=20)
12 
13 #创建输入框
14 entry1=tk.Entry(window, show=None, font=14)   # 显示成明文形式
15 entry2=tk.Entry(window, show=None, font=14)  # 显示成明文形式
16 entry1.pack()
17 entry2.pack()
18 
19 #创建题库显示框
20 display_q=tk.Text(window,width=30,height=15)
21 display_q.pack()
22 
23 #创建答案显示框
24 display_a=tk.Text(window,width=30,height=15)
25 display_a.pack()
26 
27 # 清除键框
28 def delete(display_q,display_a):
29     entry1.delete(0,'end')
30     entry2.delete(0,'end')
31     display_q.delete(1.0,tkinter.END)
32     display_a.delete(1.0,tkinter.END)
33     
34 #创建按钮
35 button_deter=tk.Button(window, text='确定', width=8,height=1,font=20, command=lambda:run(entry1.get(),entry2.get()))
36 button_clear=tk.Button(window, text='清除', width=8,height=1,font=20,command=lambda:delete(display_q,display_a))
37 button_deter.pack()
38 button_clear.pack()
39 
40 #最后的参数描写
41 label1.place(relx=0.5,rely=0.1,anchor=CENTER)
42 label2.place(relx=0.5,rely=0.2,anchor=CENTER)
43 label3.place(relx=0.5,rely=0.3,anchor=CENTER)
44 label4.place(relx=0.1,rely=0.5)
45 label5.place(relx=0.6,rely=0.5)
46 button_deter.place(relx=0.4,rely=0.4,anchor=CENTER)
47 button_clear.place(relx=0.6,rely=0.4,anchor=CENTER)
48 entry1.place(relx=0.7,rely=0.2,anchor=CENTER)
49 entry2.place(relx=0.75,rely=0.3,anchor=CENTER)
50 display_q.place(relx=0.1,rely=0.55)
51 display_a.place(relx=0.6,rely=0.55)
52 
53 window.mainloop()
View Code

 

三、完整代码(后续会传到github官网中)

  1 # -*- coding: utf-8 -*-
  2 """
  3 Created on Tue Sep 22 20:42:42 2020
  4 @author: Elio
  5 """
  6 import random
  7 import profile
  8 import time
  9 from fractions import Fraction
 10 import tkinter
 11 from tkinter import *
 12 import tkinter.messagebox
 13 import tkinter as tk  # 使用Tkinter前需要先导入
 14 
 15 #四则运算函数
 16 question = []
 17 result=[]
 18 #分1-6年级 写运算函数
 19 def Arithmetic1():
 20     sign=['+','-','×','÷']
 21     s=random.randint(0,1)
 22     num1=random.randint(1,10)
 23     num2=random.randint(1,10)
 24     if s==0:#加法
 25         result.append(num1+num2)
 26         question.append(str(num1)+'+'+str(num2)+'=  ')
 27     elif s==1:#减法
 28         num1, num2 = max(num1, num2), min(num1, num2) 
 29         result.append(num1-num2)
 30         question.append(str(num1)+'-'+str(num2)+'=  ')
 31 
 32 def Arithmetic2():
 33     sign=['+','-','×','÷']
 34     s=random.randint(0,3)
 35     num1=random.randint(1,10)
 36     num2=random.randint(1,10)
 37     if s==0:#加法
 38         result.append(num1+num2)
 39         question.append(str(num1)+'+'+str(num2)+'=  ')
 40     elif s==1:#减法
 41         num1, num2 = max(num1, num2), min(num1, num2) 
 42         result.append(num1-num2)
 43         question.append(str(num1)+'-'+str(num2)+'=  ')
 44     elif s==2:#乘法
 45         result.append(num1*num2)
 46         question.append(str(num1)+'x'+str(num2)+'=  ')
 47     elif s==3:#除法
 48         result.append(num1/num2)
 49         question.append(str(num1)+'÷'+str(num2)+'=  ')
 50 
 51 def Arithmetic3():
 52     sign=['+','-','×','÷']
 53     s=random.randint(0,3)
 54     num1=random.randint(1,20)
 55     num2=random.randint(1,20)
 56     if s==0:#加法
 57         result.append(num1+num2)
 58         question.append(str(num1)+'+'+str(num2)+'=  ')
 59     elif s==1:#减法
 60         num1, num2 = max(num1, num2), min(num1, num2) 
 61         result.append(num1-num2)
 62         question.append(str(num1)+'-'+str(num2)+'=  ')
 63     elif s==2:#乘法
 64         result.append(num1*num2)
 65         question.append(str(num1)+'x'+str(num2)+'=  ')
 66     elif s==3:#除法
 67         result.append(num1/num2)
 68         question.append(str(num1)+'÷'+str(num2)+'=  ')
 69 
 70 def Arithmetic4():
 71     sign=['+','-','×','÷']
 72     s=random.randint(0,3)
 73     num1=random.randint(1,99)
 74     num2=random.randint(1,10)
 75     if s==0:#加法
 76         result.append(num1+num2)
 77         question.append(str(num1)+'+'+str(num2)+'=  ')
 78     elif s==1:#减法
 79         num1, num2 = max(num1, num2), min(num1, num2) 
 80         result.append(num1-num2)
 81         question.append(str(num1)+'-'+str(num2)+'=  ')
 82     elif s==2:#乘法
 83         result.append(num1*num2)
 84         question.append(str(num1)+'x'+str(num2)+'=  ')
 85     elif s==3:#除法
 86         result.append(num1/num2)
 87         question.append(str(num1)+'÷'+str(num2)+'=  ')
 88 
 89 def Arithmetic5():
 90     sign=['+','-','×','÷','×','÷']
 91     s=random.randint(0,5)
 92     num1=random.randint(1,99)
 93     num2=random.randint(1,99)
 94     num3=random.randint(1,20)
 95     num4=random.randint(1,20)
 96     num5=random.randint(1,20)
 97     num6=random.randint(1,20)
 98     if s==0:#加法
 99         result.append(num1+num2)
100         question.append(str(num1)+'+'+str(num2)+'=  ')
101     elif s==1:#减法
102         num1, num2 = max(num1, num2), min(num1, num2) 
103         result.append(num1-num2)
104         question.append(str(num1)+'-'+str(num2)+'=  ')
105     elif s==2:#乘法
106         num1=Fraction(num3,num4)
107         num2=Fraction(num5,num6)
108         result.append(num1*num2)
109         question.append(str(num1)+'x'+str(num2)+'=  ')
110     elif s==3:#除法
111         num1=Fraction(num3,num4)
112         num2=Fraction(num5,num6)
113         result.append(num1/num2)
114         question.append(str(num1)+'÷'+str(num2)+'=  ')
115     elif s==4:#整数乘法
116         result.append(num1*num2)
117         question.append(str(num1)+'x'+str(num2)+'=  ')
118     elif s==5:#整数除法
119         result.append(num1/num2)
120         question.append(str(num1)+'÷'+str(num2)+'=  ')
121 
122 def Arithmetic6():
123     sign=['+','-','×','÷','×','÷']
124     s=random.randint(0,5)
125     num1=random.randint(1,199)
126     num2=random.randint(1,99)
127     num3=random.randint(1,20)
128     num4=random.randint(1,20)
129     num5=random.randint(1,20)
130     num6=random.randint(1,20)
131     if s==0:#加法
132         result.append(num1+num2)
133         question.append(str(num1)+'+'+str(num2)+'=  ')
134     elif s==1:#减法
135         num1, num2 = max(num1, num2), min(num1, num2) 
136         result.append(num1-num2)
137         question.append(str(num1)+'-'+str(num2)+'=  ')
138     elif s==2:#乘法
139         num1=Fraction(num3,num4)
140         num2=Fraction(num5,num6)
141         result.append(num1*num2)
142         question.append(str(num1)+'x'+str(num2)+'=  ')
143     elif s==3:#除法
144         num1=Fraction(num3,num4)
145         num2=Fraction(num5,num6)
146         result.append(num1/num2)
147         question.append(str(num1)+'÷'+str(num2)+'=  ')
148     elif s==4:#整数乘法
149         result.append(num1*num2)
150         question.append(str(num1)+'x'+str(num2)+'=  ')
151     elif s==5:#整数除法
152         result.append(num1/num2)
153         question.append(str(num1)+'÷'+str(num2)+'=  ')
154 
155 def run(N,n):  #N=年级,n=数量
156     print('输入所需要的题目数量')
157     N=int(N)
158     n=int(n)
159     m=0
160     if N==1:
161         while m<=(n-1):
162           Arithmetic1()
163           m=m+1
164         m=1
165         for item in question:
166             display_q.insert('end','第{}题:'.format(m)+item+'\n')
167             m=m+1
168         m=1
169         for item in result:
170             display_a.insert('end','第{}题答案:'.format(m)+str(item)+'\n')
171             m=m+1
172     if N==2:
173         while m<=(n-1):
174           Arithmetic2()
175           m=m+1
176         m=1
177         for item in question:
178             display_q.insert('end','第{}题:'.format(m)+item+'\n')
179             m=m+1
180         m=1
181         for item in result:
182             display_a.insert('end','第{}题答案:'.format(m)+str(item)+'\n')
183             m=m+1
184     if N==3:
185         while m<=(n-1):
186           Arithmetic3()
187           m=m+1
188         m=1
189         for item in question:
190             display_q.insert('end','第{}题:'.format(m)+item+'\n')
191             m=m+1
192         m=1
193         for item in result:
194             display_a.insert('end','第{}题答案:'.format(m)+str(item)+'\n')
195             m=m+1
196     if N==4:
197         while m<=(n-1):
198           Arithmetic4()
199           m=m+1
200         m=1
201         for item in question:
202             display_q.insert('end','第{}题:'.format(m)+item+'\n')
203             m=m+1
204         m=1
205         for item in result:
206             display_a.insert('end','第{}题答案:'.format(m)+str(item)+'\n')
207             m=m+1
208     if N==5:
209         while m<=(n-1):
210           Arithmetic5()
211           m=m+1
212         m=1
213         for item in question:
214             display_q.insert('end','第{}题:'.format(m)+item+'\n')
215             m=m+1
216         m=1
217         for item in result:
218             display_a.insert('end','第{}题答案:'.format(m)+str(item)+'\n')
219             m=m+1
220     if N==6:
221         while m<=(n-1):
222           Arithmetic6()
223           m=m+1
224         m=1
225         for item in question:
226             display_q.insert('end','第{}题:'.format(m)+item+'\n')
227             m=m+1
228         m=1
229         for item in result:
230             display_a.insert('end','第{}题答案:'.format(m)+str(item)+'\n')
231             m=m+1
232 
233 #创建窗口
234 window=Tk()
235 window.title("小学四则运算系统") #窗口名
236 window.geometry("850x700") #宽x高
237 
238 #创建label
239 label1=Label(window,text="小学数学四则运算题库系统",font=('黑体',25))
240 label2=Label(window,text='请输入年级:',font=20)
241 label3=Label(window,text='请输入想要的题目数量:',font=20)
242 label4=Label(window,text='本次题目如下:',font=20)
243 label5=Label(window,text='答案如下:',font=20)
244 
245 #创建输入框
246 entry1=tk.Entry(window, show=None, font=14)   # 显示成明文形式
247 entry2=tk.Entry(window, show=None, font=14)  # 显示成明文形式
248 entry1.pack()
249 entry2.pack()
250 
251 #创建题库显示框
252 display_q=tk.Text(window,width=30,height=15)
253 display_q.pack()
254 
255 #创建答案显示框
256 display_a=tk.Text(window,width=30,height=15)
257 display_a.pack()
258 
259 # 清除键框
260 def delete(display_q,display_a):
261     entry1.delete(0,'end')
262     entry2.delete(0,'end')
263     display_q.delete(1.0,tkinter.END)
264     display_a.delete(1.0,tkinter.END)
265     
266 #创建按钮
267 button_deter=tk.Button(window, text='确定', width=8,height=1,font=20, command=lambda:run(entry1.get(),entry2.get()))
268 button_clear=tk.Button(window, text='清除', width=8,height=1,font=20,command=lambda:delete(display_q,display_a))
269 button_deter.pack()
270 button_clear.pack()
271 
272 #最后的参数描写
273 label1.place(relx=0.5,rely=0.1,anchor=CENTER)
274 label2.place(relx=0.5,rely=0.2,anchor=CENTER)
275 label3.place(relx=0.5,rely=0.3,anchor=CENTER)
276 label4.place(relx=0.1,rely=0.5)
277 label5.place(relx=0.6,rely=0.5)
278 button_deter.place(relx=0.4,rely=0.4,anchor=CENTER)
279 button_clear.place(relx=0.6,rely=0.4,anchor=CENTER)
280 entry1.place(relx=0.7,rely=0.2,anchor=CENTER)
281 entry2.place(relx=0.75,rely=0.3,anchor=CENTER)
282 display_q.place(relx=0.1,rely=0.55)
283 display_a.place(relx=0.6,rely=0.55)
284 
285 window.mainloop()
View Code

 

四、代码打包成exe可执行程序

(一)win+R输入cmd,打开命令行窗口

(二)安装pyinstaller,指令:pip install pyinstaller(已安装可忽略)

(三)目录切换到需要打包的py文件的该层目录

(四)打包文件,pyinstaller -F xxx.py(xxx.py是需要打包的文件)(如下图:)

(五)到打包文件目录查看打包好的程序,其中有一个新增的dist文件,打开它,并执行里面的exe应用程序文件即可。(如下图:)

 

五、运行结果(如下图)

 

六、性能测试(如下图)

 

 

七、时间记录(如下图)

总结:本次升级所用时间主要还是用在了GUI界面的设计和方法查找上,所用的时间也较长。希望之后可以缩短编写代码的时间吧。

 

posted @ 2020-09-28 13:27  eLiO_FanG  阅读(177)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3