Python习题(附答案)7集合与字典

头歌实践教学平台——​Python编程技术

集合与字典

第1关:创建客服电话字典

任务描述

本关任务:编写一个能创建客服电话字典的小程序。

相关知识

为了完成本关任务,你需要掌握:
1.读文件
2.构建字典类型数据

构建字典类型数据

以公司或单位为键,以电话号码为值创建字典。
1.用字典推导式创建字典
2.用给字典的键赋值的方法创建字典

customer service number.txt

中国网通,10060
中国电信,10000
中国联通,10010
中国移动,10086
国家邮政,11185
消费者投诉,12315
司法热线,12348
物价局举报,12358
技术局投诉,12365
地税纳税,12366
环境保护举报,12369
水上搜救,12395
烟草局投诉,96300
气象局,96121
森林火警,95119
太平洋保险,95500
深圳发展银行,95501
广发银行,95508
中国平安,95511
中国人寿保险,95519
泰康人寿保险,95522
浦发银行,95528
中国建设银行,95533
招商银行,95555
中信银行,95558
交通银行,95559
兴业银行,95561
中国银行,95566
民生银行,95568
华夏银行,95577
邮政储蓄银行,95580
中国工商银行,95588
供电业务,95598
中国农业银行,95599
上海银行,95594
光大银行,95595
北京银行,95526
南方航空,95539
山东航空,95369
春秋航空,95524
大连航空,95583
中国国际航空,95583
深圳航空,95080
厦门航空,95557
圆通,95554
中通,95311
申通,95543
顺丰,95338
韵达,95546
德邦,95353
苏宁,95315
百世汇通,95320
EMS,11183
邮政,11183

95电话是国家工业和信息化部直接管理审批,不属于当地电信运营商管理的特殊号码,以前主要是银行,保险等特殊单位的专用号码,95电话与400电话一样,可利用呼叫中心“技术集合”里的单项功能,为商家企业实现全国或本地统一号码接入,并实现IVR自动语音服务、智能话务分配、语音信箱及公共座席服务,快速搭建24小时客服中心,打造企业服务品牌,全面提升服务形象。除400、800的这些功能外,其相对于800、400更加强大,同时也是唯一可以外呼拨打的全国统一电话。
95全国统一号码是最稀缺资源,普通号码每个地区可以重复,而全国统一号码它没有区号,全国唯一,它在使用上无城市区域限制,企业一旦申请成功将是终生的号码。
举个典型的例子中国四大银行的呼叫中心号码为:中国银行(95566)、工商银行(95588)、农业银行(95599)、建设银行(95533),银行申请呼叫中心95号码有一点比较特殊就是银行的95号码可以打电话也可以发短信,而一般的公司企业申请95号码只能经营电话业务。

编程要求

“customer service number.txt”中包含一些单位的95开头的客服短号码和少量其他客服电话号,以单位名为键,以电话号为值构建字典并输出该字典的键值视图。

测试说明

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

测试输入:

预期输出:

dict_items([...('上海银行', '95594'), ('光大银行', '95595'), ('北京银行', '95526'), ('南方航空', '95539')...])

代码文件

def read_txt(file: str) -> dict:
    """参数为表示文件名的字符串,读取文件file中的数据。
    以公司名为键、电话号码为值构建包含各公司客服电话的字典,返回字典。
    """
    # 补充你的代码
    dic = {}
    with open(file, 'r', encoding='utf-8') as f:
        for x in f:                       # 遍历文件对象  
            x = x.strip().split(',', maxsplit=1)     # 每行根据空格切分为列表,只切分一次  
            dic.update({x[0]: x[1]})
    print(dic.items())  
 
 
if __name__ == '__main__':
    filename = '/data/bigfiles/customer service number.txt'
    phone_dic = read_txt(filename)  # 读文件返回字典
    # 补充你的代码输出字典视图

第2关:客服电话查询

任务描述

本关任务:编写一个能从客服电话字典中查询电话的小程序。

相关知识

为了完成本关任务,你需要掌握:
1.获取字典的值

字典查询

字典不能使用索引号查询
1.通过键访问其值
2.用字典方法get()获取值

customer service number.txt

95电话是国家工业和信息化部直接管理审批,不属于当地电信运营商管理的特殊号码,以前主要是银行,保险等特殊单位的专用号码,95电话与400电话一样,可利用呼叫中心“技术集合”里的单项功能,为商家企业实现全国或本地统一号码接入,并实现IVR自动语音服务、智能话务分配、语音信箱及公共座席服务,快速搭建24小时客服中心,打造企业服务品牌,全面提升服务形象。除400、800的这些功能外,其相对于800、400更加强大,同时也是唯一可以外呼拨打的全国统一电话。
95全国统一号码是最稀缺资源,普通号码每个地区可以重复,而全国统一号码它没有区号,全国唯一,它在使用上无城市区域限制,企业一旦申请成功将是终生的号码。
举个典型的例子中国四大银行的呼叫中心号码为:中国银行(95566)、工商银行(95588)、农业银行(95599)、建设银行(95533),银行申请呼叫中心95号码有一点比较特殊就是银行的95号码可以打电话也可以发短信,而一般的公司企业申请95号码只能经营电话业务。

编程要求

“customer service number.txt”中包含一些单位的95开头的客服短号码和少量其他客服电话号,以单位名为键,以电话号为值构建字典,用户输入一个公司名,输出该公司名和客服电话,公司不存在时,按示例输出。

测试说明

平台会对你编写的代码进行测试,输入输出参考示例:

示例输入:中国移动
示例输出:中国移动:10086

示例输入:中国顺丰
示例输出:中国顺丰:中国顺丰客服电话不存在

代码文件

def read_txt(file: str) -> dict:
    """参数为表示文件名的字符串,读取文件file中的数据,构建包含各公司客服电话的字典,公司名为键,电话号码为值,返回字典。"""
    # 补充你的代码
    dic = {}
    list1 =[]
    with open(file, 'r', encoding='utf-8') as f:
        for x in f:                       # 遍历文件对象  
            x = x.strip().split(',', maxsplit=1)     # 每行根据空格切分为列表,只切分一次  
            dic.update({x[0]: x[1]})    # 列表的两个元素作为字典的键和值加入字典中
        return dic
 
 
def query_get(company: str, tel_book: dict) -> str:
    """参数 company为表示公司名的字符串,参数 tel_book是字典。
    查询该公司的客服电话号码,返回“用户名:电话号码”的字符串。
    若公司不存在,则在电话号码位置替换为“***不存在”,***表示公司名
    """
    # 补充你的代码
    if company in phone_dic:
        return company + ':' + phone_dic[company]
    else:
        return company + ':' + company+'客服电话不存在'
 
if __name__ == '__main__':
    filename = '/data/bigfiles/customer service number.txt'
    phone_dic = read_txt(filename)    # 读文件到字典
    comp = input()                    # 输入公司名
    print(query_get(comp,phone_dic))  # 输出查询结果

第3关:电话簿更新

任务描述

本关任务:编写一个能更新客服电话字典的小程序。

相关知识

为了完成本关任务,你需要掌握:
1.更新字典的值

更新字典的值

1.通过键赋值
2.update()更新字典值
3.字典合并和更新运算符

customer service number.txt

95电话是国家工业和信息化部直接管理审批,不属于当地电信运营商管理的特殊号码,以前主要是银行,保险等特殊单位的专用号码,95电话与400电话一样,可利用呼叫中心“技术集合”里的单项功能,为商家企业实现全国或本地统一号码接入,并实现IVR自动语音服务、智能话务分配、语音信箱及公共座席服务,快速搭建24小时客服中心,打造企业服务品牌,全面提升服务形象。除400、800的这些功能外,其相对于800、400更加强大,同时也是唯一可以外呼拨打的全国统一电话。
95全国统一号码是最稀缺资源,普通号码每个地区可以重复,而全国统一号码它没有区号,全国唯一,它在使用上无城市区域限制,企业一旦申请成功将是终生的号码。
举个典型的例子中国四大银行的呼叫中心号码为:中国银行(95566)、工商银行(95588)、农业银行(95599)、建设银行(95533),银行申请呼叫中心95号码有一点比较特殊就是银行的95号码可以打电话也可以发短信,而一般的公司企业申请95号码只能经营电话业务。

编程要求

“customer service number.txt”中包含一些单位的95开头的客服短号码和少量其他客服电话号,以单位名为键,以电话号为值构建字典,用户输入一个公司名,当公司名存在时,先输出该公司名及电话,再输出提示信息“公司信息已存在,输入"Y"或"y"修改电话号码,其他字符退出”。再输入Y或y时,输出提示信息“请输入新的电话号码:”,当用户输入新的号码后,更新字典中的数据,并输出“成功更新****电话为*****”该公司名和客服电话;输入其他字符时,输出提示“放弃更新****电话”并退出。
公司不存在时,先输出提示信息“请输入电话号码:”,再将公司名为键,用户输入的电话为值的元素加入到字典中,再输出提示信息“成功添加****电话为*****”。

测试说明
平台会对你编写的代码进行测试,输入输出参考示例:

示例输入:中国移动
示例输出:中国移动:10086

示例输入:中国顺丰
示例输出:中国顺丰:中国顺丰客服电话不存在

代码文件

def read_txt(file: str) -> dict:
    """参数为表示文件名的字符串,读取文件file中的数据,构建包含各公司客服电话的字典,公司名为键,电话号码为值,返回字典。"""
    # 补充你的代码
    dic = {}                                    # 创建空字典  
    with open(filename, 'r', encoding='utf-8') as data:  
        for x in data:                          # 遍历文件对象  
            x = x.strip().split(',',maxsplit=1)     # 每行根据空格切分为列表,只切分一次  
            dic.update({x[0]: x[1]})    # 列表的两个元素作为字典的键和值加入字典中  
    return dic
 
def update_tel_book(company: str, tel_book: dict) -> None:
    """接受公司名与电话簿字典,若公司名存在,调用修改函数,否则调用插入函数
    无返回值"""
    if company in tel_book:
        print(modify_number(company, tel_book))
    else:
        print(add_number(company, tel_book))
 
 
def modify_number(company:str, tel_book:dict):
    """接受公司名与电话簿字典,输出提示:'姓名已存在,输入"Y"或"y"修改,其他字符退出'
    输入'Y'后再输入一个新电话号码,将用户的电话号码修改为新值,
    返回'成功修改****电话为*****';输入其他字符时返回'放弃更新****电话'并退出。
    """
    print(f'{company}电话为{tel_book[company]}')
    print('公司信息已存在,输入"Y"或"y"修改电话号码,其他字符退出')
    # 补充你的代码
    content = input()
    if content == ("Y" or "y"):
        print('请输入新的电话号码:')
        tel_add = input()
        phone_dic[company] = tel_add
        return f'成功更新{company}电话为{tel_add}'
    else:
        return f'放弃更新{company}电话'
 
 
def add_number(company, tel_book):
    """接受公司名和电话簿字典为参数,用户输入一个电话号码,为字典增加一个以公司名中键,以电话号为值的元素
    返回'成功添加{company}客服电话为{phone_number}'
    """
    print('请输入电话号码:')
    # 补充你的代码
    phone_number = input()
    phone_dic[company] = phone_number
    return f'成功添加{company}客服电话为{phone_number}'
 
 
 
if __name__ == '__main__':
    filename = '/data/bigfiles/customer service number.txt'
    phone_dic = read_txt(filename)
    comp = input()                    # 输入要修改信息或新增的公司名
    update_tel_book(comp, phone_dic)  # 更新字典中的数据

第4关:删除某公司电话

任务描述

本关任务:编写一个能删除一条客服电话的小程序。

相关知识

为了完成本关任务,你需要掌握:
1.删除字典的值

删除字典的值

1.pop(key)
2.del dic[key]

customer service number.txt

95电话是国家工业和信息化部直接管理审批,不属于当地电信运营商管理的特殊号码,以前主要是银行,保险等特殊单位的专用号码,95电话与400电话一样,可利用呼叫中心“技术集合”里的单项功能,为商家企业实现全国或本地统一号码接入,并实现IVR自动语音服务、智能话务分配、语音信箱及公共座席服务,快速搭建24小时客服中心,打造企业服务品牌,全面提升服务形象。除400、800的这些功能外,其相对于800、400更加强大,同时也是唯一可以外呼拨打的全国统一电话。
95全国统一号码是最稀缺资源,普通号码每个地区可以重复,而全国统一号码它没有区号,全国唯一,它在使用上无城市区域限制,企业一旦申请成功将是终生的号码。
举个典型的例子中国四大银行的呼叫中心号码为:中国银行(95566)、工商银行(95588)、农业银行(95599)、建设银行(95533),银行申请呼叫中心95号码有一点比较特殊就是银行的95号码可以打电话也可以发短信,而一般的公司企业申请95号码只能经营电话业务。

编程要求

“customer service number.txt”中包含一些单位的95开头的客服短号码和少量其他客服电话号,以单位名为键,以电话号为值构建字典,用户输入一个公司名,当公司名存在时,从字典中删除该公司的元素,返回提示信息“****电话*****成功删除”;公司名不存在时,返回“公司名“****”不存在”。

测试说明

平台会对你编写的代码进行测试,输入输出参考示例:

示例输入:中国电信
示例输出:中国电信电话10000成功删除

示例输入:中国电脑
示例输出:公司名“中国电脑”不存在

代码文件

def read_txt(file: str) -> dict:
    """参数为表示文件名的字符串,读取文件file中的数据,构建包含各公司客服电话的字典,公司名为键,电话号码为值,返回字典。"""
    # 补充你的代码
    dic = {}
    list1 =[]
    with open(file, 'r', encoding='utf-8') as f:
        for x in f:                       # 遍历文件对象  
            x = x.strip().split(',', maxsplit=1)     # 每行根据空格切分为列表,只切分一次  
            dic.update({x[0]: x[1]})    # 列表的两个元素作为字典的键和值加入字典中
        return dic
 
 
def del_number(company:str, tel_book:dict)->str:
    """参数 company表示公司名的字符串,参数 tel_book为通讯录字典。
    从字典中删除某公司的信息,删除成功返回提示信息“****电话*****成功删除”
    否则返回“公司名“****”不存在”
    """
    # 补充你的代码
    if company in phone_dic: #
        del_number = phone_dic[company]
        del phone_dic[company]
        return f'{company}电话{del_number}成功删除' 
    else:
        return f'公司名“{company}”不存在'
 
 
if __name__ == '__main__':
    filename = '/data/bigfiles/customer service number.txt'
    phone_dic = read_txt(filename)
    comp = input()                      # 输入要删除信息的公司名
    print(del_number(comp, phone_dic))  # 输出删除结果提示信息

第1关:数据统计

任务描述

输入两个整数,在这两个整数组成的闭区间范围内生成100个随机整数,并统计出现数据的次数,出现0次的数字不输出(而不是输出0)。为满足评测需要,程序必须使用seed函数将随机种子设为10,并使用randint函数生成随机数。

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

一行当中输入两个整数,以空格间隔。题目保证两个整数从小到大

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

按照生成随机数从小到大的顺序,每行输出一个生成的整数以及其出现的次数,以空格间隔。

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入:

3 5

输出:

3 36
4 39
5 25

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
平均代码量 10 行

代码文件

import random
a, b = eval(input().replace(' ', ','))
random.seed(10)
dic = {}
for each in range(100):
    num = random.randint(a, b)
    dic[num] = dic.get(num, 0) + 1
for key, value in sorted(dic.items(), key=lambda d:d[0]):
    print(key, value)

第1关:查询省会

任务描述

总理有诗云:两湖两广两河山,五江云贵福吉安,四西二宁青甘陕,还有内台北上天。中国各省、直辖市、自治区和特别行政区的字典数据如下: capitals = {‘湖南’:‘长沙’,‘湖北’:‘武汉’,‘广东’:‘广州’,‘广西’:‘南宁’,‘河北’:‘石家庄’,‘河南’:‘郑州’,‘山东’:‘济南’,‘山西’:‘太原’,‘江苏’:‘南京’,‘浙江’:‘杭州’,‘江西’:‘南昌’,‘黑龙江’:‘哈尔滨’,‘新疆’:‘乌鲁木齐’,‘云南’:‘昆明’,‘贵州’:‘贵阳’,‘福建’:‘福州’,‘吉林’:‘长春’,‘安徽’:‘合肥’,‘四川’:‘成都’,‘西藏’:‘拉萨’,‘宁夏’:‘银川’,‘辽宁’:‘沈阳’,‘青海’:‘西宁’,‘海南’:‘海口’,‘甘肃’:‘兰州’,‘陕西’:‘西安’,‘内蒙古’:‘呼和浩特’,‘台湾’:‘台北’,‘北京’:‘北京’,‘上海’:‘上海’,‘天津’:‘天津’,‘重庆’:‘重庆’,‘香港’:‘香港’,‘澳门’:‘澳门’} 设计程序,接收用户输入的省、直辖市、自治区和特别行政区名称,输出对应的省会名称,当输入错误时输出“输入错误”。程序可以重复接收用户输入,直接输入回车时退出程序。

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

一个或多个输入‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

每行输入一个省、直辖市、自治区或特别行政区名称‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

最后一行输入一个回车

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出对应的省会名称

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入:

新疆
北京

输出:

乌鲁木齐
北京

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪平均代码量 9 行

代码文件

capitals = {'湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁', '河北': '石家庄', '河南': '郑州', '山东': '济南', '山西': '太原', '江苏': '南京',
            '浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨', '新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州', '吉林': '长春',
            '安徽': '合肥', '四川': '成都', '西藏': '拉萨', '宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '海南': '海口', '甘肃': '兰州', '陕西': '西安',
            '内蒙古': '呼和浩特', '台湾': '台北', '北京': '北京', '上海': '上海', '天津': '天津', '重庆': '重庆', '香港': '香港', '澳门': '澳门'}
lis1 = []
lis2 = []
while True:
    city = input()
    if len(city) == 0:
        break
    else:
        lis1.append(city)
for i in lis1:
    if i in capitals:
        lis2.append(capitals[i])
    else:
        print('输入错误')
for j in lis2:
    print(j)

第1关:手机销售统计

任务描述

文件中包含有2018和2019手机销售榜单数据(市场份额百分数),请根据要求升序输出分析结果:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’1’时,以列表形式在两行中分别输出2019年和2018年上榜品牌‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’2’时,以列表形式输出2019年和2018年都上榜的品牌‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’3’时,以列表形式输出2019年和2018年上榜的所有品牌‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’4’时,以列表形式输出2019年新上榜品牌‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1.输入’5’时,以列表形式输出2019年新上榜和落榜品牌

示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入:5

输出:['中兴', '联想', '金立']
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
平均代码量 29 行

代码文件

# with open('sale2019.csv','r',encoding='utf-8') as data2019:

# with open('sale2018.csv','r',encoding='utf-8') as data2018:

with open('sale2019.csv','r',encoding='utf-8') as data2019:
    sale2019 = [line.strip().split(',')[0] for line in data2019]
with open('sale2018.csv','r',encoding='utf-8') as data2018:
    sale2018 = [line.strip().split(',')[0] for line in data2018]
n = input()
if n =='1':
    print(sorted(sale2019))
    print(sorted(sale2018))
if n =='2':
    print(sorted([x for x in sale2019 if x in sale2018]))
if n =='3':
    print(sorted(sale2019 + [x for x in sale2018 if x not in sale2019]))
if n =='4':
    print(sorted([x for x in sale2019 if x not in sale2018]))
if n =='5':
    print(sorted([x for x in (sale2019 + sale2018) if x not in[x for x in sale2019 if x in sale2018]]))

第1关:查找数列中重复数字

任务描述

在一个无序的整数序列中,存在多个重复的数据(出现次数超过1次),用列表的形式将这些重复的数据从小到大输出。

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

以空格分隔的若干个整数

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

按数值从小到大排列,列表形式,元素为整数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

如果没有找到重复的数,则输出空列表[]‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

本题部分用例有运算时间要求。

示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入:4 1 1 2 3 4

输出:[1, 4]
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
平均代码量 9 行

代码文件

nums = list(map(int,input().split()))
repeat_list = []
for i in set(nums):
    ret=nums.count(i)
    if ret > 1:
        repeat_list.append(i)
print(repeat_list)

第1关:字符串去重排序

任务描述

输入一个非空字符串,去除重复的字符后,从小到大排序输出为一个新字符串。

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

一个非空字符串

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

去重排序后的字符串

示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入:Life is short, you need Python!
输出:

!,LPdefhinorstuy
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪平均代码量 4 行

代码文件

n = input()
a = list(set((n)))
a.sort()
a = ''.join(a).strip()
print(a)

第1关:个人数据合并

任务描述

使用随机函数randint(),依次向二维列表A和B中增加元素,建立两个长度为5的二维列表A和B。两个列表包含的数据如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

A列表:包含子列表 [学号,p成绩,m成绩],学号为从1开始递增的正整数,成绩为0-100之间的随机整数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

B列表:包含子列表 [学号,q成绩],学号为从1开始递增的正整数,成绩为0-100之间的随机整数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

先需要将A,B两个列表数据进行合并,即将B列表中的‘q成绩’添加到A列表中的相同学号的子列表中。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入一个整数k,将B列表中的’q成绩’插入到A列表相同学号的子列表的k位置上。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

合并完成后,输出合并后的A列表。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

注意:为保证生成固定序列,本题需要使用同一个循环结构生成两个随机列表A和B,类似:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

for #######:
A列表添加 学号,p成绩,m成绩
B列表添加 学号,q成绩

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第一行输入s,随机种子‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第二行输入p,插入位置

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

合并后的A列表

示例

输入:

1
1

输出:

[[1, 97, 17, 72], [2, 15, 8, 32], [3, 57, 63, 97], [4, 48, 60, 83], [5, 12, 100, 26]]‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬平均代码量 13 行

代码文件

import random
 
random.seed(int(input()))
 
ls_a = []
ls_b = []
for i in range(5):
    ls_a.append([i+1, random.randint(0, 100), random.randint(0, 100)])
    ls_b.append([i+1, random.randint(0, 100)])
 
k = int(input())
for i in range(5):
    ls_a[i].insert(k, ls_b[i][1])
print(ls_a)

第1关:查找数字

任务描述

输入以空格分隔的一系列数字,要求其中只有一个数字出现奇数次,其他的数都出现偶数次。找到并输出这个出现次数为奇数的数字。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

本题所有用例保证满足题目要求。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

注意:本题部分用例有计算时间限制。

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入数字以空格间隔,换行表示结束‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

例:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

1 1 2 2 3 4 4 10 10

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

3

示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入:1 1 2 2 3 4 4 10 10

输出:3
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
平均代码量 5 行

代码文件

ls1 = list(map(int,input().split()))
for i in ls1[1:]:
    ls1[0] = ls1[0]^i
print(ls1[0])

第1关:大学排行榜分析

任务描述

本关任务:编写一个能进行大学排行榜分析的小程序。

相关知识

为了完成本关任务,你需要掌握:1.set() 函数。

set() 函数
描述

set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

set 语法:

class set([iterable])

参数说明:

iterable – 可迭代对象对象;

返回值

返回新的集合对象。

示例如下:

x = set('runoob')
y = set('google')
print(x)        #重复的被删除
print(y)        #重复的被删除
print(x&y)      #返回一个新的集合,包括同时在集合 x 和y中的共同元素。
print(x|y)      #返回一个新的集合,包括集合 x 和 y 中所有元素。
print(x^y)      #返回一个新的集合,包括集合 x 和 y 的非共同元素。
print(x-y)      #返回一个新的集合,包括在集合 x 中但不在集合 y 中的元素。

输出:

{'u', 'b', 'o', 'r', 'n'}
{'g', 'l', 'e', 'o'}
{'o'}
{'u', 'b', 'o', 'l', 'r', 'n', 'g', 'e'}
{'u', 'b', 'l', 'r', 'n', 'g', 'e'}
{'n', 'r', 'u', 'b'}

问题描述

题目

alumni.txt

1 北京大学 北京 100 8 世界一流大学
2 清华大学 北京 98.78 8 世界一流大学
3 复旦大学 上海 82.14 8 世界一流大学
4 浙江大学 浙江 81.98 8 世界一流大学
5 南京大学 江苏 81.43 8 世界一流大学
6 上海交通大学 上海 81.34 8 世界一流大学
7 华中科技大学 湖北 80.49 7 世界知名高水平大学
8 中国科学技术大学 安徽 80.44 8 世界一流大学
9 中国人民大学 北京 80.41 8 世界一流大学
10 天津大学 天津 80.38 7 世界知名高水平大学
10 武汉大学 湖北 80.38 7 世界知名高水平大学
12 南开大学 天津 79.28 7 世界知名高水平大学
13 山东大学 山东 79.19 7 世界知名高水平大学
14 中山大学 广东 78.75 7 世界知名高水平大学
15 西安交通大学 陕西 76.48 7 世界知名高水平大学
16 哈尔滨工业大学 黑龙江 76.23 7 世界知名高水平大学
17 东南大学 江苏 75.79 7 世界知名高水平大学
18 四川大学 四川 75.73 7 世界知名高水平大学
19 吉林大学 吉林 75.64 7 世界知名高水平大学
20 同济大学 上海 75.33 7 世界知名高水平大学
21 北京航空航天大学 北京 74.67 7 世界知名高水平大学
22 北京师范大学 北京 74.28 7 世界知名高水平大学
23 厦门大学 福建 73.76 7 世界知名高水平大学
24 西北工业大学 陕西 73.52 6 世界高水平大学
25 中南大学 湖南 73.5 7 世界知名高水平大学
26 东北大学 辽宁 72.05 6 世界高水平大学
27 大连理工大学 辽宁 72.02 6 世界高水平大学
27 湖南大学 湖南 72.02 6 世界高水平大学
29 华南理工大学 广东 71.99 6 世界高水平大学
30 北京理工大学 北京 69.32 6 世界高水平大学
31 兰州大学 甘肃 68.46 6 世界高水平大学
32 华东师范大学 上海 68.29 6 世界高水平大学
33 中国农业大学 北京 68.08 6 世界高水平大学
34 电子科技大学 四川 67.57 6 世界高水平大学
35 重庆大学 重庆 67.47 6 世界高水平大学
36 华中农业大学 湖北 67.14 6 世界高水平大学
37 河海大学 江苏 67.05 6 世界高水平大学
38 南京农业大学 江苏 66.97 5 中国一流大学
39 华中师范大学 湖北 66.91 5 中国一流大学
40 郑州大学 河南 66.9 5 中国一流大学
41 中国海洋大学 山东 66.85 6 世界高水平大学
41 西安电子科技大学 陕西 66.85 5 中国一流大学
43 北京科技大学 北京 66.8 5 中国一流大学
43 南京理工大学 江苏 66.8 5 中国一流大学
45 北京交通大学 北京 66.67 5 中国一流大学
46 华东理工大学 上海 66.47 5 中国一流大学
47 北京邮电大学 北京 66.42 6 世界高水平大学
48 合肥工业大学 安徽 66.38 5 中国一流大学
49 南昌大学 江西 66.32 5 中国一流大学
50 北京协和医学院 北京 6 世界高水平大学
50 南京航空航天大学 江苏 66.29 5 中国一流大学
51 武汉理工大学 湖北 66.28 5 中国一流大学
52 西南交通大学 四川 66.07 5 中国一流大学
53 暨南大学 广东 66.03 5 中国一流大学
54 西南大学 重庆 66.01 5 中国一流大学
55 西北农林科技大学 陕西 65.93 5 中国一流大学
56 东华大学 上海 65.87 5 中国一流大学
57 西北大学 陕西 65.8 5 中国一流大学
58 中南财经政法大学 湖北 65.56 6 世界高水平大学
59 苏州大学 江苏 65.26 5 中国一流大学
60 中国政法大学 北京 6 世界高水平大学
60 北京化工大学 北京 65.17 5 中国一流大学
61 昆明理工大学 云南 65.16 5 中国一流大学
62 南京师范大学 江苏 65.12 5 中国一流大学
63 上海财经大学 上海 65.04 6 世界高水平大学
64 湖南师范大学 湖南 65.01 5 中国一流大学
65 中国传媒大学 北京 6 世界高水平大学
65 云南大学 云南 65 5 中国一流大学
65 上海大学 上海 65 4 中国高水平大学
67 哈尔滨工程大学 黑龙江 64.97 5 中国一流大学
68 福州大学 福建 64.96 4 中国高水平大学
69 河南大学 河南 64.95 4 中国高水平大学
70 华南农业大学 广东 64.91 5 中国一流大学
71 东北师范大学 吉林 64.9 5 中国一流大学
71 北京工业大学 北京 64.9 4 中国高水平大学
73 中国地质大学(武汉) 湖北 64.89 6 世界高水平大学
73 华南师范大学 广东 64.89 5 中国一流大学
75 宁波大学 浙江 64.88 4 中国高水平大学
76 燕山大学 河北 64.87 5 中国一流大学
76 中国石油大学(北京) 北京 64.87 5 中国一流大学
78 太原理工大学 山西 64.86 5 中国一流大学
79 上海理工大学 上海 64.85 4 中国高水平大学
80 中国矿业大学 江苏 64.84 6 世界高水平大学
80 陕西师范大学 陕西 64.84 5 中国一流大学
80 江南大学 江苏 64.84 5 中国一流大学
80 首都师范大学 北京 64.84 4 中国高水平大学
84 浙江工业大学 浙江 64.83 4 中国高水平大学
85 中国石油大学(华东) 山东 64.82 6 世界高水平大学
85 北京中医药大学 北京 6 世界高水平大学
86 浙江师范大学 浙江 64.81 4 中国高水平大学
87 河北大学 河北 64.78 4 中国高水平大学
88 对外经济贸易大学 北京 64.75 5 中国一流大学
89 扬州大学 江苏 64.74 4 中国高水平大学
90 北京外国语大学 北京 6 世界高水平大学
90 江苏大学 江苏 64.73 4 中国高水平大学
91 杭州电子科技大学 浙江 64.69 4 中国高水平大学
91 辽宁大学 辽宁 64.69 4 中国高水平大学
93 中央民族大学 北京 64.68 6 世界高水平大学
94 山西大学 山西 64.67 4 中国高水平大学
94 南京工业大学 江苏 64.67 4 中国高水平大学
95 南方医科大学 广东 5 中国一流大学
96 齐鲁工业大学 山东 64.66 4 中国高水平大学
97 广东工业大学 广东 64.65 4 中国高水平大学
98 河南科技大学 河南 64.64 4 中国高水平大学
99 山东师范大学 山东 64.63 4 中国高水平大学
100 河北工业大学 河北 64.62 4 中国高水平大学

soft.txt

1 清华大学
2 北京大学
3 浙江大学
4 上海交通大学
5 南京大学
6 复旦大学
7 中国科学技术大学
8 华中科技大学
9 武汉大学
10 中山大学
11 西安交通大学
12 哈尔滨工业大学
13 北京航空航天大学
14 北京师范大学
15 同济大学
16 四川大学
17 东南大学
18 中国人民大学
19 南开大学
20 北京理工大学
21 天津大学
22 山东大学
23 厦门大学
23 北京协和医学院
24 吉林大学
25 华南理工大学
26 中南大学
27 大连理工大学
28 西北工业大学
29 华东师范大学
30 中国农业大学
30 上海财经大学
31 湖南大学
32 电子科技大学
33 北京科技大学
34 重庆大学
35 南京航空航天大学
36 南京理工大学
36 中央财经大学
37 东北大学
38 苏州大学
39 华中农业大学
40 兰州大学
40 香港中文大学(深圳)
41 西安电子科技大学
41 对外经济贸易大学
42 华东理工大学
43 北京交通大学
44 华中师范大学
45 上海大学
46 南方科技大学
46 首都医科大学
47 南京农业大学
47 南京医科大学
48 暨南大学
49 中国海洋大学
50 南京师范大学
51 哈尔滨工程大学
52 武汉理工大学
52 中南财经政法大学
53 西南交通大学
54 中国地质大学(武汉)
55 北京邮电大学
55 中国政法大学
56 东北师范大学
57 中国石油大学(北京)
58 河海大学
59 江南大学
59 中国医科大学
60 中国矿业大学
61 西北大学
61 上海纽约大学
62 上海科技大学
62 天津医科大学
63 北京工业大学
64 北京化工大学
65 深圳大学
66 西南大学
67 华南师范大学
67 西南财经大学
68 西北农林科技大学
68 宁波诺丁汉大学
69 扬州大学
70 中国地质大学(北京)
70 北京外国语大学
70 东北财经大学
71 中国矿业大学(北京)
72 江苏大学
73 东华大学
74 中国石油大学(华东)
75 宁波大学
75 南方医科大学
76 福州大学
77 北京林业大学
78 合肥工业大学
78 哈尔滨医科大学
78 中国传媒大学
79 陕西师范大学
80 华北电力大学
81 浙江工业大学
82 南京工业大学
83 郑州大学
84 云南大学
85 湖南师范大学
85 首都师范大学
87 南昌大学
87 上海外国语大学
87 上海中医药大学
88 华南农业大学
89 上海理工大学
90 安徽大学
91 长安大学
91 中央民族大学
92 燕山大学
93 南京信息工程大学
93 中国药科大学
94 湖北大学
95 广东工业大学
96 南京邮电大学
97 河南大学
98 上海师范大学
99 杭州电子科技大学
99 西交利物浦大学
100 广州大学

大学排名没有绝对的公正与权威,文件(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
10 

预期输出:

两榜单中均名列前10的学校:
['上海交通大学', '**大学', '**大学', '**大学',  '**大学',  '**大学',  '**大学',  '**大学',  '**大学',  '**大学'] 

测试输入:

2
10 

预期输出:

两榜单名列前10的所有学校:
['上海交通大学', '**大学', '**大学', '**大学',  '**大学',  '**大学',  '**大学',  '**大学',  '**大学',  '**大学', ..........] 

测试输入:

3
10 

预期输出:

alumni中名列前10,soft中未进前10的学校:
['上海交通大学', '**大学', '**大学', '**大学',  '**大学',  '**大学',  '**大学',  '**大学',  '**大学',  '**大学', ..........] 

测试输入:

4
10 

预期输出:

不同时出现在两个榜单前10的学校:
['上海交通大学', '**大学', '**大学', '**大学',  '**大学',  '**大学',  '**大学',  '**大学',  '**大学',  '**大学', ..........] 

代码文件

def read_file(file,m):
    """读文件中的学校名到列表中,返回排名前m学校集合"""
    ########## Begin ##########
    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
    ########## End ##########


def either_in_top(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在这两个排行榜中均名列前m的学校名,按照学校名称排序,
    返回排序后的列表
    """
    ########## Begin ##########
    result=[]
    for i in range(len(alumni)):
        if alumni[i] in soft:#如果同时在两个表中都有这个学校
            result.append(alumni[i])
    result.sort()#升序排序
    return result
    ########## End ##########




def all_in_top(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在两个榜单中名列前m的所有学校名,按照学校名称排序,
    返回排序后的列表
    """
    ########## Begin ##########
    result=[]
    result.extend(alumni)#列表合并alumni
    result.extend(soft)#列表合并soft
    result=list(set(result))#列表去重
    result.sort()#升序排序
    return result
    ########## End ##########


def only_alumni(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在alumni榜单中名列前10但soft榜单中未进前10的学校名,
    按照学校名称排序,返回排序后的列表
    """
    ########## Begin ##########
    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
    ########## End ##########


def only_once(alumni, soft):
    """接收两个排行榜前m高校名字集合,
    获得在alumni和soft榜单中名列前10,但不同时出现在两个榜单的学校名,
    按照学校名称排序,返回排序后的列表
    """
    ########## Begin ##########
    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
    ########## End ##########


def select_first(n):
    """
    接收一个字符
    判断这个字符是否属于 1234 中的一个字符,如果不是则输出 Wrong Option
    如果是,则调用 select_again() 函数
    """
    ########## Begin ##########  
    if n not in ['1', '2', '3', '4']:
        print('Wrong Option')
    else:
        select_again(n)
    ########## End ##########

def select_again(n):
    m=int(input())  
    alumni_set = read_file('step1/alumni.txt',m)  
    soft_set = read_file('step1/soft.txt',m)
    """
    接收一个字符
    按左侧 任务要求->问题描述->输入输出 的规则判断 n ,并吊用上面定义的相应的函数
    按左侧 任务要求->测试说明->预期输出 的样例进行输出
    """  
    ########## Begin ##########  
    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)
    ########## End ##########
    
if __name__ == '__main__':  
    n=input()  
    select_first(n)

答案不唯一,欢迎评论探讨

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值