使用上下文管理器with open('2019Charity.csv','r',encoding='UTF-8') as f打开文件 使用列表推导式将文件读成二维列表,并去除列表索引为0的元素(文件标题行) ls=[line.strip().split(',') for line in f][1:] 输入n,根据n值构造分支结构 n为‘total’(不区分大小写),直接遍历列表ls,对其‘现金捐赠总额(万元)‘值(注意,列表中的值为字符串,累加时需转换为整数)进行累加。循环结束后,按要求格式输出累加结果(也可考虑使用推导式从ls中所有元素中提取‘现金捐赠总额(万元)‘值转换为整数,放入一个列表后,用sum求和)如果输入为1-100之间的排名编号(n.isdigit() and 1<=eval(n)<=100),遍历列表ls,若某元素的排名值等于输入n,则输出该元素所有信息(可考虑使用join函数处理)。注意,有并列排名时,所有排名相等的都要输出 如果输入为排行榜中企业总部(省份)的名称 先用集合推导式获取列表中所有的总部(省份)值去重后的结果({i[3] for i in ls}),然后判断输入是否在集合中 遍历列表ls,若某元素的总部(省份)等于输入n,则输出该元素的‘排名,姓名,企业简称,总部(省份)’信息(可考虑使用切片结合join函数处理) 如果非以上输入,输出’No Record‘
时间: 2024-01-06 12:07:12 浏览: 33
以下是代码实现:
```python
with open('2019Charity.csv','r',encoding='UTF-8') as f:
ls=[line.strip().split(',') for line in f][1:]
n = input("请输入查询条件:")
if n.lower() == 'total':
total_donation = sum(int(item[5]) for item in ls)
print('现金捐赠总额(万元)为:', total_donation)
elif n.isdigit() and 1 <= int(n) <= 100:
for item in ls:
if int(item[0]) == int(n):
print(','.join(item))
elif n in {item[3] for item in ls}:
for item in ls:
if item[3] == n:
print(','.join(item[:4]))
else:
print('No Record')
```
首先使用上下文管理器打开文件,将文件内容读入二维列表 `ls`。然后根据输入的 `n` 值进行不同的操作。如果 `n` 为 `total`,则遍历列表 `ls`,将每个元素中的 `现金捐赠总额(万元)` 字段转换为整数并累加,最后输出累加结果。如果 `n` 是一个排名编号,遍历列表 `ls`,找到排名值等于 `n` 的元素,并输出该元素的所有信息。如果 `n` 是一个总部(省份)名称,先使用集合推导式获取列表中所有的总部(省份)值去重后的结果,然后遍历列表 `ls`,找到总部(省份)等于 `n` 的元素,并输出该元素的排名、姓名、企业简称、总部(省份)信息。如果 `n` 不是以上情况,则输出 `No Record`。