第4关:体育收入排行2012-2019
100
- 任务要求
- 参考答案
- 重置记录
- 评论
- 关卡排行榜
任务描述
附件中文件为2012-2019年世界运动员收入排行榜,编码格式为UTF-8
。
文件内容及格式如下图所示:
其中pay是该运动员当年度的收入综合,salary是工资收入,endorsement是广告和其他收入。
pay的金额是salary+endorsement的和
请分析文件并读取数据,完成以下功能:
-
某年的收入排名前若干名选手 如果输入n是2012-19之间的年份,则可以输入整数k,输出n年的前k名排名信息。如果k大于当年排名运动员人数,则输出当年所有的信息。每行一名运动员信息,以' | '间隔该行各项信息。
-
某年属于某个运动项目的所有运动员信息,和收入总和 如果输入的是
sport
(不区分大小写),则可以继续输入一个年份201*
,输出一个当年排行中的运动项目菜单,按照字符串升序排列,格式见示例,再输入运动项目对应的数字来输出该项运动当年的运动员数据,每行一名运动员信息,以' | '间隔该行各项信息。最后输出该项运动n年的表中收入总和,格式为TOTAL: ${:.2f} M
-
如果输入不是年份或者
sport
(不区分大小写),输出Wrong Input
本题只保证测试用例中的年份均可以找到对应数据。
针对本文件,同学们也可以讨论和思考下,还可以做出哪些方面的数据统计。
答案如下:
def read_file():
with open('step5/2012-19sport.csv', 'r', encoding='utf-8') as data:
# ls1 = data.readline().strip().split(',')
data.readline()
ls2 = []
for line in data.readlines():
ls2.append(line.strip().split(','))
# print(ls1)
# print(ls2)
for i in range(len(ls2)):
ls2[i][0] = ls2[i][0].replace('#', '')
# print(ls2)
# print(ls1 + ls2)
return ls2
def fun1(year, ls):
k = int(input())
ls_one_year = []
for element in ls:
# print(element)
if element[6] == str(year):
ls_one_year.append(element)
for element in ls_one_year[:k]:
print(*element, sep=' | ')
def fun2(ls):
year = int(input())
ls_one_year = []
for item in ls:
if item[6] == str(year):
ls_one_year.append(item)
ls1 = sorted(list(set(item[5] for item in ls_one_year)))
for element in ls1:
print(f'{ls1.index(element) + 1}: {element}')
ls_key = [i for i in range(1, len(ls1) + 1)]
dt1 = dict(zip(ls_key, ls1))
key = int(input())
# print(dt1)
ls_sport = []
for element in ls_one_year:
if element[5] == dt1[key]:
ls_sport.append(element)
# print(ls_sport)
for element in ls_sport:
print(*element, sep=' | ')
ls_pay = []
for element in ls_sport:
ls_pay.append(float(element[2].replace('$', '').replace(' M', '')))
# print(ls_pay)
print('TOTAL: ${:.2f} M'.format(sum(ls_pay)))
if __name__ == '__main__':
ls_return = read_file()
option = input()
try:
option = int(option)
if 2012 <= option <= 2019:
fun1(option, ls_return)
else:
print('Wrong Input')
except Exception as e:
option = option.lower()
if option == 'sport':
fun2(ls_return)
else:
print('Wrong Input')