news 2026/5/16 17:42:45

问题求解葡萄酒

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
问题求解葡萄酒

第1关:葡萄酒评论分析报告——国家列表和平均分

import pandas as pd # 定义符号常量,用于索引,使之具有清晰的语义 COUNTRY = 1 POINTS = 3 def csv_to_ls(file): """接收文件名为参数,用pandas读取文件中的数据,数据部分转为二维列表类型,返回二维列表。""" wine_list = pd.read_csv(file).values.tolist() return wine_list def country_ls(wine_list): """接收列表格式的葡萄酒数据为参数,略过标题行,返回不重复的国家名列表,按字母表升序排序, 若国家名数据缺失,略过该条数据,返回值中不包含空字符串元素。 @参数 wine_list:葡萄酒数据,列表类型 """ countries = set() for row in wine_list[1:]: country = row[COUNTRY] if pd.notna(country) and country.strip() != "": countries.add(country) return sorted(countries) def avg_point(wine_list, country): """接收列表格式的葡萄酒数据和国家名列表为参数,计算每个国家的葡萄酒的平均得分, 返回值为国家名和得分的列表。 @参数 wine_list:葡萄酒数据,列表类型 @参数 country:国家名,列表类型 """ result=[] for c in country: total=0 count=0 for row in wine_list[1:]: if row[COUNTRY]==c: total += row[POINTS] count += 1 avg = round(total/count,2) result.append([c,float(avg)]) return result 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)

第2关:葡萄酒评论分析报告——平均分排序和评分最高

import pandas as pd import math # 定义符号常量,用于索引,使之具有清晰的语义 NUMBER = 0 COUNTRY = 1 DESCRIPTION = 2 POINTS = 3 PRICE = 4 def csv_to_ls(file): """接收文件名为参数,用pandas读取文件中的数据,数据部分转为二维列表类型,返回二维列表。""" wine_list = pd.read_csv(file).values.tolist() return wine_list def country_ls(wine_list): """接收列表格式的葡萄酒数据为参数,略过标题行,返回不重复的国家名列表,按字母表升序排序, 若国家名数据缺失,略过该条数据,返回值中不包含空字符串元素。 @参数 wine_list:葡萄酒数据,列表类型 """ country_list = [] for x in wine_list: if x[COUNTRY] not in country_list: country_list.append(x[COUNTRY]) country_list.sort() # print(country_list) return country_list def avg_point_sort(wine_list, country): """接收列表格式的葡萄酒数据和国家名列表为参数,计算每个国家的葡萄酒的平均得分, 返回值为国家名和得分的列表,按评分由高到低降序排列。 @参数 wine_list:葡萄酒数据,列表类型 @参数 country:国家名,列表类型 """ result = [] for c in country: total = 0 count = 0 for row in wine_list[1:]: if row[COUNTRY] == c: total += row[POINTS] count += 1 if count == 0: avg = 0.0 else: avg = round(total / count, 2) result.append([c, avg]) result.sort(key=lambda x: x[1], reverse=True) return result def top_10_point(wine_list): """接收列表格式的葡萄酒数据参数,返回评分最高的十款葡萄酒的编号、出产国、评分和价格,按评 分降序输出。 需要注意的是评分可能有缺失值,此时该数据为nan if math.isnan(x) == False可用于判定x的值是不是nan nan的数据类型是float,不可以直接用字符串判定方法。 @参数 wine_list:葡萄酒数据,列表类型 """ valid_wines = [] for row in wine_list[1:]: if math.isnan(row[POINTS]): continue number = row[NUMBER] country = row[COUNTRY] points = row[POINTS] price = row[PRICE] valid_wines.append([number, country, points, price]) valid_wines.sort(key=lambda x: x[2], reverse=True) return valid_wines[:10] def judge(txt): """接收一个字符串为参数,根据参数值调用不同函数完成任务""" filename = 'data/winemag-data.csv' wine = csv_to_ls(filename) country = country_ls(wine) if txt == '平均分排序': print(avg_point_sort(wine, country)) # 每个国家的葡萄酒的平均得分降序输出 elif txt == '评分最高': print(top_10_point(wine)) # 评分最高的十款葡萄酒的编号、出产国、评分和价格,按评分降序输出 else: print('输入错误') if __name__ == '__main__': text = input() judge(text)

第3关:葡萄酒评论分析报告——价格最高和葡萄酒评分

import pandas as pd import math NUMBER = 0 COUNTRY = 1 POINTS = 3 PRICE = 4 def csv_to_ls(file): return pd.read_csv(file).values.tolist() def top_20_price(wine_list): valid = [r for r in wine_list if not math.isnan(r[PRICE])] valid.sort(key=lambda x: x[PRICE], reverse=True) return [[int(r[NUMBER]), r[COUNTRY], int(r[POINTS]), r[PRICE]] for r in valid[:20]] def amount_of_point(wine_list): cnt = {} for r in wine_list: p = r[POINTS] if not math.isnan(p): p = int(p) cnt[p] = cnt.get(p, 0) + 1 return [[k, cnt[k]] for k in sorted(cnt.keys())] def most_of_point(amount_of_points): return max(amount_of_points, key=lambda x: x[1]) def avg_price_of_most_point(wine_list, most_of_points): score = most_of_points[0] valid = [ r for r in wine_list if (not math.isnan(r[POINTS]) and int(r[POINTS]) == score and not math.isnan(r[PRICE])) ] return round(sum(r[PRICE] for r in valid) / len(valid), 2) def judge(txt): filename = 'data/winemag-data.csv' wine = csv_to_ls(filename) if txt == '价格最高': print(top_20_price(wine)) elif txt == '葡萄酒评分': amount_point = amount_of_point(wine) print(amount_point) most_point = most_of_point(amount_point) print(most_point) print(avg_price_of_most_point(wine, most_point)) else: print('输入错误') if __name__ == '__main__': text = input() judge(text)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 17:40:04

Pearcleaner终极指南:如何彻底清理Mac残留文件的完整教程

Pearcleaner终极指南:如何彻底清理Mac残留文件的完整教程 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 还在为Mac存储空间不足而烦恼吗&#x…

作者头像 李华
网站建设 2026/5/16 17:39:35

企业内训场景下利用Taotoken实现安全可控的AI能力开放

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内训场景下利用Taotoken实现安全可控的AI能力开放 在组织面向开发者的AI技术内训时,一个常见的挑战是如何为学员提…

作者头像 李华
网站建设 2026/5/16 17:39:02

项目介绍 基于java+vue的医院挂号预约系统设计与实现(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢

基于javavue的医院挂号预约系统设计与实现的详细项目实例 请注意此篇内容只是一个项目介绍 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序,GUI设计和代码详解) 医院挂号预约系统是智慧医疗建…

作者头像 李华
网站建设 2026/5/16 17:36:06

RK3576 音视频网络传输总结(RTP / RTSP / UDP / H265)

📺 B站 嵌入式孙老师:博主个人介绍 📘 博主书籍-京东购买链接*:Yocto项目实战教程 📘 加博主微信,进技术交流群: jerrydev RK3576 音视频网络传输总结(RTP / RTSP / UDP / H265&am…

作者头像 李华