目录

  • 1 功能介绍
  • 2 文件准备
  • 3 源码

一年多前初学python时写的代码,这里分享给大家。

1 功能介绍

首先运行程序,进入欢迎界面。如下图,界面是一个小方框,可以选择词库,默认是六级词库。

选好之后点击左上角的关闭按钮,即可进入主页面,并显示选择的词库的剩余单词数。排版并不是很美观,读者可以尝试修改程序来美化界面。

写入本次计划背诵的单词数,点击“开始”按钮即可开始背诵,界面中显示单词的拼写、音标和释义。
有三个单词处理按钮,左键“太简单了!斩!”是模仿百词斩APP的说法,可以将你觉得比较简单的单词从词库中彻底删去;中间“加入难词!”会将单词加入到一个名为“难词.txt”的文本中,便于日后复习;右键“记住啦!下一个!”会将该单词加入“复习.txt”中,用户可在本次背完后进行复习,并跳转到下一个单词。

全部背完后会弹出提示框,点击确定后可以关闭。

点击复习按钮后开始复习。

这里的复习其实也就是一个小测试,即根据释义写出单词。将单词拼写完毕后按下回车,可显示正确答案。

然后点击下一个。

全部背完后弹出提示。

关闭提示后显示本次背诵情况。

打开程序所在的文件夹,可以看到背过的单词被放在三个txt文件里。

“已掌握的单词.txt”和“斩.txt”中的单词不会再次出现,其他单词在下次背诵过程还可能出现。
再次运行程序,发现单词确实少了7个。

2 文件准备

读者想要运行该程序,必须准备相关的文件,包括两张插图(必须为gif格式)和三个词库。
下面两张是我用到的插图。


词库必须是txt格式,txt中的文本格式为“拼写/音标/释义”,比如:
abandon/ ə’bændən/ vt.丢弃;放弃,抛弃
aboard/ ə’bɔ:d/ ad.在船(车)上;上船
absolute/ ‘æbsəlu:t/ a.绝对的;纯粹的
absolutely/ ‘æbsəlu:tli/ ad.完全地;绝对地
absorb/ əb’sɔ:b/ vt.吸收;使专心
excursion/ iks’kə:ʃən/ n.远足;短途旅行
excuse/ iks’kju:z, iks’kju:s/ vt.原谅;免除 n.借口
execute/ ‘eksikju:t/ vt.将…处死;实施
executive/ ig’zekjutiv/ a.执行的 n.执行者
exercise/ ‘eksəsaiz/ n.锻炼,训练 vi.练习
exert/ ig’zə:t/ vt.尽(力),运用
fearful/ ‘fiəful/ a.害怕的,可怕的
feasible/ ‘fi:zəbl/ a.可行的;可能的
feather/ ‘feðə/ n.羽毛;翎毛;羽状物
feature/ ‘fi:tʃə/ n.特征,特色;面貌
ʃebruary/ ‘februəri/ n.二月
federal/ ‘fedərəl/ a.联邦的;联盟的
fee/ fi:/ n.费,酬金;赏金

词库我当时是在百度文库里直接下载的。
然后把这些文件和源程序放在一个文件夹里,否则需要在程序中修改读写路径。

3 源码

用到的库有tkinter 、random、matplotlib。tkinter 主要用来设计界面和功能按键,random用来随机选取单词,matplotlib在最后画饼图的时候要用到。详细的编程思路暂时不讲了,有问题可以评论区留言。

还有我当时编程的时候变量的命名不太合理,可能比较难看懂,各位见谅了!

from tkinter import *
import random
from tkinter import messageboxroot=Tk()
root.title("欢迎使用")
group=LabelFrame(root,text='   欢迎使用,请选择词库   \n并选好后点击左上角关闭按钮',padx=10,pady=10)
group.pack(padx=10,pady=10)
LANGS=[('四级词汇',1),('六级词汇',2),('考研词汇',3)]
v=IntVar()
v.set(2)
for lang,num in LANGS:b=Radiobutton(group,text=lang,variable=v,value=num)b.pack(anchor=W)
mainloop()
def trans(filename):f=open(filename,'r',encoding='utf-8')s=f.read()f.close()f=open("单词.txt",'w',encoding='utf-8')f.write(s)f.close()
if v.get()==1:trans('四级词汇.txt')
elif v.get()==2:trans('六级词汇.txt')
else:trans('考研词汇.txt')#设置框架和背景
root=Tk()
root.title('PYTHON背单词')
root['width']=300
root['height']=400
mainframe=Frame(root)
mainframe.pack()
blank=Frame(root,height=50,width=50)
blank.pack()
photo1= PhotoImage(file = '插图一.gif')
imgLabel=Label(root,image=photo1).pack(side=LEFT)
photo2= PhotoImage(file = '插图二.gif')
imgLabel=Label(root,image=photo2).pack(side=RIGHT)#设置变量
l=StringVar()   #l是剩余未背单词数
a1=StringVar()   #a1是单词
a2=StringVar()   #a2是音标
a3=StringVar()   #a3是词义
a4=StringVar()   #a4是复习时的词义提示
a5=StringVar()   #a5是复习时用户从键盘中输入的单词
a6=StringVar()   #a6输出测试结果
a7=StringVar()   #a7是回答错误时显示的正确结果
i=StringVar()    #i是当前背到的单词数
n=StringVar()    #n是本次计划背的单词数
N=StringVar()    #N显示当前复习到的单词数
nd=StringVar()   #nd是本次删除的单词数
ng=StringVar()   #ng是本次已掌握的单词数
nng=StringVar()  #nng是本次未掌握的的单词数ng.set('0')      #将已掌握的单词初值设为0
nng.set('0')      #将未掌握的单词初值设为0#定义createfile函数,首次运行时创建文件
def createfile(filename):try:f=open(filename,'r',encoding='utf-8')  #读取unicode格式的文件f.close()except:f=open(filename,'w',encoding='utf-8')   #写入unicode格式的文件f.write('')f.close()#创建文件,用途从文件名可知
createfile('选取单词.txt')
createfile('复习.txt')
createfile('斩.txt')
createfile('已掌握单词.txt')
createfile('难词.txt')#定义empty函数,清空中间文件
def empty():f3=open('复习.txt','w',encoding='utf-8')f3.write('')f3.close()f2=open('选取单词.txt','w',encoding='utf-8')f2.write('')f2.close()#设置内部结构:#第一行设置
Label(mainframe,text='python背单词',font=('楷体',25)).grid(column=1,row=0)#第二行设置
Label(mainframe,text='    剩余单词数:',height=2,font=('隶书',13))\.grid(column=0,row=1,columnspan=1,sticky=('W','E'))
Label(mainframe,textvariable=l,width=10,height=2,font=('隶书',13))\.grid(row=1,column=1)
f1=open('单词.txt','r',encoding='utf-8')
s1=f1.read()
s1=s1.strip()
f1.close()
words=s1.split('\n')
l.set(str(len(words)))#第三行设置
Label(mainframe,text='本次共背',height=2,font=('隶书',13)).grid(row=2,column=0,sticky=('W','E'))
entry1=Entry(mainframe,textvariable=n,width=18)\.grid(row=2,column=1)
n.set(' ')
Label(mainframe,text='个单词',height=2,font=('隶书',13)).grid(row=2,column=2,sticky=('W','E'))#第四行设置
#定义begin函数,开始背单词
def begin(*args):        #*args传入参数empty()              #调用empty函数,防止因用户随机终止背诵任务而在中间文件内残留数据n1=int(n.get())f1=open('单词.txt','r',encoding='utf-8-sig')  #encoding='utf-8-sig',防止开头出现错误字符“\ufeff”s1=f1.read()s1=s1.strip()f1.close()words=s1.split('\n')                        #读取单词表rd=random.sample(range(0,len(words)),n1)   #生成n个随机数,对应n个单词的编号i.set(1)                               word=words[rd[0]].split('/')               #word中包含单词,音标和词义a1.set(word[0])                        #将第一个单词显示出来a2.set(word[1])a3.set(word[2])f2=open('选取单词.txt','w',encoding='utf-8') #将n个单词放入名为"选取单词"的文件中for j in range(0,n1):                  str1=words[rd[j]]+'\n'f2.write(str1)f2.close()bt1=Button(mainframe,text='开始',command=begin,bg='lightblue',width=15,height=2,font=('隶书',13))\.grid(row=3,column=2)                      #设置“开始”按钮,调用begin函数#第五行设置
Label(mainframe,text='当前第  ',height=2,font=('隶书',13))\.grid(column=0,row=4,columnspan=1,sticky=('W','E'))
Label(mainframe,textvariable=i,width=1)\.grid(row=4,column=1)
Label(mainframe,text='个单词',height=2,font=('隶书',13))\.grid(column=2,row=4,columnspan=1,sticky=('W','E'))#第六行设置
Label(mainframe,text='单词    ',height=2,font=('隶书',13)).grid(row=5,column=0,sticky=('W','E'))
Label(mainframe,text='音标',height=2,font=('隶书',13)).grid(row=5,column=1)
Label(mainframe,text='词义  ',height=2,font=('隶书',13)).grid(row=5,column=2,sticky=('W','E'))#第七行设置
Label(mainframe,textvariable=a1,width=50,font=('宋体',13),fg='purple')\.grid(row=6,column=0,sticky=E)
Label(mainframe,textvariable=a2,width=30,font=('宋体',13),fg='purple')\.grid(row=6,column=1,sticky=('W','E'))
Label(mainframe,textvariable=a3,width=50,font=('宋体',13),fg='purple')\.grid(row=6,column=2,sticky=W)#第八行设置
#定义Next函数,背下一个单词
def Next(*args):f2=open('选取单词.txt','r',encoding='utf-8')s2=f2.read()s2=s2.strip()                        #strip()方法去除文本前后的换行符f2.close()words=s2.split('\n')                 #将单词放入名为words的列表中if len(words)>0:f3=open('复习.txt','a+',encoding='utf-8')  #弹出words中的第一个单词,并放入名为"复习"的文件中str3=words.pop(0)+'\n'f3.write(str3)f3.close()f2=open('选取单词.txt','w',encoding='utf-8')  #去掉"选取单词"文件中的第一个单词str2='\n'.join(words)f2.write(str2)f2.close()if int(i.get())==int(n.get()):       #表明背完了单词messagebox.showinfo("提示","你已经背完了,快去复习吧!")   #弹出小窗口else:word=words[0].split('/')      #word中包含单词,音标和词义a1.set(word[0])               #显示下一个单词a2.set(word[1])a3.set(word[2])k=int(i.get())i.set(str(k+1))               #i的值增加1bt2=Button(mainframe,text='记住啦!下一个!',command=Next,width=15,bg='green',height=2,font=('隶书',13))\.grid(row=7,column=2)  #设置“下一个”按钮,调用Next函数#定义delete函数,删除过于简单的单词
def delete(*args):f2=open('选取单词.txt','r',encoding='utf-8')s2=f2.read()s2=s2.strip()                       #strip()方法去除文本前后的换行符f2.close()words=s2.split('\n')                #将单词放入名为words的列表中str4=words.pop(0)+'\n'f4=open('斩.txt','a+',encoding='utf-8')  #打开文件"斩",将"选取单词"文件中的第一个单词添加进去f4.write(str4)f4.close()if int(i.get())==int(n.get()):       #表明背完了单词messagebox.showinfo("提示","你已经背完了,快去复习吧!")   #弹出小窗口else:word=words[0].split('/')      #word中包含单词,音标和词义a1.set(word[0])               #显示下一个单词a2.set(word[1])a3.set(word[2])k=int(i.get())i.set(str(k+1))               #i的值增加1f2=open('选取单词.txt','w',encoding='utf-8')  #去掉"选取单词"文件中的第一个单词str2='\n'.join(words)f2.write(str2)f2.close()    bt3=Button(mainframe,text='太简单了!斩!',command=delete,width=15,bg='red',height=2,font=('隶书',13))\.grid(row=7,column=0)#定义dif函数,把较难的词汇加入“难词.txt”
def dif(*args):string=a1.get()+'/'+a2.get()+'/'+a3.get()+'\n'f=open('难词.txt','a+',encoding='utf-8')f.write(string)f.close()Button(mainframe,text='加入难词!',command=dif,width=15,bg='gold',height=2,font=('隶书',13))\.grid(row=7,column=1)#第九行设置#定义check函数,建议输入的单词是否正确
def check(*args):f3=open('复习.txt','r',encoding='utf-8')s3=f3.read()s3=s3.strip()words=s3.split('\n')word=words[0].split('/')Label(mainframe,text='正确答案是:',height=2,font=('隶书',13))\.grid(column=0,row=11,columnspan=1)a7.set(word[0])answer=a5.get()answer=answer.strip()    #去掉回车而产生的换行符word[0]=word[0].strip()  #去掉空格if word[0]==answer:a6.set('回答正确!')f5=open('已掌握单词.txt','a+',encoding='utf-8')    #将拼写正确的单词放入"已掌握单词"文件中str5=words.pop(0)+'\n'f5.write(str5)f5.close()ng1=int(ng.get())     #掌握单词数加一ng.set(str(ng1+1))else:a6.set('回答错误!')nng1=int(nng.get())     #未掌握单词数加一nng.set(str(nng1+1))del words[0]          #直接将未掌握的单词删除str3='\n'.join(words)f3=open('复习.txt','w',encoding='utf-8')f3.write(str3)f3.close()#定义Next1函数,复习下一个单词
def Next1(*args):if int(N.get())==int(n.get())-int(nd.get()):messagebox.showinfo("提示","本次单词背诵结束!点击‘确定’后显示背诵情况")empty()  #清空中间文件,避免对下次背单词产生干扰f1=open('单词.txt','r',encoding='utf-8-sig')   #把已掌握的单词和已删除的单词从单词.txt中删除s1=f1.read()f1.close()f4=open('斩.txt','r',encoding='utf-8')s4=f4.read()s4=s4.strip()words4=s4.split('\n')f5=open('已掌握单词.txt','r',encoding='utf-8')s5=f5.read()s5=s5.strip()words5=s5.split('\n')if words4!=['']:for i in words4:if i in s1:i=i+'\n's1=s1.replace(i,'')if words5!=['']:for j in words5:if j in s1:j=j+'\n's1=s1.replace(j,'')if v.get()==1:f=open('四级词汇.txt','w',encoding='utf-8')f.write(s1)f.close()elif v.get()==2:f=open('六级词汇.txt','w',encoding='utf-8')f.write(s1)f.close()else :f=open('考研词汇.txt','w',encoding='utf-8')f.write(s1)f.close()f1=open('单词.txt','w',encoding='utf-8')f1.write('')f1.close()import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']sizes=int(nd.get()),int(ng.get()),int(nng.get())labels1='已斩单词','已掌握单词','未掌握单词'colors1='red','blue','yellow'plt.pie(sizes,labels=labels1,colors=colors1,autopct='%2.3f%%')plt.axis('equal')plt.title("背诵情况饼图",color='green',fontsize=25)plt.show()else:a6.set('')a7.set('')        #将上一个单词的相关信息去除,避免干扰答题f3=open('复习.txt','r',encoding='utf-8')s3=f3.read()s3=s3.strip()f3.close()words=s3.split('\n')rdint=random.randint(1,len(words))-1rdword=words[rdint]rdword1=rdword.split('/')a4.set(rdword1[2])                  #打开"复习"文件,随机选出一个单词,显示其词义words[0],words[rdint]=words[rdint],words[0]   #将随机选出的单词放在words开头,方便查找f3=open('复习.txt','w',encoding='utf-8')      #将words重新写入"复习"文件f3.write('\n'.join(words))f3.close()k=int(N.get())N.set(str(k+1))#定义review函数,开始复习,并显示出接下来的几行
def review(*args):if int(i.get())<int(n.get()):messagebox.showinfo("提示","单词还没背完呢!")else:a1.set(' ')         #把正在显示的单词清空,避免干扰答题a2.set(' ')a3.set(' ')i.set(' ')Label(mainframe,text='请根据词义拼写出该单词(输入后回车):',height=2,font=('隶书',13))\.grid(column=0,row=9,columnspan=1) #第九行和第十行设置Label(mainframe,textvariable=a4,height=2,font=('隶书',13))\.grid(column=0,row=10,columnspan=1)entry2=Entry(mainframe,textvariable=a5,width=18)\.grid(row=10,column=1)root.bind('<Return>',check)                #通过回车键调用check()函数Button(mainframe,text='下一个',command=Next1,width=15,bg='orange',height=2,font=('隶书',13))\.grid(column=2,row=10)  #第十一行和十二行设置Label(mainframe,textvariable=a6,height=2,font=('隶书',13))\.grid(column=2,row=11,columnspan=3)#达到点击“复习”后才出现这几行的效果Label(mainframe,textvariable=a7,height=2,font=('隶书',13))\.grid(column=1,row=11,columnspan=1)f3=open('复习.txt','r',encoding='utf-8')s3=f3.read()s3=s3.strip()f3.close()words=s3.split('\n')length=len(words)rdint=random.randint(1,len(words))-1rdword=words[rdint]rdword1=rdword.split('/')a4.set(rdword1[2])                  #打开"复习"文件,随机选出一个单词,显示其词义words[0],words[rdint]=words[rdint],words[0]   #将随机选出的单词放在words开头,方便查找f3=open('复习.txt','w',encoding='utf-8')      #将words重新写入"复习"文件f3.write('\n'.join(words))f3.close()n1=int(n.get())nd.set(str(n1-length))            #计算本次删除的单词数N.set('1')                #当前复习第一个单词bt4=Button(mainframe,text='复习',command=review,width=15,bg='blue',height=2,font=('隶书',13))\.grid(row=8,column=0)
root.mainloop()

python编写背单词程序相关推荐

  1. 用python自制背单词程序_c++自制背单词应用

    文件结构: 背词历史.log 用来存放背过的单词,存放的格式是 年-月-日 时:分:秒 单词 词性 中文解释 生词本.txt 用来存放当下要背诵的单词列表,格式是 单词 词性 中文解释 历史记录.tx ...

  2. 用Python编写背单词的小程序

    最近在准备一个成人学士学位的英语考试(长春工业大学计算机专业本科),需要背一些常用的词汇和短语.不愿动笔写,那就用Python编一个自动浏览的小程序,实现这个功能. 操作系统:Mac OS IDE: ...

  3. 用python自制一款背单词程序

    需求分析 在使用电脑上网冲浪,打游戏,看电影时,经常会在各个地方夹杂着一些看不懂的英文单词,为了在日常玩电脑的时候,也能利用碎片时间积累英文单词,因此自制了一款简易的背单词程序.功能如下: 1.平时见 ...

  4. Python制作背单词exe

    使用python编写的背单词程序,可以更快捷,更环保的背单词 以8上英语第8单元的前20个单词为例: import random                   #导入随机库 a = {'1': ...

  5. C++课程设计——背单词程序

    C++课程设计--背单词程序 设计要求 设计一背单词程序,程序以菜单方式工作,字典使用文本文件存放就可以了.使之能提供以下功能:添加新词 支持顺序测验和随机测验 记录没背过的单词 查找单词的汉语或英语 ...

  6. python单词软件哪个好_利用Python分析背单词软件的惊人真相

    摘要:利用python分析背单词软件,揭秘你不知道的惊人真相 0×00 前言 你想知道背单词软件有大概多少人注册第一天都没有背完嘛 你想知道背单词软件这么火,这么多人在使用,真的有多少人真的在背诵嘛 ...

  7. 用java程序实现记单词_java实现背单词程序

    本文实例为大家分享了java实现背单词程序的具体代码,供大家参考,具体内容如下 山东科技大学济南校区程序设计 功能要求:可以读入一个单词表文本文件, 能够将背错的单词重复记忆,直到全记住. packa ...

  8. 教你用Python 编写 Hadoop MapReduce 程序

    摘要:Hadoop Streaming 使用 MapReduce 框架,该框架可用于编写应用程序来处理海量数据. 本文分享自华为云社区<Hadoop Streaming:用 Python 编写 ...

  9. java背单词_java实现背单词程序

    本文实例为大家分享了java实现背单词程序的具体代码,供大家参考,具体内容如下 山东科技大学济南校区程序设计 功能要求:可以读入一个单词表文本文件, 能够将背错的单词重复记忆,直到全记住. packa ...

最新文章

  1. java 汉字 数字_java数字转汉字工具类详解
  2. python --那些你应该知道的知识点
  3. Xshell链接远程服务器调用Pycharm的方法
  4. 为什么很多公司转型Go语言开发?Go语言能做什么
  5. beego1---beego,bee环境配置
  6. Android 对话框,确定取消
  7. 五省竞赛计算机作品,关于征集2017年华北五省(市、自治区)及港澳台大学生计算机应用大赛河北赛区竞赛作品的通知...
  8. redhat python3.4安装步骤
  9. 【JavaScript】提取字符串里的分数,及计算平均分并与平均分比较输出
  10. 一个第三方Dart库导致的编译错误!
  11. 避坑指南!数据分析最容易被忽略的10个错误
  12. 【MFC开发(2)】新建一个对话框MFC项目(vs2013)
  13. Python3使用xpath爬取豆丁网文档
  14. 【MS SQL Server】SQL Server2005下载地址
  15. 搜狗收录提交入口之搜狗泛目录实现
  16. 南阳 oj 6174问题
  17. ecshop一键购物
  18. 计算机设计大赛报道,我院在中国大学生计算机设计大赛中再创佳绩
  19. 【计算机网络基础 七】输入URL到浏览器发生了什么
  20. 【参赛作品97】openGauss单机版安装步骤

热门文章

  1. Camera Surface 从应用到cameraserver的流转
  2. down mark 打钩_[MarkDown] markdown语法小结
  3. struts中的javascript - seinbar的专栏
  4. Pancake和import 语句——————————方法的重写
  5. manga camera android,SMAAASH! Camera [Manga Photo]
  6. 立方根号三等于多少计算机,三次根号3(3的根号三次方等于多少)
  7. ipv6访问文件服务器,开启IPv6,让你的局域网可以使用IPV6进行共享文件夹的访问...
  8. 【无标题】2021年中式烹调师(中级)试题及解析及中式烹调师(中级)复审考试
  9. DevpTips【powerpoint】发现打不开,显示发现文件中的内容有问题。可尝试修复此演示文稿。
  10. java中的锁池和等待池是什么_线程的几个状态及方法,等待池和锁池的理解