湖北师范大学-Python程序设计-字典翻转教学


第1关:创建大学英语四级单词字典

编程要求
根据提示,在右侧编辑器补充代码,读取数据集中的四级单词文件,以单词为键,以中文解释为值创建字典。输入一个正整数n,输出所创建字典排序后的前n项。

测试说明
平台会对你编写的代码进行测试:

测试输入:
10
预期输出:
[('African', 'a.非洲的 n.非洲人'), ('Arabian', 'a.阿拉伯的'), ('Atlantic', 'a.大西洋的 n.大西洋'), ('August', 'n.八月'), ('Australia', 'n.澳大利亚'), ('Australian', 'a.澳大利亚的'), ('B.C.', '(缩)公元前'), ('Bible', 'n.基督教《圣经》'), ('Britain', 'n.不列颠,英国'), ('British', 'a.不列颠的,英联邦的')]

from collections import OrderedDict


def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 在下面一行补充代码,创建一个空字典
    cet={}                                                   # 创建空字典

    with open(file, 'r', encoding='utf-8') as data:    
        # 打开文件,以读模式创建文件对象
        for x in data:                                 
        # 遍历文件对象
            word, trans = x.strip().split(maxsplit=1)  
        # 每行根据空格切分为列表,只切分一次,将单词与释义分开
            
            cet[word]=trans
            # 补充程序,列表的首个元素作为字典的键,第二个元素做字典的值,加入字典中,返回这个字典
    return(cet)





if __name__ == '__main__':
    filename = '/data/bigfiles/cet4.txt'
    n = int(input())                     # 输入一个正整数
    cet_dict = create_dict(filename)     # 调用函数,返回字典类型数据
    # 在下面补充语句,根据字典的键对字典进行排序,得到排序的列表,输出列表前n项
    print(sorted(cet_dict.items())[:n])


第2关:合并大学英语四六级词汇字典

编程要求
根据提示,在右侧编辑器补充代码:

读取cet4.txt和cet6.txt,合并成一个字典(注:因测评需要,务必将cet6.txt中的单词合并到cet4.txt所在的字典中)。
输入一个正整数n,输出所创建字典排序后的前n项。

测试说明
平台会对你编写的代码进行测试:

测试输入:
20
预期输出:
[('African', 'a.非洲的 n.非洲人'), ('Arabian', 'a.阿拉伯的'), ('Atlantic', 'a.大西洋的 n.大西洋'), ('August', 'n.八月'), ('Australia', 'n.澳大利亚'), ('Australian', 'a.澳大利亚的'), ('B.C.', '(缩)公元前'), ('Bible', 'n.基督教《圣经》'), ('Britain', 'n.不列颠,英国'), ('British', 'a.不列颠的,英联邦的'), ('Buddhism', 'n.佛教,释教'), ('Canada', 'n.加拿大'), ('Canadian', 'a.加拿大的'), ('Catholic', 'a.天主教的n.天主教徒'), ('Christ', 'n.救世主(耶稣基督)'), ('Christian', 'a.基督教的'), ('Christmas', 'n.圣诞节'), ('December', 'n.十二月'), ('Egyptian', 'a.埃及的 n.埃及人'), ('European', 'a.欧洲的 n.欧洲人')]

def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 补充你的代码
    cet={}
    with open (file,'r',encoding='utf-8') as data:
        for x in data:
            word,trans=x.strip().split(maxsplit=1)
            cet[word]=trans
    return cet


def merge_dic(file1, file2):
    """将读取两个文件中获得的字典合并为一个,返回合并后的字典"""
    # 补充你的代码
    file3=create_dict(file1)
    file4=create_dict(file2)
    file=file3 | file4
    return file


def sort_dic(cet_dic, n):
    """根据字典的键对字典进行排序,得到排序的列表,返回列表前n项"""
    # 补充你的代码
    return (sorted(cet_dic.items())[:n])


if __name__ == '__main__':
    filename1 = '/data/bigfiles/cet4.txt'  # 数据文件名
    filename2 = '/data/bigfiles/cet6.txt'  # 数据文件名
    num = int(input())  # 输入一个正整数
    cet_dict = merge_dic(filename1, filename2)  # 调用函数,返回字典类型数据
    print(sort_dic(cet_dict, num))  # 输出排序后列表前n项
 

第3关:查单词输出中文释义

编程要求
根据提示,在右侧编辑器补充代码,读取数据集中的四级单和六级词文件,以单词为键,以中文解释为值,将两个文件中的数据创建为一个字典。输入一个单词,查询并输出对应的释义,单词在字典中不存在时,输出'单词不存在'。

测试说明
平台会对你编写的代码进行测试:

测试输入:
merry
预期输出:
merry: a.欢乐的,愉快的

测试输入:
return
预期输出:
return: 单词不存在

def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 补充你的代码
    cet={}
    with open (file,'r',encoding='utf-8') as data:
        for x in data:
            word,trans=x.strip().split(maxsplit=1)
            cet[word]=trans
    return cet

def merge_dic(file1, file2):
    """将读取两个文件中获得的字典合并为一个,返回合并后的字典"""
    # 补充你的代码
    file3=create_dict(file1)
    file4=create_dict(file2)
    file=file3|file4
    return file

def translate(cet_dic, word):
    """接收两个参数,第一个是读文件创建的字典,第二个参数为要查询的单词,字符串
    根据文件创建的字典,从中查询单词word,
    如果查询单词存在,元组形式返回词与词的释义;
    如果查询不存在,返回'单词不存在'
    """
    # 补充你的代码
    if word in cet_dic:
        return word,cet_dic[word]
    else:
        return word,'单词不存在'

if __name__ == '__main__':
    filename1 = '/data/bigfiles/cet4.txt'  # 数据文件名
    filename2 = '/data/bigfiles/cet6.txt'  # 数据文件名
    word = input()  # 输入一个单词
    cet_dict = merge_dic(filename1, filename2)  # 调用函数,返回字典类型数据
    result = translate(cet_dict, word)
    print('{}: {}'.format(*result))

第4关:删除字典中特定字母开头的单词

编程要求
根据提示,在右侧编辑器补充代码,读取数据集中的四级单和六级词文件,以单词为键,以中文解释为值,将两个文件中的数据创建为一个字典。删除字典中特定字母开头的单词(首字母不区分大小写),输出删除后字典长度。

测试说明
平台会对你编写的代码进行测试:

测试输入:
a
预期输出:
4918

def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 补充你的代码
    cet={}
    with open (file,'r',encoding='utf-8') as data:
        for x in data:
            word,trans=x.strip().split(maxsplit=1)
            cet[word]=trans
    return cet

def merge_dic(file1, file2):
    """将读取两个文件中获得的字典合并为一个,返回合并后的字典"""
    # 补充你的代码
    file3=create_dict(file1)
    file4=create_dict(file2)
    file=file3 | file4
    return file

def del_words(cet_dic, letter):
    """删除字典中首字母与参数letter相同的单词,返回删除后的字典"""
    # 补充你的代码
    list1 = [x for x in cet_dic]
    for i in range(len(list1)):
        if list1[i][0].lower() == letter:
            cet_dic.pop(list1[i])
    return cet_dic
    

if __name__ == '__main__':
    filename1 = '/data/bigfiles/cet4.txt'  # 数据文件名
    filename2 = '/data/bigfiles/cet6.txt'  # 数据文件名
    alphabet = input().lower()             # 输入一个字母
    cet_dict = merge_dic(filename1, filename2)  # 调用函数,返回字典类型数据
    result = del_words(cet_dict, alphabet)  # 删除特定单词后的字典
    print(len(result))                      # 输出字典长度

第5关:单词英汉记忆训练

编程要求
根据提示,在右侧编辑器补充代码,读取数据集中的四级单和六级词文件,以单词为键,以中文解释为值,将两个文件中的数据创建为一个字典。
用户根据提示文字信息输入一个字母,用这个字母的ASCII值为随机数种子,随机抽取这个字母开头的单词(首字母不区分大小写)进行记忆训练。
用户填写词义,用户输入的词义在释义中存在时认为回答正确,此时输出当前词全部释义;
输入错误时,记录该单词信息到错词字典;
用户直接输入回车时结束训练,并输出正确率并输出全部出错单词的信息。

测试说明
平台会对你编写的代码进行测试:

测试输入:
z
区域
热情
地区
斑马
热情

班马
``
预期输出:(无阴影的部分是用户输入的字符,注意“输入今天训练单词首字母:”后面有一个换行)
输入今天训练单词首字母:z
请输入单词zone的中文翻译:区域
zone的释义为:n.地区,区域,范围
请输入单词zealous的中文翻译:热情
zealous的释义为:a.热心的,热情的
请输入单词zone的中文翻译:地区
zone的释义为:n.地区,区域,范围
请输入单词zebra的中文翻译:斑马
zebra的释义为:n.斑马
请输入单词zeal的中文翻译:热情
zeal的释义为:n.热心,热情,热忱
请输入单词zinc的中文翻译:锌
zinc的释义为:n.锌 vt.在…上镀锌
请输入单词zebra的中文翻译:班马
答案错误
请输入单词zealous的中文翻译:
训练结束!
需要加强记忆的单词:
zebra:n.斑马

import random

def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 补充你的代码
    cet={}
    with open (file,'r',encoding='utf-8') as data:
        for x in data:
            word,trans=x.strip().split(maxsplit=1)
            cet[word]=trans
    return cet
def merge_dic(file1, file2):
    """将读取两个文件中获得的字典合并为一个,返回合并后的字典"""
    # 补充你的代码
    file3=create_dict(file1)
    file4=create_dict(file2)
    file=file3 | file4
    return file




def training(cet_dic, letter):
    """输入一个字母,返回以这个字母开头的词汇的字典(不区分大小写),用于单词记忆训练"""
    # 补充你的代码
    list1 =[x for x in cet_dic]
    for i in range(len(list1)):
        if list1[i][0].lower()!=letter:
            cet_dic.pop(list1[i])
    return cet_dic





def en_to_ch(train_dic):
    """从训练字典中随机抽取以某个字母开头的单词,用户填写词义
    回答正确时,输出当前词全部释义,输入错误时,记录该单词信息,
    直接输入回车时结束输入,训练结束后输出全部出错单词的信息"""
    # 创建空字典,用于容纳答错单词
    dic1={}
    while True:  # 无限循环用于一次训练记忆多个单词
        word = random.choice(list(train_dic.keys()))   # 从字典的键中随机抽取一个单词
        print(f'请输入单词{word}的中文翻译:')           # 输出提示语句
        answer = input()                               # 输入当前单词的语义
        if not answer:                                 # 直接回车时输入为空,结束循环
            print('训练结束!')
            break
        # 补充你的程序,如果输入在释义中存在,输出完整释义,否则输出'答案错误'并将当前单词加入答错单词字典
        elif answer in train_dic[word]:
            print(f'{word}的释义为:{train_dic[word]}')
        elif answer not in train_dic[word]:
            print('答案错误')
            dic1[word]=train_dic[word]

    print('需要加强记忆的单词:')
    # 补充代码,逐个输出答错字典中的单词和释义
    for i in dic1:
        print(f'{i}:{dic1[i]}')




if __name__ == '__main__':
    filename1 = '/data/bigfiles/cet4.txt'  # 数据文件名
    filename2 = '/data/bigfiles/cet6.txt'  # 数据文件名
    alphabet = input('输入今天训练单词首字母:\n').lower()
    random.seed(ord(alphabet))             # 用当前字典的ASCII值做随机数种子,方便评测
    cet_dict = merge_dic(filename1, filename2)  # 调用函数,返回字典类型数据
    train_dict = training(cet_dict, alphabet)   # 本次训练单词的字典
    en_to_ch(train_dict)                        # 调用函数进行训练
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值