头歌7.1 大学排行榜分析(project)

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

相关知识
为了完成本关任务,你需要掌握: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
soft.txt
大学排名没有绝对的公正与权威,文件(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

答案:

def read_file(file,m):

    """读文件中的学校名到列表中,返回排名前m学校集合"""

    ########## Begin ##########

    ls=[]

    with open(file,"r",encoding="utf_8") as data:

        for line in data:

            ls.append(line.split()[1])

        return(ls[:m])

    ########## End ##########


 

def either_in_top(alumni, soft):

    """接收两个排行榜前m高校名字集合,

    获得在这两个排行榜中均名列前m的学校名,按照学校名称排序,

    返回排序后的列表

    """

    ########## Begin ##########

    return alumni & soft

    ########## End ##########




 

def all_in_top(alumni, soft):

    """接收两个排行榜前m高校名字集合,

    获得在两个榜单中名列前m的所有学校名,按照学校名称排序,

    返回排序后的列表

    """

    ########## Begin ##########

    ########## End ##########

    return alumni|soft

def only_alumni(alumni, soft):

    """接收两个排行榜前m高校名字集合,

    获得在alumni榜单中名列前m但soft榜单中未进前m的学校名,

    按照学校名称排序,返回排序后的列表

    """

    ########## Begin ##########

    return alumni-soft

    ########## End ##########


 

def only_once(alumni, soft):

    """接收两个排行榜前m高校名字集合,

    获得在alumni和soft榜单中名列前m,但不同时出现在两个榜单的学校名,

    按照学校名称排序,返回排序后的列表

    """

    ########## Begin ##########

    return alumni^soft

    ########## End ##########


 

def select_first(n):

    """

    接收一个字符

    判断这个字符是否属于 1234 中的一个字符,如果不是则输出 Wrong Option

    如果是,则调用 select_again() 函数

    """

    ########## Begin ##########  

    if n in '1234':

        select_again(n)

    else:

        print("Wrong Option")

    ########## End ##########

def select_again(n):

    """

    接收一个字符

    按左侧 任务要求->问题描述->输入输出 的规则判断 n ,并吊用上面定义的相应的函数

    按左侧 任务要求->测试说明->预期输出 的样例进行输出

    """  

    m=int(input())  

    alumni_set = set(read_file('step1/alumni.txt',m))

    soft_set = set(read_file('step1/soft.txt',m))

    ########## Begin ##########  

    if n=='1':

        print("两榜单中均名列前{}的学校:".format(m))

        print(sorted(list(either_in_top(alumni_set,soft_set))))

    elif n=='2':

        print("两榜单名列前{}的所有学校:".format(m))

        print(sorted(list(all_in_top(alumni_set,soft_set))))

    elif n=='3':

        print("alumni中名列前{},soft中未进前{}的学校:".format(m,m))

        print(sorted(list(only_alumni(alumni_set,soft_set))))

    elif n=='4':

        print("不同时出现在两个榜单前{}的学校:".format(m))

        print(sorted(list(only_once(alumni_set,soft_set))))

    ########## End ##########

   

   

if __name__ == '__main__':  

    n=input()  

    select_first(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值