图书数据分析(D)【Python习题】(保姆级图文+实现代码)

23 篇文章 192 订阅


主要内容是校设课程的习题和课外学习的一些习题。

欢迎关注 『Python习题』 系列,持续更新中
欢迎关注 『Python习题』 系列,持续更新中

题目

描述‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

读取附件中的图书数据信息,并按照下列要求对数据进行统计分析(文件编码为GBK)‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

文件包含信息格式:编号,书名,出版社,现价,原价,评论数,推荐指数‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

其中评论数形式为’1290021条评论’,书名可能包含书的简单描述,形如’雪落香杉树(福克纳奖得主,全球畅销500万册)'。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

要求:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入一个字符串‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入是’record’,统计输出图书数据的总数量,格式见示例‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入是’rank’,需要再输入一个书籍编号,分别输出编号对应的书籍信息(编号,书名,出版社,现价,原价,评论数,推荐指数),格式见示例‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入是’mincomment’,输出评论数最少的10本书的书名和评论数,按评论数量升序输出,格式见示例‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入是’maxname’,需要再输入一个数值n,按书名长度降序输出,输出书名最长的n本书的书名。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入其他信息时,输出’无数据’


思路

根据输入的关键词分别执行不同的函数:

  • 注意要大小写的问题,建议都转成大写或是小写好判断
  • 如果类似maxname需要二次输入数字,那么在判断if下面新增一个input输入参数

代码

def maxname(n):  # 输出名字最长的十本书,长度相同以现价从高到低排序
    ls.sort(key=lambda x: (len(x[1]), eval(x[3])), reverse=True)
    for i in ls[:n]:
        print(i[1])


def namesort2():  # 输出名字最短的十本书,长度相同以原价从低到高排序
    ls.sort(key=lambda x: (len(x[1]), eval(x[4])))
    for i in ls[:10]:
        print(i[1], len(i[1]), i[4], sep='\n')


def priceNow():  # 现价最高和最低
    l = sorted(ls, key=lambda x: eval(x[3]), reverse=True)
    for i in l[0][:-3]:
        print(i)
    for i in l[-1][:-3]:
        print(i)


def priceOrgin():  # 原价最高和最低
    l = sorted(ls, key=lambda x: eval(x[3]), reverse=True)
    for i in l[0][:-3]:
        print(i)
    for i in l[-1][:-3]:
        print(i)


def number():
    print(len(ls))


def maxcomment():  # 评论数量多的书籍前10
    l = sorted(ls, key=lambda x: eval(x[-2][:-3]), reverse=True)
    for i in l[:10]:
        print(i[1], i[-2])


def mincomment():  # 评论数量少的书籍前10
    l = sorted(ls, key=lambda x: eval(x[-2][:-3]))
    for i in l[:10]:
        print(i[1], i[-2])


def rank():
    n = input()
    for i in ls:
        if n == i[0]:
            for j in i:
                print(j)
            break


with open('CBOOK.csv', 'r', encoding='GBK') as f:
    ls = []
    for i in f.readlines()[1:]:
        ls.append(i.strip().split(','))

c = input().lower()
if c == 'record':
    number()
elif c == 'rank':
    rank()
elif c == 'maxname':
    n=eval(input())
    maxname(n)
elif c == 'sname':
    namesort2()
elif c == 'nprice':
    priceNow()
elif c == 'oprice':
    priceOrgin()
elif c == 'maxcomment':
    maxcomment()
elif c == 'mincomment':
    mincomment()
else:
    print('无数据')

实现效果

在这里插入图片描述


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的Python习题!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2022 mzh

Crated:2022-3-1

欢迎关注 『Python习题』 系列,持续更新中
欢迎关注 『Python习题』 系列,持续更新中

【更多内容敬请期待】


```python import csv # 读取文件,返回列表 def read_csv(): data = [] with open('CBOOK.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: data.append(row) return data # 统计图书数量 def count_books(): data = read_csv() return len(data) # 根据编号查找图书信息 def search_book_by_id(book_id): data = read_csv() for row in data: if row[0] == book_id: return row return None # 统计评论数量最多的10本书 def max_comment(): data = read_csv() sorted_data = sorted(data, key=lambda x: int(x[5].split('条评论')[0]), reverse=True)[:10] result = [] for row in sorted_data: result.append([row[1], row[5].split('条评论')[0]]) return result # 统计书名最长的n本书 def max_name(n): data = read_csv() sorted_data = sorted(data, key=lambda x: len(x[1]), reverse=True)[:n] result = [] for row in sorted_data: result.append(row[1]) return result # 根据用户输入进行不同的统计分析 def analyze_data(input_str): if input_str == 'record': return f'图书数据总数量为:{count_books()}' elif input_str.startswith('rank'): book_id = input_str.split(' ')[-1] book_info = search_book_by_id(book_id) if book_info: return f'编号:{book_info[0]}, 书名:{book_info[1]}, 出版社:{book_info[2]}, 现价:{book_info[3]}, 原价:{book_info[4]}, 评论数:{book_info[5]}, 推荐指数:{book_info[6]}' else: return '无数据' elif input_str == 'maxcomment': result = max_comment() if result: output_str = '评论数量最多的10本书为:\n' for row in result: output_str += f'书名:{row[0]}, 评论数:{row[1]}\n' return output_str else: return '无数据' elif input_str.startswith('maxname'): n = int(input_str.split(' ')[-1]) result = max_name(n) if result: output_str = f'书名最长的{n}本书为:\n' for book_name in result: output_str += f'{book_name}\n' return output_str else: return '无数据' else: return '无数据' # 测试 print(analyze_data('record')) print(analyze_data('rank 12345')) print(analyze_data('maxcomment')) print(analyze_data('maxname 5')) print(analyze_data('test')) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值