集合与字典的概念与使用-课后作业
一、单项选择题
1、S和T是两个集合,哪个选项对S^T的描述是正确的?
-
A S和T的并运算,包括在集合S和T中的所有元素
-
B S和T的差运算,包括在集合S但不在T中的元素
-
C S和T的交运算,包括同时在集合S和T中的元素
-
D S和T的补运算,包括集合S和T中的非相同元素
【答案】D
【解析】暂无解析
2、字典d={‘abc’:123, ‘def’:456, ‘ghi’:789},len(d)的结果是
-
A 9
-
B 12
-
C 3
-
D 6
【答案】C
【解析】暂无解析
3、S和T是两个集合,对S&T的描述正确的是
-
A S和T的差运算,包括在集合S但不在T中的元素
-
B S和T的并运算,包括在集合S和T中的所有元素
-
C S和T的补运算,包括集合S和T中的非相同元素
-
D S和T的交运算,包括同时在集合S和T中的元素
【答案】D
【解析】暂无解析
4、S和T是两个集合,对S|T的描述正确的是
-
A S和T的补运算,包括集合S和T中的非相同元素
-
B S和T的并运算,包括在集合S和T中的所有元素
-
C S和T的交运算,包括同时在集合S和T中的元素
-
D S和T的差运算,包括在集合S但不在T中的元素
【答案】B
【解析】暂无解析
5、下面代码的输出结果是
>>> s = set()
>> type(s)
-
A <class ‘tuple’>
-
B <class ‘list’>
-
C <class ‘set’>
-
D <class ‘dict’>
【答案】C
【解析】暂无解析
6、关于Python组合数据类型,以下选项中描述错误的是
-
A 序列类型是二维元素向量,元素之间存在先后关系,通过序号访问
-
B Python的str、tuple和list类型都属于序列类型
-
C Python组合数据类型能够将多个同类型或不同类型的数据组织起来,通过单一的表示使数据操作更有序、更容易
-
D 组合数据类型可以分为3类:序列类型、集合类型和映射类型
【答案】A
【解析】暂无解析
二、程序设计题
1、字典 I
类型:Python 组合数据类型
d
是一个字典,内容如下:
d = {123:"123", 456:"456", 789:"789"}
请补充如下代码,将字典 d
中所有键以列表形式输出
d = {123:"123", 456:"456", 789:"789"}
print(___①___)
**示例1:**
输入:无
输出:"[123,456,789]"
代码:
# -*- coding = utf-8 -*-
# @Author:为一道彩虹if __name__ == '__main__':d = {123: "123",456: "456",789: "789"}print(list(d.keys()))
2、字典 II
类型:Python 组合数据类型
输出字典 fruits
中键值最大的键值对。请完善代码。
fruits = {"apple":10,"mango":12,"durian":20,"banana":5}
m = 'apple'
for key in fruits.keys():
#此段代码请完善
print('{}:{}'.format(m,fruits[m]))
**示例1:**
输入:无
输出:"durian:20"
代码:
# -*- coding = utf-8 -*-
# @Author:为一道彩虹if __name__ == '__main__':fruits = {"apple": 10,"mango": 12,"durian": 20,"banana": 5}# 使用max函数找到具有最大值的键,根据对应的值来比较# key参数指定了用于比较的函数,这里使用fruits.get获取对应键的值m = max(fruits, key=fruits.get)# 输出最大值对应的键和值print('{}:{}'.format(m, fruits[m]))
3、大学排行榜分析
类型:字典
描述
大学排名没有绝对的公正与权威,附件(alumni.txt, soft.txt)中为按照不同评价体系给出的国内大学前100名排行,对比两个排行榜单前m的学校的上榜情况,分析不同排行榜排名的差异。
根据输入,输出以下内容:
第一行输入1,第二行输入m,输出在alumni.txt和soft.txt榜单中均在前m个记录的大学,按照学校名称升序。
第一行输入2,第二行输入m,输出在alumni.txt或者soft.txt榜单中前m个记录的所有大学,按照学校名称升序。
第一行输入3,第二行输入m,输出出现在榜单alumni.txt中前m个记录但未出现在榜单soft.txt前m个记录中的大学,按照学校名称升序。
第一行输入4,第二行输入m,输出没有同时出现在榜单alumni.txt前m个记录和榜单soft.txt前m个记录的大学,按照学校名称升序。
第一行输入其他数据,则直接输出‘Wrong Option’
示例 1
输入:
1
10
输出:
两榜单中均名列前10的学校:
['上海交通大学', '**大学', '**大学', '**大学', '**大学', '**大学', '**大学', '**大学', '**大学', '**大学']
示例 2
输入:
2
10
输出:
两榜单名列前10的所有学校:
['上海交通大学', '**大学', '**大学', '**大学', '**大学', '**大学', '**大学', '**大学', '**大学', '**大学', ..........]
示例 3
输入:
3
10
输出:
alumni中名列前10,soft中未进前10的学校:
['中国人民大学', .............................]
示例 4
输入
4
10
输出:
不同时出现在两个榜单前10的学校:
['中国人民大学', .............................]
代码:
# -*- coding = utf-8 -*-
# @Author:为一道彩虹def read_file(file,m):"""读文件中的学校名到列表中,返回前m个记录的学校集合"""f = open(file, 'r',encoding='utf-8')lines=[]for i in range(m):line=f.readline().strip("\n")lines.append(line.split()[1])#把学校添加列表return linesdef either_in_top(alumni, soft):"""接收两个排行榜前m高校名字集合,获得在这两个排行榜中均在前m个记录的学校名,按照学校名称排序,返回排序后的列表"""result=[]for i in range(len(alumni)):if alumni[i] in soft:#如果同时在两个表中都有这个学校result.append(alumni[i])result.sort()#升序排序return resultdef all_in_top(alumni, soft):"""接收两个排行榜前m高校名字集合,获得在两个榜单中名列前m的所有学校名,按照学校名称排序,返回排序后的列表"""result=[]result.extend(alumni)#列表合并alumniresult.extend(soft)#列表合并softresult=list(set(result))#列表去重result.sort()#升序排序return resultdef only_alumni(alumni, soft):"""接收两个排行榜前m高校名字集合,获得在alumni榜单中名列前m但soft榜单中未进前m的学校名,按照学校名称排序,返回排序后的列表"""result=[]for i in range(len(alumni)):if alumni[i] in soft:continueelse:#如果在alumni榜单中名列前m但soft榜单中未进前m的学校名result.append(alumni[i])result.sort()#升序排序return resultdef only_once(alumni, soft):"""接收两个排行榜前m高校名字集合,获得在alumni和soft榜单中名列前m,但不同时出现在两个榜单的学校名,按照学校名称排序,返回排序后的列表"""result=[]for i in range(len(alumni)):if alumni[i] in soft:continueelse:#如果在alumni榜单中名列前m但soft榜单中未进前m的学校名result.append(alumni[i])for i in range(len(soft)):if soft[i] in alumni:continueelse:#如果在soft榜单中名列前m但alumni榜单中未进前m的学校名result.append(soft[i])result.sort()#升序排序return resultdef judge(n):if n in '1234':m=int(input())alumni_set = read_file('./alumni.txt',m)soft_set = read_file('./soft.txt',m)if n=='1':either_rank = either_in_top(alumni_set, soft_set)print(f'两榜单中均名列前{m}的学校:')print(either_rank)elif n=='2':all_rank = all_in_top(alumni_set, soft_set)print(f'两榜单名列前{m}的所有学校:')print(all_rank)elif n=='3':only_in_alumni_rank = only_alumni(alumni_set, soft_set)print(f'alumni中名列前{m},soft中未进前{m}的学校:')print(only_in_alumni_rank)elif n=='4':alumni_soft_rank = only_once(alumni_set, soft_set)print(f'不同时出现在两个榜单前{m}的学校:')print(alumni_soft_rank)else:print('Wrong Option')if __name__ == '__main__':num = input()judge(num)
4、简易英汉字典
类型:字典
描述
文件dict.txt里存储了英语单词及其中文释义,单词与释义间保证用空格分隔,需要注意的是释义中可能还有空格存在。文件内容形如:
above prep.在...之上,高于
above-mentioned adj.上述的
abreast adv.并肩,并列
abridge v.省略,摘要
abroad adv.国外,海外
all adj.所有的 n.一切
live v.居住,生存 adj.活的
运行程序时先输出:
载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”
输入’1’时,完成问题1,输入’2’时完成问题2,输入其他数据时,输出 '输入错误,请重新运行程序!'
问题1:
连续读入多个单词,输出单词的释义,当单词在词典中不存在时,输出’这个词我不明白’。直接输入回车时退出查询。
问题2:
输入英文句子,输出英文句子中每个单词的中文释义,每行一个单词。可连续输入句子,输入一句翻译一句,直接输入回车时退出查询。单词与释义间用一个空格分隔,当单词在词典中不存在时,输出’这个词我不明白’。
注意:句子中若存在’s 则用 is 替换,n’t 用 not 替换。
使用题目给出的编程模板,实现上述两个问题。
要求读入1,则实现问题1(连续查单词的释义);
读入2,则实现问题2(连续读入英文句子并逐一输出句子里单词和释义。
输出单词时,所有字母均转换为小写输出,若该单词有多个词性,不改动文件里释义的格式,直接输出。
示例 1
输入:
1
All
woo
wool输出:
载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”
1
请输入查询的单词:All
all adj.所有的 n.一切
请输入查询的单词:woo
woo 这个词我不明白
请输入查询的单词:wool
wool n.羊毛,毛线
请输入查询的单词:
查询结束,正在退出...
示例2
输入:
2
To be or not to be, that's a question.
输出:
载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”
2
请输入查询的句子:To be or not to be, that's a question.
to prep.向,到
be v.是,存在
or conj.或者,即,否则
not adv.不
to prep.向,到
be v.是,存在
that adj.那,那个 adv.那么
is 这个词我不明白
a 一个
question n.问题,疑问 v.询问
请输入查询的句子:
查询结束,正在退出...
示例3
输入:
5
输出:
载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”
输入错误,请重新运行程序!
代码:
# -*- coding = utf-8 -*-
# @Author:为一道彩虹
import stringdef create_dict(filename):"""接收表示文件名的字符串参数,读文件中的单词及释义,以单词为键,其他部分为值创建字典。多个释义间可能是逗号或空格分隔,但单词与第一个释义间至少有一个空格,将文件每一行根据空格切分一次,切分结果分别作为键和值创新字典。返回字典。"""word_dic = {}ls = []with open(filename, "r", encoding='UTF-8') as f:# encoding='UTF-8'防止编码问题错误for line in f.readlines():# readlines表示读取所有行line = line.strip('\n').replace("]", " ") # 去掉列表中每一个元素的换行符。此外还要replace因为真的是天坑,给我们的文件中 thursday ]n.星期四 这个单词有个“]”干扰line = line.split(" ") # 分割成列表# print(line)word_dic[line[0]] = line[1]#把这一行内容加入字典return word_dicdef translate(dic, word):"""接收两个参数,第一个是读文件创建的字典,第二个参数为要查询的单词,字符串根据文件创建的字典,从中查询单词word,如果查询单词存在,元组形式返回词与词的释义;如果查询不存在,返回'这个词我不明白'"""word=word.lower() #小写if dic.get(word, '这个词我不明白') != '这个词我不明白':return word, dic.get(word, '这个词我不明白')else:return word,'这个词我不明白'def sentence_to_words():"""调用此函数时,先输出提示信息'请输入查询的句子:'用户输入欲翻译的句子若输入非空时,先将"n't"替换为 ' not'、"'s"替换为 ' is',再将标点符号替换为空格。根据空格将句子切分为单词的列表,调用translate逐个单词进行翻译。用户可重复多次输入,每输入一名翻译一句,若直接输入回车时,输出'查询结束,正在退出...'。然后结束程序。"""s = input("请输入查询的句子:")while (s != ""):s=s.replace(".", " ").replace(", ", " ").replace("'s", " is").replace("n't"," not").split(" ")#分割和替换for i in s:#如果说分割出了空的字符串,不进行判断直接跳过if i=="":continuegetWord=translate(word_dic, i)print(getWord[0],getWord[1])s = input("请输入查询的句子:")print('查询结束,正在退出...')def translate_word():"""调用此函数时,先输出提示信息:'请输入查询的单词:'用户可循环输入欲翻译的单词,若直接输入回车时,输出'查询结束,正在退出...'。输入非空时输出翻译结果"""s = input("请输入查询的单词:")while (s != ""):print(translate(word_dic, s)[0],translate(word_dic, s)[1])s = input("请输入查询的单词:")print('查询结束,正在退出...')if __name__ == '__main__':file = './dict.txt' # 表示文件名的字符串,表示位于当前路径下的'dict.txt'文件word_dic = create_dict(file) # 调用函数返回字典类型的数据print('载入字典数据成功!查询单词请输入“1”,查询句子请输入“2”')choice = input() # 输入操作选项if choice == '1':translate_word() # 翻译单词elif choice == '2':sentence_to_words() # 翻译句子else:print('输入错误,请重新运行程序!')
5、《沉默的羔羊》之最多单词
描述
附件是《沉默的羔羊》中文版内容,请读入内容,分词后输出长度大于2且最多的单词。
如果存在多个单词出现频率一致,请输出按照Unicode排序后最大的单词。
输入格式
文件
输出格式
字符串
输入输出示例
仅提供一个输出示范样例。
输入 | 输出 | |
---|---|---|
示例 1 | 无 | 羔羊 |
代码:
# -*- coding = utf-8 -*-
# @Author:为一道彩虹
import jiebaif __name__ == '__main__':txt = open("沉默的羔羊.txt", encoding='utf-8').read()words = jieba.lcut(txt) # 精确模式分词,返回一个列表类型d = {} # 建立一个空字典,用来存放键值对数据for word in words:d[word] = d.get(word, 0) + 1 # 如果这个词语(键)在字典中,其值+1,不在则赋以0maxc = 0maxw = ""for key in d:if d[key] > maxc and len(key) > 2:maxc = d[key] # 次数maxw = key # 单词if d[key] == maxc and len(key) > 2 and key > maxw: # 出现频率一致,按照Unicode排序maxw = keyprint(maxw)
先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!