Python程序设计实例:可查询修改、添加、测验、朗读的英语词典

前言

利用Python设计一款可以用查询、朗读、添加、测试的英语词典小程序是非常方便的

主要功能

查询、添加、修改、测验、朗读、退出

主要思路

其数据类型应为字典类型,导入英语词典文本文档(dict.txt),通过正则表达式修改其格式,再通过dict()改为字典类型,通过dict.get()查询,以追加模式打开dict.txt,进行添加,用键值对比较来进行测试。设计菜单函函数menu()来选择相应功能

主要函数

read_dict()            处理dict.txt

showmenu()         显示菜单

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()函数,并在字典原基础上增加了文本朗读功能,基本完成了一个词典程序功能的开发。

  • 3
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值