Python选修课大作业

  |  

文章导航

大二下Python程序设计实验报告(作业大作业)

选修课平时作业见:作业报告

大作业代码材料见:大作业材料

1.软件功能

1.1背单词

该背单词、查单词小软件可以辅助记忆单词,点击可以选择背诵四级、六级、雅思、托福的单词,并且能够自主选择背诵单词数目。通过给出汉语翻译,使用者输入英文,点击检验,即可查看自己是否答对,错误会附有正确答案。点击新单词即可继续背诵,最后系统会统计正确数与错误数,还有总用时。系统还可以实现自我识别,包括未检验即进行下一步、多次检验等等。

1.2查单词

改背单词、查单词小软件还可以实现简单的查单词任务。通过选择词库可以选择在哪个词库下查单词,点击搜索即可出现释义。如果当前词库没有相应的单词,也会出现“没有该单词”的提示。点击重置即可删除所有操作,包括查单词、背单词等等,可以重新开始运行。

2.软件的运行环境

2.1Python版本:

python3.7.0(其它python3版本安装xlrd库后应该也能运行)

2.2需要的资源名称

xlrd库(读取excel文件)

3.环境搭建说明

3.1解压文件

将提交的作业文件解压

3.2运行软件

1.打开解压后的文件夹,保证几个.xls文件和“背单词软件.py”在同一文件夹下

2.右键点击“背单词软件.py”,选择用idle打开,进行下一步操作

4.软件的设计说明

4.1设计

软件主要分为两个模块:背单词和记单词。在tkinter模块下进行,分别进行了标签、文本框、按钮等等的设计,通过几个函数的调用,最终实现了期望的效果。

4.2实现思路

1.背单词部分:输入背单词的个数,将其设为全局变量。将词库导入,用随机数的模块随机选择一个单词,输出其意思,再把其内容于输入的单词对比,如果一样输出正确,不一样输出错误并且输出正确答案。点击新单词,清除原始内容开始新的查找。最后记录并输出正确与错误个数,输出时间。再次点击“下一个”或点击“重置”重置。

2.查单词部分:选择对应词库,输入对应单词,用循环分别与词库中的词对比,如果有一样的单词就输出其意义,若没有就输入提示信息表示没有找到。再次点击清除原始内容开始下一次查找,点击“重置”回复原状。

4.3算法

1.背单词部分:用全局变量表示背单词个数、正确个数、错误个数、背诵开始、结束时间、当前词库,所有函数可以自由调用。使用选择结构与标志变量来判断当前应该进行的操作,防止误操作。通过按钮来调用不同的函数,包括装载词库、选择背诵单词数、开始背下一个单词、检验是否正确、重置。计时功能通过结束时间减开始时间来确定。每次点击下一个单词时,加入一行命令自动清除之前的输出。背完规定个数安装选择结构自动重置或者点击“重置”来重置。

2.查单词部分:用全局变量来装载词库,利用标志变量来判断是否找到对应单词,将找到的单词输出或者输出提示信息。加入一行命令,在每一次输出后再次查找时自动清除之前输出的内容。通过“重置”按钮调用重置命令从头开始装载词库、搜索。

4.4创新

1.通过标志变量的引入与选择结构的应用来实现错误操作时输出提示信息防止错误操作,提高了软件的健壮性。

2.在每次进行新输入时自动清除之前内容,一轮背诵进行完成后自动重置参数,不需要点击“重置”,节约了时间,避免的反复选择,带来了便捷。

3.在一轮背诵进行完成后,通过在词义栏输出提示信息提示使用者查看正确率与完成时间,节约了空间也节约了运行内存,不用再次定义新的函数。

4.在答错时,在“正确”栏输出正确答案,保证使用者能更好地进行记忆。

5.词库外部导入,可以实时更新,也可以引入新的词库,这大大提高了软件应用的广泛性,可以根据使用需要灵活选择。

4.5使用的技巧

全局变量、标志变量、选择结构的结合,实现错误输入的辨别与提示、自动重置的实现。利用time模块来实现计时。利用random模块随机选择词汇。

4.6知识的综合运用

全局变量、标志变量、选择结构、tkinter模块、random模块、time模块、tkinter.messagebox的showinfo弹窗模块、xlrd模块(外部导入)、excel文件的调用、函数的调用、控件位置大小等属性的设置、列表推导式、循环结构。

5.软件使用说明

5.1背单词

  1. 点击四个按钮之一,选择背诵词汇的类型

  2. 在背诵个数后面输入背单词的个数,点击确定(不输入默认背十个)

  1. 点击新单词开始背诵,点击检验查看是否正确

4.正确输出√,错误输出×并输出正确答案,点击重置重新开始

5.检验后再检验,或者未检验直接点击下一个,会输出错误的提示信息

6.背完后会提示背完,点击检验可以查看正确率和时间

7.点击“新单词”即可自动重置,不改变词库与单词数进行下一轮

5.2查单词

  1. 点击四个按钮之一选择查询词库

  2. 输入单词点击查找,出现词义

  1. 清除之前的内容再次点击搜索,即可在当前词库搜索

  2. 点击其他词库即可在其他词库搜索本单词

  1. 点击重置,所有内容清空重新开始查询

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
import tkinter as tk                       #生成窗口
import xlrd #读取excel文件
import random
import time
from tkinter.messagebox import showinfo #弹窗

window = tk.Tk()
window.title('背单词') #设置标题、长宽
window.geometry('500x700')

# ————————以下是窗口的内容————————

l1 = tk.Label(window,
text='请选择单词类型', # 标签的文字
bg='blue', # 背景颜色
font=('Arial', 12), # 字体和字体大小
width=15, height=2) # 标签长宽
l1.place(x=20,y=30) # 固定窗口位置

#以下为全局变量的定义与初始化
n=10 #背诵单词数(默认为10个)
num=0 #背过的单词数
cor=wro=0 #正确/错误的单词数
_new_=1 #判断是否应该按键的标志变量
_test_=0 #同上

def load(file_name): #装载单词与意思
data = xlrd.open_workbook(file_name) #读取excel文件
table = data.sheet_by_name('Sheet1') #读取工作表
words=table.col(0, start_rowx=0, end_rowx=None) #读取一列
words=[x.value for x in words] #将其变为纯字符串列表
meaning=table.col(1, start_rowx=0, end_rowx=None)
meaning=[x.value for x in meaning] #同上
global wordlist
wordlist=[[a,b] for a,b in zip(words,meaning)] #生成以"由词+义构成的列表"为元素的列表
t1.delete('1.0','end') #清除之前的内容
t1.insert('insert',file_name[0:4]) #显示当前背诵单词的类别

def newword(): #开始背下一个单词
global word
global _test_
global _new_
global num
global time_start
global time_end
if num==0: #判断是否应该开始计时
t4.delete('1.0','end')
time_start=time.time() #记录开始时间
if num<n: #判断是否应该继续背 num<n就继续背
if _new_==1:
word=random.choice(wordlist) #随机取一个单词
t2.delete('1.0','end')
t5.delete('1.0','end')
t6.delete('1.0','end')
e.delete(0,'end')
t2.insert('insert',word[1]) #把单词显示在文本框内
_new_=0
_test_=1
else:
showinfo(title='提示', message='请输入答案并检验')#不应当执行当前操作提示
else:
t2.delete('1.0','end')
t5.delete('1.0','end')
t6.delete('1.0','end')
t2.insert('insert','恭喜你背完了!点击检验查看正确率与时间')#结束提示
e.delete(0,'end')
time_end=time.time() #记录结束时间
_new_=0
_test_=1


def test(): #输入单词
global _new_
global _test_
global num
global cor
global wro
global time_end
if num<n :
if _test_==1:
var=e.get() #读取输入的单词
if var==word[0]:
t5.insert('insert','√') #如果答对,显示√,否则显示×,并显示正确答案
cor+=1
else:
t6.insert('insert','×')
s=str(word[0])
t5.insert('1.0',s)
wro+=1
num+=1
_new_=1
_test_=0
else:
showinfo(title='提示', message='请点击新单词进行测试')#不应当执行当前操作提示

else:
t2.delete('1.0','end')
t5.delete('1.0','end')
t6.delete('1.0','end')
t5.insert('insert',str(cor)) #输出正确与错误的个数
t6.insert('insert',str(wro))
t2.insert('insert','请点击新单词开始下一轮背诵') #提示开始下一轮背诵
t4.insert('insert',str(time_end-time_start)[0:6]+'秒') #输出用时
_new_=1
_test_=0
num=cor=wro=0 #参数重置

def reset(): #重置所有内容,恢复默认
global wordlist
global num
global cor
global wro
global _new_
global _test_
global n
t1.delete('1.0','end')
t2.delete('1.0','end')
t4.delete('1.0','end')
t5.delete('1.0','end')
t6.delete('1.0','end')
t8.delete('1.0','end')
e.delete(0,'end')
e2.delete(0,'end')
e3.delete(0,'end')
wordlist=[]
num=cor=wro=0
_new_=1
_test_=0
n=10

def search(): #搜索相关单词
key=e3.get()
t8.delete('1.0','end') #清除之前输出的内容
flag=0 #标志变量
for x in wordlist:
if x[0]==key:
t8.insert('1.0',x[1]) #查到输出
flag=1
if flag==1:
pass
else:
t8.insert('1.0','该字典没有相关释义,请更换字典') #未查到输出提示信息

def defnum(): #设置背诵单词数(默认为10个)
global n
n=int(e2.get())

def CET_4(): #点击相应的按钮更换当前背诵单词类别
file_name='四级词汇.xls'
load(file_name)

def CET_6():
file_name='六级词汇.xls'
load(file_name)

def IELTS():
file_name='雅思词汇.xlsx'
load(file_name)

def TOEFL():
file_name='托福词汇.xlsx'
load(file_name)

t1=tk.Text(window,font=('Arial', 12),width=8,height=1) #显示当前单词类别
t1.place(x=200,y=40)

b1 = tk.Button(window, #四级单词按钮
text='四级词汇', # 显示在按钮上的文字
font=('Arial', 12), # 字符格式
width=10, height=2, # 按钮宽高
command=CET_4) # 点击按钮式执行的命令
b1.place(x=50,y=100) # 按钮位置

b2 = tk.Button(window,text='六级词汇',font=('Arial', 12),width=10, height=2,command=CET_6) #六级单词按钮
b2.place(x=150,y=100)

b3 = tk.Button(window,text='雅思词汇',font=('Arial', 12),width=10, height=2,command=IELTS) #雅思单词按钮
b3.place(x=250,y=100)

b4 = tk.Button(window,text='托福词汇',font=('Arial', 12),width=10, height=2,command=TOEFL) #托福单词按钮
b4.place(x=350,y=100)

l2=tk.Label(window,text='词义:',font=('Arial', 12),width=6,height=2) #词义提示标签
l2.place(x=40,y=200)

t2=tk.Text(window,font=('Arial', 12),width=35,height=3) #显示词义
t2.place(x=100,y=195)

l3=tk.Label(window,text='单词:',font=('Arial', 12),width=6,height=2) #单词输入提示标签
l3.place(x=40,y=300)

e=tk.Entry(window,font=('Arial', 12),width=20) #单词输入文本框
e.place(x=100,y=310)

b5=tk.Button(window,text='检验',font=('Arial', 12),width=5,height=1,command=test) #检验按钮
b5.place(x=300,y=305)

b6=tk.Button(window,text='新单词',font=('Arial', 12),width=5,height=1,command=newword) #新单词按钮
b6.place(x=380,y=305)

l4=tk.Label(window,text='用时:',font=('Arial', 12),width=6,height=2) #用时提示标签
l4.place(x=40,y=500)

t4=tk.Text(window,font=('Arial', 12),width=15,height=1) #用时输出文本框
t4.place(x=100,y=510)

l5=tk.Label(window,text='正确:',font=('Arial', 12),width=6,height=2)#正确提示标签
l5.place(x=40,y=400)

t5=tk.Text(window,font=('Arial', 12),width=15,height=1) #正确输出文本框
t5.place(x=100,y=410)

l6=tk.Label(window,text='错误:',font=('Arial', 12),width=6,height=2)#错误提示标签
l6.place(x=250,y=400)

t6=tk.Text(window,font=('Arial', 12),width=10,height=1) #错误输出文本框
t6.place(x=310,y=410)

b7=tk.Button(window,text='重置',font=('Arial', 12),width=5,height=1,command=reset)#重置按钮
b7.place(x=300,y=505)

l7=tk.Label(window,text='背诵个数:',font=('Arial', 12),width=8,height=2)#背诵个数提示标签
l7.place(x=320,y=30)

e2=tk.Entry(window,font=('Arial', 12),width=2) #背诵个数输入文本框
e2.place(x=400,y=40)

b8=tk.Button(window,text='确定',font=('Arial', 12),width=3,height=1,command=defnum)#(背诵个数输入)确定按钮
b8.place(x=430,y=35)

b9=tk.Button(window,text='搜索',font=('Arial', 12),width=3,height=1,command=search)#搜索按钮
b9.place(x=40,y=600)

e3=tk.Entry(window,font=('Arial', 12),width=15) #搜索输入文本框
e3.place(x=100,y=610)

l8=tk.Label(window,text='意思:',font=('Arial', 12),width=5,height=2) #(搜索中)单词意思提示标签
l8.place(x=260,y=550)

t8=tk.Text(window,font=('Arial', 12),width=18,height=3) #(搜索)单词意思输出文本框
t8.place(x=260,y=590)

#———————以上是窗口的内容—————————

window.mainloop()
本站总访问量 您是第位访客