python书籍管理

使用用def函数并且,导入文档的时候不知道该如何在前面加上序列。为读过的书显示,读过的书前面没有

img

你题目的解答代码如下:

#-*- coding:utf-8 -*-

import csv

class System():
    def __init__(self):
        self.data = []
        self.load()
        while True:
            s = self.menu().lower()
            if s=="a":
                self.dis()
            elif s=="b":
                self.add()
            elif s=="c":
                self.ctp()
            elif s=="d":
                self.save()
                break

    def load(self):
        try:
            with open("data.csv","r",newline="") as fileObj:
                self.data = list(csv.DictReader(fileObj))
            for d in self.data:
                d['页数'] = int(d['页数'])
                d['已读页数'] = int(d['已读页数'])
        except Exception:
            self.data = []

    def save(self):
        head = self.data[0].keys()
        with open("data.csv","w",newline="") as fileObj:
            wr = csv.DictWriter(fileObj,head)
            wr.writeheader()
            wr.writerows(self.data)

    def menu(self):
        print("********** 阅读器 *************")
        print("\tA列出所有书籍")
        print("\tB添加新书籍")
        print("\tC标记书籍为完成")
        print("\tD结束")
        print("***********************************")
        return input("请输入 A~D 选择功能并按回车:")

    def inputDsta(self):
        return {
            "名称": input("输入名称:"),
            "作者": input("输入作者:"),
            "页数": int(input("输入页数:")),
            "已读页数": 0
        }

    def inputID(self,t):
        while True:
            try:
                i = int(input(t))-1
                if 0 <= i < len(self.data):
                    return i
                else:
                    print("输入id超出范围,请重新输入。")
            except ValueError:
                print("输入错误,请重新输入。")

    def dis(self):
        if len(self.data)==0:
            print("还没有书籍")
            return

        print("id\t名称\t作者\t页数\t已读页数")
        for i,d in enumerate(self.data):
            print(f"{i+1}\t{'*' if d['页数']<=d['已读页数'] else ''}{d['名称']}\t{d['作者']}\t{d['页数']}\t{d['已读页数']}")
        while True:
            i = self.inputID("请输入要阅读的书籍id:")
            n = int(input("请输入阅读的页数:"))
            if 0 < n <= self.data[i]['页数'] - self.data[i]['已读页数']:
                self.data[i]['已读页数'] += n
                print(f"已阅读到{self.data[i]['已读页数']}页")
            else:
                print("输入的页数错误")
            if input("是否继续阅读?(Y/N)").lower()=="n":
                break

    def add(self):
        self.data.append(self.inputDsta())

    def ctp(self):
        i = self.inputID("请输入要标记为完成的书籍id:")
        self.data[i]['已读页数'] = self.data[i]['页数']

sys = System()

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

可以参考下这个源码:https://github.com/knarfeh/Simple_EReader

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632