class BookManagers: def __init__(self): self.book_list = [] # 建立一个存储数据用的列表 self.apply = [] # 图书建购表 def show_borrowed_books(self): print('借阅图书信息') for book in self.book_list: if book.status == '借出': print(f'书籍名:{book.name}, 作者:{book.author}, 编码:{book.index}') def run(self, number): # 程序入口函数 if number == 1: while True: self.show_menu() # 显示功能菜单 menun_num = int(input("请输入您需要的功能序号:")) # 用户输入功能序号
时间: 2024-02-15 19:29:02 浏览: 20
这段代码是一个简单的图书管理系统的类,其中包括了两个列表,一个是存储图书信息的book_list,另一个是存储图书建购信息的apply。show_borrowed_books()函数用于展示当前被借出的图书信息,而run()函数是程序的入口函数,通过输入不同的功能序号来实现不同的功能。请问还有什么需要我解释的吗?
相关问题
class BookManagers: def __init__(self): self.book_list = [] # 建立一个存储数据用的列表 self.apply = [] # 图书建购表 def show_borrowed_books(self): print('借阅图书信息') for book in self.book_list: if book.status == '借出': print(f'书籍名:{book.name}, 作者:{book.author}, 编码:{book.index}')在此基础上增加借书与还书代码
你可以使用如下的代码来增加借书与还书的功能:
```python
class BookManagers:
def __init__(self):
self.book_list = [] # 建立一个存储数据用的列表
self.apply = [] # 图书建购表
def show_borrowed_books(self):
print('借阅图书信息')
for book in self.book_list:
if book.status == '借出':
print(f'书籍名:{book.name}, 作者:{book.author}, 编码:{book.index}')
def borrow_book(self, index):
book = self.find_book(index)
if book is not None:
if book.status == '借出':
print('此书已被借出')
else:
book.status = '借出'
print('借书成功')
else:
print('未找到该书')
def return_book(self, index):
book = self.find_book(index)
if book is not None:
if book.status == '借出':
book.status = '在库'
print('还书成功')
else:
print('此书未被借出')
else:
print('未找到该书')
def find_book(self, index):
for book in self.book_list:
if book.index == index:
return book
return None
```
其中,`borrow_book`和`return_book`方法分别用于借书和还书,`find_book`方法用于查找书籍。你可以根据需要调用这些方法来实现借书和还书的功能。
帮我把一下代码设置一个合理请求头,并加入一个延时import requests import os from bs4 import BeautifulSoup class NovelDownloader: def __init__(self, root_url): self.root_url = root_url self.book_list = [] self.chapter_list = [] def get_url(self, url): while True: try: res = requests.get(url) if res.status_code == 200: print("页面获取成功!") return res.text else: print("页面返回异常!", res.status_code) except: print("页面获取错误!") def get_book_list(self): res = self.get_url(self.root_url) html = BeautifulSoup(res, "html.parser") a_list = html.find_all("a", {"class": "name"}) for a in a_list: self.book_list.append(a["href"]) self.book_list = [self.root_url + i for i in self.book_list] self.book_list.remove('http://www.biquge5200.cc/') def get_chapter_list(self, url): res = self.get_url(url) html = BeautifulSoup(res, "html.parser") a_list = html.find_all("a", {"class": "chapter"}) for a in a_list: self.chapter_list.append((a["href"], a.text.replace("\n", ""))) def get_content(self, chapter): url = self.root_url + chapter[0] print(url) book_name = chapter[0].split("/")[1] print(book_name) if not os.path.exists(book_name): os.mkdir(book_name) res = self.get_url(url) html = BeautifulSoup(res, "html.parser") content = html.find("div", {"id": "content"}).text print(content) path = os.path.join(book_name, chapter[1]) with open(path, "w", encoding="utf8") as f: f.write(content) def main(self): self.get_book_list() for book in self.book_list: self.get_chapter_list(book) for chapter in self.chapter_list: self.get_content(chapter) if __name__ == '__main__': root_url = "http://www.biquge5200.cc/" nd = NovelDownloader(root_url) nd.main()
好的,我可以帮你添加一个合理的请求头和延时。在 `get_url` 方法中,你可以添加一个请求头字典,来模拟浏览器发送请求。同时,在每次请求后添加一个时间延时,避免频繁请求被网站屏蔽。
修改后的代码如下所示:
```python
import requests
import os
import time
from bs4 import BeautifulSoup
class NovelDownloader:
def __init__(self, root_url):
self.root_url = root_url
self.book_list = []
self.chapter_list = []
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
} # 添加请求头
def get_url(self, url):
while True:
try:
res = requests.get(url, headers=self.headers)
if res.status_code == 200:
print("页面获取成功!")
return res.text
else:
print("页面返回异常!", res.status_code)
except:
print("页面获取错误!")
time.sleep(1) # 添加延时
def get_book_list(self):
res = self.get_url(self.root_url)
html = BeautifulSoup(res, "html.parser")
a_list = html.find_all("a", {"class": "name"})
for a in a_list:
self.book_list.append(a["href"])
self.book_list = [self.root_url + i for i in self.book_list]
self.book_list.remove('http://www.biquge5200.cc/')
def get_chapter_list(self, url):
res = self.get_url(url)
html = BeautifulSoup(res, "html.parser")
a_list = html.find_all("a", {"class": "chapter"})
for a in a_list:
self.chapter_list.append((a["href"], a.text.replace("\n", "")))
def get_content(self, chapter):
url = self.root_url + chapter[0]
print(url)
book_name = chapter[0].split("/")[1]
print(book_name)
if not os.path.exists(book_name):
os.mkdir(book_name)
res = self.get_url(url)
html = BeautifulSoup(res, "html.parser")
content = html.find("div", {"id": "content"}).text
print(content)
path = os.path.join(book_name, chapter[1])
with open(path, "w", encoding="utf8") as f:
f.write(content)
def main(self):
self.get_book_list()
for book in self.book_list:
self.get_chapter_list(book)
for chapter in self.chapter_list:
self.get_content(chapter)
if __name__ == '__main__':
root_url = "http://www.biquge5200.cc/"
nd = NovelDownloader(root_url)
nd.main()
```
这样就可以更好地模拟浏览器发送请求,避免被网站屏蔽。另外,可以根据需要调整延时时间,以达到更好的效果。