生词本小程序1.0

实现功能:

单词翻译并摘录至生词本中
实现生词本中单词乱序复习:
		自定义复习的单词数
		选择复习模式:1.提供中文写出对应生词本中的单词 2.提供英文回答出其中文含义
未来希望实现功能:
    1.GUI界面
    2.不同单词复习频率的统计
    ....
import requests
import re
import random

# 爬取百度翻译,并返回字典 键为输入的单词,值为对应的译文
def creatDict(s):
    url = "https://fanyi.baidu.com/sug"
    dat = {
        "kw":s
    }
    resp = requests.post(url,data=dat)
    dic ={}
    lst = resp.json()['data']  # lst [{"k":"dog","v":"狗"},{"k":"dogm","v":"教条的"}...]
    resp.close()
    # 循环遍历lst 找到对应单词的字典
    if lst != []:
        for i in range(len(lst)):
            if s == lst[i]['k']:
                dic[s] = lst[i]['v']
    else:
        print("你单词是不是输错了?")
        return None
    return dic

# 文本文件的创建
def creatTxt(s,dic):
    # 读取文本文件    读取文本文件内容,若文件不存在则创建文件
    with open("test.txt",'a+',encoding='utf-8') as fr:
        fr.seek(0,0)
        txtContent = fr.read()
       
    # 辅助信息提示每隔10个单词进行分割  通过正则来判断
    m = '([a-zA-z]+) :'
    lst1 = re.findall(m,txtContent)
    if len(lst1)%10 == 0:
        with open("test.txt",'a',encoding='utf-8') as fw:
            fw.write("*"*100+str(len(lst1))+'\n')
    
    # 判断用户查询的单词是否已经在文本文件中出现了
    # 出现了只打印对应的翻译  未出现则将其添加至文本文件中
    if s in txtContent:
        print(dic[s])
    else:
        print(dic[s])
        with open("test.txt",'a',encoding='utf-8') as f:
            f.write(s+' :\n')
            f.write('\t'+dic[s]+'\n')


# 根据生词本中单词创建字典  键为单词  值为英文
def tongji():
    with open("test.txt",'r',encoding='utf-8') as f:
        content = f.read()
    wordModel = '([a-zA-z]+) :'
    transModel = '\t(.*)\n'
    wordlst = re.findall(wordModel,content)
    translst = re.findall(transModel,content)
    dic = {}
    for i in range(len(wordlst)):
        dic[wordlst[i]] = translst[i] 
    return dic

# 给定数目,获取相应数量乱序的单词翻译,默写对应的单词
def ChtoEn(dic,num):
    wordlst = list(dic.keys())
    lst = random.sample(wordlst,num)  # lst ['dog','apple',...]
    # 创建单词对应的翻译列表
    # dic {'dog':'狗','one':'一'}
    translst = []
    for i in range(len(lst)):
        translst.append(dic[lst[i]])
        for cishu in range(3):
            word = input("请写出"+translst[i]+'对应的英文(提示首字母为'+lst[i][0]+'): ').strip()
            if word == lst[i]:
                print("你的回答正确")
                break
            elif word == '摆烂了':
                return 0
            else:
                print("你还有"+str(3-1-cishu)+"次机会")
        if cishu == 2:
            print("检查看看,正确的为:"+lst[i])
    return 1

# 给定数目,获取相应数量乱序的单词,默写中文翻译
def EntoCh(dic,num):
    wordlst = list(dic.keys())
    lst = random.sample(wordlst,num)  # lst ['dog','apple',...]
    # 创建单词对应的翻译列表
    # dic {'dog':'狗','one':'一'}
    translst = []
    for i in range(len(lst)):
        translst.append(dic[lst[i]])
        for cishu in range(2):
            trans = input("请写出"+lst[i]+'的中文翻译(多个意思使用|来间隔): ').strip()
            trans = re.sub(' ','',trans)
            check = re.findall(trans,translst[i])
            if len(check) != 0:
                print("你的回答正确,详细翻译为:"+translst[i])
                break
            elif trans == "摆烂了":
                return 0
            else:
                print("你还有"+str(2-1-cishu)+"次机会")
        if cishu == 1:
            print("检查看看,详细的翻译的为:"+translst[i])
    return 1

# 选择复习模式以及输入复习单词数
def fuxi(dic):
    print("请选择复习模式(02_1:给英文写中文/02_2:给中文写英文)")
    while True:
        s = input("请输入02_1或02_2: ").strip()
        if s == '02_1' or s == '02_2':
            break
        else:
            print("请认真选择!") 
    if s == '02_1':
        while True:
            try:
                dicLen = len(dic)
                while True:
                    num = int(input("本次想复习多少个单词?"+'(总单词数为'+str(dicLen)+')').strip())
                    if num <= dicLen:
                        bailan = EntoCh(dic,num)
                        if bailan == 0:
                            return 0
                        break
                    else:
                        print('请输入合适的数目')
                break
            except Exception as e:
                print("你输的不是正整数")
    else:
        while True:
            try:
                dicLen = len(dic)
                while True:
                    num = int(input("本次想复习多少个单词?"+'(总单词数为'+str(dicLen)+')').strip())
                    if num <= dicLen:
                        bailan = ChtoEn(dic,num)
                        if bailan == 0:
                            return 0
                        break
                    else:
                        print('请输入合适的数目')
                break
            except Exception as e:
                print("你输的不是正整数")

# 用户能够一直进行输入直到输入字符 $
if __name__ == '__main__':
    while True:
        print("请选择模式(01:生词模式/02:复习模式/$$:退出程序)")
        model = input("请输入01或02: ").strip()
        if model == '01':
            while True:
                s = input("请输入你要翻译的英文单词(输入$退出): ").strip()
                if s != '$':
                    dic = creatDict(s)
                    if dic != None:
                        creatTxt(s,dic)
                else:
                    print("查询模式已退出")
                    break
        elif model == '02':
            dic = tongji()
            bailan = fuxi(dic)
            if bailan == 0:
                print("摆烂了,不想复习了")
                break
        elif model =='$$':
            print("程序已退出!!")
            break
        else:
            print("请输入相应的字符")

使用方法:
1.生词模式
在这里插入图片描述2.创建的文本文件
在这里插入图片描述3.复习模式在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值