前言
利用Python设计一款可以用查询、朗读、添加、测试的英语词典小程序是非常方便的
主要功能
查询、添加、修改、测验、朗读、退出
主要思路
其数据类型应为字典类型,导入英语词典文本文档(dict.txt),通过正则表达式修改其格式,再通过dict()改为字典类型,通过dict.get()查询,以追加模式打开dict.txt,进行添加,用键值对比较来进行测试。设计菜单函函数menu()来选择相应功能
主要函数
read_dict() 处理dict.txt
select() 查询单词
add() 添加单词
sayword(str) 朗读单词
quit() 退出
main() 主函数
主要流程
主要过程及代码
一、导入词典,建立其文本文档(dict.txt),并将编码格式改为utf-8
二、read_dict()函数
使用正则表达式来处理dict.txt,使其后续可以转为字典类型
def read_dict():
fo = open("dict.txt","r",encoding="utf-8")
dt = fo.read()
fo.close()
pattern = re.compile(r"([a-z\.-]+)\s([^\n]+)\n",re.I|re.S)#查找:英文+空格+字符串+\n
dt=pattern.findall(dt)
return dict(dt)#将[(英文,字符串),...]转为字典
在使用正则表达式时,应先引入 import re,正则表达式代码如下
pattern = re.compile(r"([a-z\.-]+)\s([^\n]+)\n",re.I|re.S)
三、showmenu() 显示菜单函数
def showmenu():
menu = """欢迎使用词典
1.查询
2.添加
3.修改
4.测验:请根据读音拼写单词
9.退出"""
print(menu)
四、select() 查询函数
def select(n=0):
dict4=read_dict()
str1 = input("输入查询的单词:")
value = dict4.get(str1,"字典库中未找到")
if value == "字典库中未找到":
print("字典库中未找到,请输入该单词的中文翻译>>>")
add(str1)
else:#默认显示查询结果,并发音
print(value)
sayword(str1)
if n !=0: #不能按行修改,只能将dict变量重新写入dict.txt文件中
str2 = input("输入要修改的中文单词:")
if str2 !='':
dict4[str1] = str2
fo = open("dict.txt","w+")
str3 = str(dict4).replace(",",",\n").replace(":"," ")
str3 = re.sub("[\{\}']","",str3)
fo.write(str3)
fo.close()
五、sayword(str) 朗读函数
文本朗读需要调用第三方库 import pyttsx3 ,安装详细过程,请参考主页Python笔记七
def sayword(str):
engine = pyttsx3.init()
volume = engine.getProperty('volume')
engine.setProperty('volume', 0.6)
engine.setProperty('rate', 120)
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)
engine.say(str)
engine.runAndWait()
六、add()函数 添加函数
使用追加的模式,打开dict.txt,自动追击在其文本文档后
def add(str1=""):
fo = open("dict.txt","a+")
if str1=="":str1 = input("输入要添加的英文单词:")
str2 = input("输入要添加的中文单词:")
str="\n{} {}".format(str1,str2)
fo.write(str)
fo.close()
return
七、quit()函数 退出函数
这个直接调用exit()函数即可
def quit():
print("感谢使用")
exit()
八、test()函数 测验函数
使用random.sample()函数来获取字典中的随机值,再通过if判断键与用户输入的值是否匹配即可
注意Python3.x版本即将弃用random.sample()函数
def test():
dict4=read_dict()
score = 0
tmpwd = random.sample(dict4.items(),20)#从字典dict4中随机取20个key
#tmpwd = random.choice
for i in range(len(tmpwd)):
#word = dict4.popitem()#3.7之前,返回一个随机键值对
word = tmpwd[i]
sayword(word[0])
str1 = input("请根据读音拼写单词(按回车重新听读音,输入h进行提示,输入q退出):")
while str1 =="" or str1=='h':
if str1 == 'h':print(word)
sayword(word[0])
str1 = input("请根据读音拼写单词(按回车重新听读音,输入h进行提示,输入q退出):")
if str1=='q':break
elif str1==word[0]:
score+=5
print("回答正确!",end = "")
else:
print("回答错误,加油!",end = "")
print("你当前分数为{}".format(score))
九、main()函数
主函数主要是根据用户输入来执行相应操作
def main():
#显示程序功能
showmenu()
n = (input("请输入相应功能序号:"))
#根据输入调用相应功能:查询select(),添加add(),退出quit()
while 1:
if n =='1':select()
elif n =='2':add()
elif n =='3':select(1)
elif n =='4':test()
elif n =='9':quit()
else:print("输入有误!")
n = (input("请输入相应功能序号:"))
至此所有函数及其代码展示结束
完整代码
# 英文词典
from fileinput import close
from sys import getallocatedblocks
import pyttsx3
import re
import random
import pprint
def showmenu():
menu = """欢迎使用词典
1.查询
2.添加
3.修改
4.测验:请根据读音拼写单词
9.退出"""
print(menu)
def read_dict():
fo = open("dict.txt","r",encoding="utf-8")
dt = fo.read()
fo.close()
pattern = re.compile(r"([a-z\.-]+)\s+(.+)",re.I)#查找:英文+空格+字符串+\n
dt=pattern.findall(dt)
#print(dt)
return dict(dt)#将[(英文,字符串),...]转为字典
def select(n=0):
dict4=read_dict()
str1 = input("输入查询的单词:")
value = dict4.get(str1,"字典库中未找到")
if value == "字典库中未找到":
print("字典库中未找到,请输入该单词的中文翻译>>>")
add(str1)
else:#默认显示查询结果,并发音
print(value)
sayword(str1)
if n !=0: #不能按行修改,只能将dict变量重新写入dict.txt文件中
str2 = input("输入要修改的中文单词:")
if str2 !='':
dict4[str1] = str2
fo = open("dict.txt","w+")
str3 = str(dict4).replace(",",",\n").replace(":"," ")
str3 = re.sub("[\{\}']","",str3)
fo.write(str3)
fo.close()
#return str1
def sayword(str):
engine = pyttsx3.init()
volume = engine.getProperty('volume')
engine.setProperty('volume', 0.6)
engine.setProperty('rate', 120)
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)
engine.say(str)
engine.runAndWait()
def add(str1=""):
fo = open("dict.txt","a+")
if str1=="":str1 = input("输入要添加的英文单词:")
str2 = input("输入要添加的中文单词:")
str="\n{} {}".format(str1,str2)
fo.write(str)
fo.close()
return
def quit():
print("感谢使用")
exit()
def main():
#显示程序功能
showmenu()
n = (input("请输入相应功能序号:"))
#根据输入调用相应功能:查询select(),添加add(),退出quit()
while 1:
if n =='1':select()
elif n =='2':add()
elif n =='3':select(1)
elif n =='4':test()
elif n =='9':quit()
else:print("输入有误!")
n = (input("请输入相应功能序号:"))
def test():
dict4=read_dict()
score = 0
tmpwd = random.sample(dict4.items(),20)#从字典dict4中随机取20个key
#tmpwd = random.choice
for i in range(len(tmpwd)):
#word = dict4.popitem()#3.7之前,返回一个随机键值对
word = tmpwd[i]
sayword(word[0])
str1 = input("请根据读音拼写单词(按回车重新听读音,输入h进行提示,输入q退出):")
while str1 =="" or str1=='h':
if str1 == 'h':print(word)
sayword(word[0])
str1 = input("请根据读音拼写单词(按回车重新听读音,输入h进行提示,输入q退出):")
if str1=='q':break
elif str1==word[0]:
score+=5
print("回答正确!",end = "")
else:
print("回答错误,加油!",end = "")
print("你当前分数为{}".format(score))
dict4 = {}#全局变量字典
dict4=read_dict()#将正则表达式执行后的dt赋值给全局变量dict4
#print(dict4)
#pprint.pprint(dict4)
main()
功能测试
至此英语字典的所有基本功能已经完成,本程序的特点在于通过正则表达式来代替了replace()函数,并在字典原基础上增加了文本朗读功能,基本完成了一个词典程序功能的开发。