这道题居然是多关卡
只写了一题
import pandas as pd
# 定义符号常量,用于索引,使之具有清晰的语义
COUNTRY = 1
POINTS = 3
def csv_to_ls(file):
"""接收文件名为参数,逐行读取文件中的数据,根据逗号切分每行数据为列表类型,
作为二维列表的一个元素,返回二维列表。
@参数 file:文件名,字符串类型
"""
#####################Begin#####################################
# 此处去掉注释符号“#”并补充你的代码
ls=[]
with open(file,"r",encoding = 'UTF-8') as fp:
for i in fp:
ls.append(i.strip().split(","))
ls.pop(0)
return ls
#####################End#####################################
def country_ls(wine_list):
"""接收列表格式的葡萄酒数据为参数,略过标题行,返回不重复的国家名列表,按字母表升序排序,
若国家名数据缺失,略过该条数据,返回值中不包含空字符串元素。
@参数 wine_list:葡萄酒数据,列表类型
"""
#####################Begin#####################################
coun_ls=[ i[COUNTRY] for i in wine_list]
coun_ls=list(set(coun_ls))
return sorted(coun_ls)
#####################End#####################################
def avg_point(wine_list, country):
"""接收列表格式的葡萄酒数据和国家名列表为参数,计算每个国家的葡萄酒的平均得分,
返回值为国家名和得分的列表。
@参数 wine_list:葡萄酒数据,列表类型
@参数 country:国家名,列表类型
"""
#####################Begin#####################################
ls=[]
for coun in country:
l=[float(i[-3]) for i in wine_list if i[COUNTRY]==coun]
ls.append( [coun,round( sum(l)/len(l), 2)] )
return ls
#####################End#####################################
def judge(txt):
"""接收一个字符串为参数,根据参数值调用不同函数完成任务"""
filename = 'data/winemag-data.csv'
wine = csv_to_ls(filename)
country = country_ls(wine)
if txt == '国家名列表':
print(country)
elif txt == '平均分':
print(avg_point(wine, country)) # 每个国家的葡萄酒的平均得分
else:
print('输入错误')
if __name__ == '__main__':
text = input()
judge(text)