使用用def函数并且,导入文档的时候不知道该如何在前面加上序列。为读过的书显示,读过的书前面没有
你题目的解答代码如下:
#-*- 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()
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
可以参考下这个源码:https://github.com/knarfeh/Simple_EReader
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!