Python类内函数调用问题:实现书籍借出移除与重复借阅提示
解决Python图书馆书籍重复借阅的问题
需求说明
- 仅
displaybooks函数展示的书籍可被借出 - 书籍已被借出时,需输出
{bookname}NA/already taken
现有问题
当前代码中,重复借阅同一本书时,两次都会显示借阅成功,不符合预期。例如借阅"secret"两次,两次都输出secret is issued for you,而第二次应该输出secretNA/already taken。
现有代码
class Library: def __init__(self, listBooks): self.books = listBooks def displaybooks(self): for book in self.books: print(book) def borrowbooks(self, bookname): if bookname not in self.books: print(bookname + "NA/already taken") else: print(bookname + " is issued for you") # def deletebooksfromdisplay(self,bookname): # self.books.remove(bookname) class Student: def requestbooks(self): self.book = input("Enter name of the book you want to borrow: ") return self.book if __name__ == "__main__": mylib = Library( ["invention", "rich&poor", "macroeconomics", "secret"]) student = Student() print("""CHOOSE WHAT YOU WANT TO DO:- 1. Listing all books 2. Borrow books 3. Exit """) while (True): try: usr_response = int(input("Enter your choice: ")) if usr_response == 1: mylib.displaybooks() elif usr_response == 2: mylib.borrowbooks(student.requestbooks()) elif usr_response == 3: print("THANK YOU ! \n") exit() break else: print("INVAILD INPUT! \n") except Exception as e: #catch errors print(f"{e}---> INVALID INPUT! \n")
当前错误输出
CHOOSE WHAT YOU WANT TO DO:- 1. Listing all books 2. Borrow books 3. Exit Enter your choice: 1 invention rich&poor macroeconomics secret Enter your choice: 2 Enter name of the book you want to borrow: secret secret is issued Enter your choice: 2 Enter name of the book you want to borrow: secret secret is issued
修改后的代码
class Library: def __init__(self, listBooks): self.books = listBooks def displaybooks(self): for book in self.books: print(book) def borrowbooks(self, bookname): if bookname not in self.books: print(bookname + "NA/already taken") else: print(bookname + " is issued for you") # 调用删除函数移除已借出书籍 self.deletebooksfromdisplay(bookname) def deletebooksfromdisplay(self,bookname): self.books.remove(bookname) class Student: def requestbooks(self): self.book = input("Enter name of the book you want to borrow: ") return self.book if __name__ == "__main__": mylib = Library( ["invention", "rich&poor", "macroeconomics", "secret"]) student = Student() print("""CHOOSE WHAT YOU WANT TO DO:- 1. Listing all books 2. Borrow books 3. Exit """) while (True): try: usr_response = int(input("Enter your choice: ")) if usr_response == 1: mylib.displaybooks() elif usr_response == 2: mylib.borrowbooks(student.requestbooks()) elif usr_response == 3: print("THANK YOU ! \n") exit() break else: print("INVAILD INPUT! \n") except Exception as e: #catch errors print(f"{e}---> INVALID INPUT! \n")
修改说明
- 取消
deletebooksfromdisplay函数的注释,实现从图书馆书籍列表中移除指定书籍的功能 - 在
borrowbooks函数的成功借阅分支(else块)中,调用deletebooksfromdisplay(bookname),将已借出的书籍从可借阅列表中移除 - 这样再次借阅同一本书时,因为书籍不在
self.books列表中,会触发if分支,输出{bookname}NA/already taken,符合需求
内容的提问来源于stack exchange,提问作者ABCD
相关产品推荐
相关产品推荐

