You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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")

修改说明

  1. 取消deletebooksfromdisplay函数的注释,实现从图书馆书籍列表中移除指定书籍的功能
  2. 在borrowbooks函数的成功借阅分支(else块)中,调用deletebooksfromdisplay(bookname),将已借出的书籍从可借阅列表中移除
  3. 这样再次借阅同一本书时,因为书籍不在self.books列表中,会触发if分支,输出{bookname}NA/already taken,符合需求

内容的提问来源于stack exchange,提问作者ABCD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:52:10