附件中文件为2012-2019年世界运动员收入排行榜
文件内容及格式如下图所示:
请分析文件并读取数据,完成以下功能:
本题只保证测试用例中的年份均可以找到对应数据。
针对本文件,同学们也可以讨论和思考下,还可以做出哪些方面的数据统计。
输入:
2020
输出:
Wrong Input
输入:
SPORT
2019
9
输出:
1: Auto Racing
2: Baseball
3: Basketball
4: Boxing
5: Cricket
6: Football
7: Golf
8: Mixed Martial Arts
9: Soccer
10: Tennis
9 #输入:再输入运动项目对应的数字9后的输出
1 | Lionel Messi | $127 M | $92 M | $35 M | Soccer | 2019
2 | Cristiano Ronaldo | $109 M | $65 M | $44 M | Soccer | 2019
3 | Neymar | $105 M | $75 M | $30 M | Soccer | 2019
44 | Paul Pogba | $33 M | $29 M | $4 M | Soccer | 2019
46 | Andres Iniesta | $32.5 M | $30 M | $2.5 M | Soccer | 2019
53 | Alexis Sánchez | $30.8 M | $28.3 M | $2.5 M | Soccer | 2019
55 | Kylian Mbappe | $30.6 M | $26.6 M | $4 M | Soccer | 2019
57 | Mesut Ozil | $30.2 M | $23.7 M | $6.5 M | Soccer | 2019
66 | Oscar | $29 M | $27 M | $2 M | Soccer | 2019
75 | Antoine Griezmann | $27.7 M | $23.2 M | $4.5 M | Soccer | 2019
79 | Gareth Bale | $27.1 M | $20.6 M | $6.5 M | Soccer | 2019
98 | Mohamed Salah | $25.1 M | $16.1 M | $9 M | Soccer | 2019
TOTAL: $607.00 M
输入:
2019
5
输出:
1 | Lionel Messi | $127 M | $92 M | $35 M | Soccer | 2019
2 | Cristiano Ronaldo | $109 M | $65 M | $44 M | Soccer | 2019
3 | Neymar | $105 M | $75 M | $30 M | Soccer | 2019
4 | Canelo Alvarez | $94 M | $92 M | $2 M | Boxing | 2019
5 | Roger Federer | $93.4 M | $7.4 M | $86 M | Tennis | 2019
#fopen()读取文件做二维列表l,格式为:
#[['Rank', 'Name', 'Pay', 'Salary/Winnings', 'Endorsements', 'Sport', 'Year'],
# ['1', 'Lionel Messi', '$127 M', '$92 M', '$35 M', 'Soccer', '2019']
# ['2', 'Cristiano Ronaldo', '$109 M', '$65 M', '$44 M', 'Soccer', '2019'], ...]
def fopen():
l=[]
with open('2012-19sport.csv','r',encoding='UTF-8') as f:
for i in f.readlines():
l.append(i.strip().split(','))
for i in l:
i[0]=i[0].strip('#')
return l
#sportclass()获得排行中所有的运动类别,返回排序列表
def sportclass(lt):
s=set()
for i in lt[1:]:
s.add(i[-2])
return sorted(s)
lt=fopen()
c=input() #输入选项
if c.isdigit() and 2012<=eval(c)<=2019: #如果输入的是年份,继续输入需要显示的n名运动员
n=int(input())
if n>100: #如果超过100,输出所有当年信息
n=100
ln=[]
for i in lt[1:]:
if i[-1]==c:
ln.append(i)
for i in ln[:n]:
print(' | '.join(i))
elif c.lower()=='sport': #如果输入sport, 输出所有运动选项并编号,并统计n年的该运动板块总收入
d={} #字典存放键值对,选项:运动类别
n = input() # 年份
ln=[]
for i in lt[1:]:
if i[-1] == n:
ln.append(i)
lsc=sportclass(ln)
for i,j in enumerate(lsc):
print('{}: {}'.format(i+1,j))
d[i+1]=j
k=input() #输入运动选项
s=0
for i in lt[1:]:
if i[-1]==n and i[-2]==d[int(k)]:
print(' | '.join(i))
s+=eval(i[2][1:-1])
print('TOTAL: ${:.2f} M'.format(s))
else:
print('Wrong Input')
本人写的代码:
with open('2012-19sport.csv', 'r', encoding='utf-8') as f:
data = [p.strip().split(',') for p in f.readlines()]
for i in data:
i[0] = i[0].strip('#')
n = input()
if n.isdigit() and 2012 <= int(n) <= 2019:
data = [p for p in data if p[-1] == n]
k = int(input())
if k > len(data):
k = len(data)
for person in data[:k]:
print('{} | {} | {} | {} | {} | {} | {}'.format(person[0], person[1], person[2], person[3], person[4], person[5], person[6]))
elif n.lower() == 'sport':
year = input()
race = list(set([person[-2] for person in data if person[-1] == year]))
race.sort()
race = dict(zip([i for i in range(1, len(race)+1)], race))
for key, value in race.items():
print('{}: {}'.format(key, value))
num = int(input())
data = [person for person in data if person[-1] == year and person[-2] == race.get(num)]
tot = 0
for person in data:
print('{} | {} | {} | {} | {} | {} | {}'.format(person[0], person[1], person[2], person[3], person[4], person[5], person[6]))
tot += eval(person[2].split()[0].split('$')[1])
print('TOTAL: ${:.2f} M'.format(tot))
else:
print('Wrong Input')
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务