集合与字典的概念与使用-课后作业
一、单项选择题
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 lines
def 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 result
def all_in_top(alumni, soft):
"""接收两个排行榜前m高校名字集合,
获得在两个榜单中名列前m的所有学校名,按照学校名称排序,
返回排序后的列表
"""
result=[]
result.extend(alumni)#列表合并alumni
result.extend(soft)#列表合并soft
result=list(set(result))#列表去重
result.sort()#升序排序
return result
def only_alumni(alumni, soft):
"""接收两个排行榜前m高校名字集合,
获得在alumni榜单中名列前m但soft榜单中未进前m的学校名,
按照学校名称排序,返回排序后的列表
"""
result=[]
for i in range(len(alumni)):
if alumni[i] in soft:
continue
else:#如果在alumni榜单中名列前m但soft榜单中未进前m的学校名
result.append(alumni[i])
result.sort()#升序排序
return result
def only_once(alumni, soft):
"""接收两个排行榜前m高校名字集合,
获得在alumni和soft榜单中名列前m,但不同时出现在两个榜单的学校名,
按照学校名称排序,返回排序后的列表
"""
result=[]
for i in range(len(alumni)):
if alumni[i] in soft:
continue
else:#如果在alumni榜单中名列前m但soft榜单中未进前m的学校名
result.append(alumni[i])
for i in range(len(soft)):
if soft[i] in alumni:
continue
else:#如果在soft榜单中名列前m但alumni榜单中未进前m的学校名
result.append(soft[i])
result.sort()#升序排序
return result
def 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 string
def 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_dic
def 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=="":
continue
getWord=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 jieba
if __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,不在则赋以0
maxc = 0
maxw = ""
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 = key
print(maxw)
先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!