在我的
class Library(object):
def __init__(self):
self.books = []
def add_book(self, book):
if book.get_title() not in self.books:
self.books.append(book)
else:
print("This book is already added.")
然后在我的主要()中得到了:
if command == "add":
title = input("Please type in the title of the book:")
author = input("Please type in the author of the book:")
year = int(input("Please type in the year of the book:"))
my_lib.add_book( Book(title, author, year) )
print("The book has been added.")
elif command == "view":
my_lib.view_library()
elif command == "get":
book_title = input("Please type in the title of the book:")
book = my_lib.find_book(book_title)
if book != False:
print("Here's the book:")
print("Title:", book.get_title() + ".\nAuthor:",
book.get_author() + ".\nYear:",
str(book.get_year()) + ".\nBorrowed:",
str(book.get_borrowed()) + ".\n")
else:
print("This book does not exist.")
elif command == "borrow":
book_title = input("Type in the title of the book you want to borrow:")
book = my_lib.find_book(book_title)
if book != False and book.get_borrowed() == None:
pass
elif book == False:
print("This book does not exist in our catalog!")
else:
print("This book is already borrowed!")
我的问题是,当我添加几本具有相同标题,作者和年份的书籍时,我只能借用其中一本书。可能是一个简单的解决方案,但我被困住了。我还想使用另一个名为User的类,我可以存储所有人的名字,而不是仅仅在借用函数中执行:
##name = input("Please type in your name:")
##book.set_borrowed(name)
我现在已经通过了。我得到了另一个只是书的课。与所有正常的吸气剂和孵化器。
澄清,这不起作用:
def add_book(self, book):
if book.get_title() not in self.books:
self.books.append(book)
This doesnt work. I can still add a book with the exact same info including title!
答案 0 :(得分:2)
我认为您需要重新考虑您的计划。
如果您创建两本具有相同属性值的图书,则客户无法区分它们。
一种可能性是为每本书添加一个唯一的ID(使用Book类中的类变量随每本书增加)并使用此ID借书。另一种可能性是存储一种类型的书中有多少种可用。您可以使用book类中的int计数器来实现它。如果添加了具有匹配属性的书籍,则增加它;如果计数器大于0(=可用书籍)并且调用“get”命令,则减少。
这应该适用于您的问题。
BTW:setter和getter不是pythonic。在python中,您通常使用直接访问属性。如果您需要进一步处理(值检查等),您可以使用属性。答案 1 :(得分:0)
如果您不需要对同一本书的副本进行区分,或者添加一个唯一的ID(在Book类中或者在同一个类中),您可以添加书籍数量作为Book类的属性,或者更好地添加Book的子类。一个子类)如果你想对它们进行区分。事实上,人类图书管理员会在一个真正的图书馆里做多少本同一本书的副本:-)(永远不要忘记真正的问题......)
假设您只需要相同书籍的数量,但想知道现有书籍的数量和借用的部分,实施可能是:
class LibBook(Book):
def __init__(self, nb, *bookParams):
super(Book, self).__init__(*bookParams)
self.count = nb
def add_copies(nb = 1): # nb can be <0 to remove copies
'add nb new copies of the book (if nb < 0 removes them)'
if (self.present + nb) < 0:
raise Exception('Not enough books')
self.count += nb
self.present += nb
def borrow(n = 1):
if self.present < n:
raise Exception('Not enough books')
self.present -= n
def return(n = 1):
if self.present + n > self.count:
raise Exception('Not so many books were borrowed')
self.present += n
然后你可以重写,提供的书是一本LibBook :
def add_book(self, book):
if book.get_title() not in self.books:
self.books.append(book)
else
book.add_copies(1)
你应该调整程序的借用部分......