【头歌-Python】字典自学引导

禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137976398
参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301

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

任务描述
本关任务:编写一个能创建大学英语四级单词字典的小程序。

相关知识
为了完成本关任务,你需要掌握:

  1. 创建空字典
  2. 字典中增加元素
  3. 字典视图
  4. 字典排序

创建空字典
空的大括号{}和无参数的dict()函数都可以用于创建空字典。

cet_dic = {}      # 创建空字典
cet_dic = dict()  # 创建空字典

字典中增加元素

  1. dict[key] = value方法

示例如下:

# 1. 将变量word为键,变量trans为值的元素加入到字典中
cet_dic = {}  # 创建空字典
word, trans = ['workshop', 'n.专题讨论会']
cet_dic[word] = trans
print(cet_dic)  # {'workshop': 'n.专题讨论会'}
  1. dict.update(k1=v1,)
# 2. 将参数中的键值对转为字典元素加入字典中
cet_dic = {}  # 创建空字典
cet_dic.update(bug='n.虫子;臭虫')  # 更新列表,将参数中的字典元素加入到字典cet_dic中
print(cet_dic)  # {'bug': 'n.虫子;臭虫'}
  1. dict.update({k1:v1})
# 3. 更新列表,将参数中的字典元素加入到字典cet_dic中
cet_dic = {}  # 创建空字典
word, trans = ('absent', 'a.不在意的')
cet_dic.update({word: trans})
print(cet_dic)  # {'absent': 'a.不在意的'}
  1. 字典合并运算"|"和字典更新运算"|="
# 4. 字典合并运算"|"和字典更新运算"|="
cet_dic = {}  # 创建空字典
word, trans = ('bronze', 'n.青铜色')
cet_dic |= {word: trans}
print(cet_dic)  # {'bronze': 'n.青铜色'}

字典视图
dic.keys() 可获得字典键的视图
dic.values()可获得字典值的视图
dic.items() 可获得字典键值对的视图

cet_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
print(cet_dic.keys())    # dict_keys(['bug', 'absent', 'bronze'])
print(cet_dic.values())  # dict_values(['n.虫子;臭虫', 'a.不在意的', 'n.青铜色'])
print(cet_dic.items())
# dict_items([('bug', 'n.虫子;臭虫'), ('absent', 'a.不在意的'), ('bronze', 'n.青铜色')])

字典排序
字典无序,也没有排序方法!!!
可以用sorted(dic)函数对字典键、值或键值对进行排序

cet_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
print(sorted(cet_dic.keys()))  # ['absent', 'bronze', 'bug']
print(sorted(cet_dic.values()))  # ['a.不在意的', 'n.虫子;臭虫', 'n.青铜色']
print(sorted(cet_dic.items()))  # 用键做排序依据,对键值对进行排序,字典元素转元组类型,返回列表
# [('absent', 'a.不在意的'), ('bronze', 'n.青铜色'), ('bug', 'n.虫子;臭虫')]
print(sorted(cet_dic.items(), key=lambda x: x[1]))  # 用值做排序依据
# [('absent', 'a.不在意的'), ('bug', 'n.虫子;臭虫'), ('bronze', 'n.青铜色')]

小明同学在准备参加大学英语四六级考试,为了督促自己背单词,他决定自己写一个背单词的程序。
cet4.txt
cet6.txt

编程要求
根据提示,在右侧编辑器补充代码,读取数据集中的四级单词文件,以单词为键,以中文解释为值创建字典。输入一个正整数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.不列颠的,英联邦的')]

开始你的任务吧,祝你成功!

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137976398
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 在下面一行补充代码,创建一个空字典
    dic = {}                                        
    with open(file, 'r', encoding='utf-8') as data: 
        for x in data:                           
            word, trans = x.strip().split(maxsplit=1)
            dic.update({word:trans})    
        return dic
 
if __name__ == '__main__':
    filename = '/data/bigfiles/cet4.txt'
    n = int(input())                     # 输入一个正整数
    cet_dict = create_dict(filename)     # 调用函数,返回字典类型数据
    # 在下面补充语句,根据字典的键对字典进行排序,得到排序的列表,输出列表前n项
    print([x for x in sorted(cet_dict.items())][:n])

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

任务描述
本关任务:编写一个能将大学英语四级、六级词汇合并为一个字典的小程序。

相关知识
为了完成本关任务,你需要掌握:

  1. 合并字典

合并字典

  1. dic1.update(dic2):更新列表,将参数中的字典元素加入到字典cet_dic中
cet4_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的'}
cet6_dic = {'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
cet4_dic.update(cet6_dic)           # cet6_dic更新到cet4_dic中
print(cet4_dic)  # {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
  1. 字典合并运算"|"和字典更新运算"|="
cet4_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的'}
cet6_dic = {'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
cet_dic = cet4_dic | cet6_dic  # 合并字典返回新对象
print(cet_dic)  # {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
cet4_dic |= cet6_dic           # cet6_dic合并到cet4_dic中
print(cet4_dic)  # {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}

小明同学在准备参加大学英语四六级考试,为了督促自己背单词,他决定自己写一个背单词的程序。
cet4.txt
cet6.txt

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

  1. 读取cet4.txtcet6.txt,合并成一个字典(注:因测评需要,务必将cet6.txt中的单词合并到cet4.txt所在的字典中)。
  2. 输入一个正整数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.欧洲人')]

开始你的任务吧,祝你成功!

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137976398
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 补充你的代码
    dic = {}                                           
    with open(file, 'r', encoding='utf-8') as data: 
        for x in data:                              
            word, trans = x.strip().split(maxsplit=1) 
            dic.update({word:trans})    
    return dic
 
def merge_dic(file1, file2):
    """将读取两个文件中获得的字典合并为一个,返回合并后的字典"""
    # 补充你的代码
    return create_dict(file1)|create_dict(file2)
 
 
def sort_dic(cet_dic, n):
    """根据字典的键对字典进行排序,得到排序的列表,返回列表前n项"""
    # 补充你的代码
    return [i for i in sorted(cet_dict.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关:查单词输出中文释义

任务描述
本关任务:编写一个能查询单词中文释义的小程序。

相关知识
为了完成本关任务,你需要掌握:

  1. 获取字典值

获取字典值

  1. dic1[key]:在字典dic1中查询键为key的元素的值
cet_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
print(cet_dic['bug'])  # n.虫子;臭虫

键不存在时触发异常

cet_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
print(cet_dic['bag'])  # KeyError: 'bag'
  1. dic1.get(k[,default]) 字典dic中存在键为k的元素时,返回其值,否则返回default参数设定值。
    此方法无论键是否存在,都可以使用,且键不存在时可直接返回一个默认值,可简化程序,推荐使用。
cet_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
print(cet_dic.get('bug', '单词不存在'))  # n.虫子;臭虫
print(cet_dic.get('bag', '单词不存在'))  # 单词不存在

小明同学在准备参加大学英语四六级考试,为了督促自己背单词,他决定自己写一个背单词的程序。

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

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

测试输入:

merry

预期输出:

merry: a.欢乐的,愉快的

测试输入:

return

预期输出:

return: 单词不存在

开始你的任务吧,祝你成功!

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137976398
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 补充你的代码
    dic = {}                                                   # 创建空字典
    with open(file, 'r', encoding='utf-8') as data:    # 打开文件,以读模式创建文件对象
        for x in data:                                 # 遍历文件对象
            word, trans = x.strip().split(maxsplit=1)  
            dic.update({word:trans})    
    return dic
 
 
def merge_dic(file1, file2):
    """将读取两个文件中获得的字典合并为一个,返回合并后的字典"""
    # 补充你的代码
    return create_dict(file1)|create_dict(file2)
 
 
def translate(cet_dic, word):
    """接收两个参数,第一个是读文件创建的字典,第二个参数为要查询的单词,字符串
    根据文件创建的字典,从中查询单词word,
    如果查询单词存在,元组形式返回词与词的释义;
    如果查询不存在,返回'单词不存在'
    """
    # 补充你的代码
    return word, cet_dic.get(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关:删除字典中特定字母开头的单词

任务描述
本关任务:编写一个能删除字典中特定字母开头的单词的小程序。

相关知识
为了完成本关任务,你需要掌握:

  1. 删除字典元素

删除字典元素

  1. dic1.pop(key[,default]):删除字典dic1中键为key的元素
cet_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
cet_dic.pop('bug')  # 删除键为'bug'的元素
print(cet_dic)      # {'absent': 'a.不在意的', 'bronze': 'n.青铜色'}

key不存在时返回default:

cet_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
cet_dic.pop('bag', f'{"bag"}在字典中不存在')  # 删除键为'bug'的元素
print(cet_dic)      # {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}

无default且键不存在时触发异常

cet_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
cet_dic.pop('bag')  # 删除键为'bug'的元素
print(cet_dic)      # KeyError: 'bag'
  1. dic1.popitem():删除字典dic1末尾的一个元素
cet_dic = {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的', 'bronze': 'n.青铜色'}
cet_dic.popitem()  # 删除字典末尾一个元素
print(cet_dic)     # {'bug': 'n.虫子;臭虫', 'absent': 'a.不在意的'}
cet_dic.popitem()  # 删除字典末尾一个元素
print(cet_dic)     # {'bug': 'n.虫子;臭虫'}

小明同学在准备参加大学英语四六级考试,为了督促自己背单词,他决定自己写一个背单词的程序。

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

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

测试输入:

a

预期输出:

4918

开始你的任务吧,祝你成功!

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137976398
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 补充你的代码
    dic = {}                                            
    with open(file, 'r', encoding='utf-8') as data:
        for x in data:                              
            word, trans = x.strip().split(maxsplit=1) 
            dic.update({word:trans})    
    return dic
 
def merge_dic(file1, file2):
    """将读取两个文件中获得的字典合并为一个,返回合并后的字典"""
    # 补充你的代码
    return create_dict(file1)|create_dict(file2)
 
 
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关:单词英汉记忆训练

任务描述
本关任务:编写一个能提供基本的背单词功能的小程序。

相关知识
为了完成本关任务,你需要掌握:

  1. 字典元素筛选
  2. 字典增加元素
  3. 字典遍历
  4. 字典查询

小明同学在准备参加大学英语四六级考试,为了督促自己背单词,他决定自己写一个背单词的程序。

编程要求
根据提示,在右侧编辑器补充代码,读取数据集中的四级单和六级词文件,以单词为键,以中文解释为值,将两个文件中的数据创建为一个字典。
用户根据提示文字信息输入一个字母,用这个字母的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.斑马

开始你的任务吧,祝你成功!

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137976398
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
import random
 
def create_dict(file):
    """接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。
    多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,
    将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。
    返回字典。
    """
    # 补充你的代码
    dic = {}                                       
    with open(file, 'r', encoding='utf-8') as data: 
        for x in data:                                
            word, trans = x.strip().split(maxsplit=1)
            dic.update({word:trans})    
    return dic
 
 
 
def merge_dic(file1, file2):
    """将读取两个文件中获得的字典合并为一个,返回合并后的字典"""
    # 补充你的代码
    return create_dict(file1)|create_dict(file2)
 
 
def training(cet_dic, letter):
    """输入一个字母,返回以这个字母开头的词汇的字典(不区分大小写),用于单词记忆训练"""
    # 补充你的代码
    list1 = list(cet_dic.keys())
    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)                        # 调用函数进行训练

  • 32
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谛凌

本人水平有限,感谢您支持与指正

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值