我需要完成一项与创建课程有关的简短作业,而且我不确定代码的问题是什么。以下是下面的说明,这是我的代码。请解释我的错误是什么以及如何修复它们:
建立2个班级。第一堂课将是" Book"类。书类有4个变量都是私有的。第一个是checkedOut,它是一个初始化为false的布尔值,title是一个由输入变量初始化的字符串,作者是一个字符串,由输入变量初始化,页面是一个整数,也是由一个整数初始化的输入变量。这个类还将有4个与之关联的函数。第一个将返回变量checkedOut。第二个将更改checkedOut的值。如果该值设置为true,则它将更改为false,反之亦然。第三个函数将返回页数,最终函数将返回标题。当书籍对象被打印时,它的格式为"标题作者页面checkedOut"。
第二个类将被称为库。初始化库时,它将创建一个名为collection的空字典。库类将具有2个函数。第一个函数将被称为addBook,它将接收3个输入变量,标题,作者和页面。在此函数中,您将创建一个book对象,然后将其添加到字典中,并将标题作为键。第二个功能将采用书的标题,在字典中查找该书并调用更改checkedOut状态的书籍功能。最后,当打印出一个库对象时,它将在一个单独的行中打印出库中的每本书。
最后,库类将在名为main.py的python程序中实现。
这是我的代码:
class Book:
title = str(input("Enter the title of the book. "))
author = str(input("Enter the author of the book. "))
pages = int(input("Enter the number of pages in the book. "))
checkedOut = False
def checked_Out(self):
print(checkedOut)
return checkedOut
def change_value_of_checkedOut(self):
if checkedOut == False:
checkedOut = True
print("Switched from False to True.")
elif checkedOut == True:
checkedOut = False
print("Switched from True to False.")
def return_pages(self):
print(pages)
return pages
def return_title(self):
print(title)
return title
class Library(Book):
def __init__(self):
collection = {}
def addBook(self, title, author, pages):
new_book = Book()
collection[title] = author
def change_checked_out_status(self, title):
if title in collection:
new_book.change_value_of_checkedOut(self)
else:
print("This book is not in the collection.")
我在这里做了什么错了?当我尝试创建对象并在IDLE中运行代码时,我不断得到错误,因为没有定义某个变量名。
答案 0 :(得分:3)
(0)下次粘贴错误。
class Book:
title = str(input("Enter the title of the book. "))
author = str(input("Enter the author of the book. "))
pages = int(input("Enter the number of pages in the book. "))
checkedOut = False
def checked_Out(self):
print(checkedOut)
return checkedOut
(1)就是这部分。
checkedOut
未定义。你在哪里看到checkedOut?在函数checked_Out
正上方。好的。简短回答,添加self.
。
示例:
def checked_Out(self):
print(self.checkedOut)
return self.checkedOut
你真的不应该在那里做标题,作者的东西。它们成为类变量,而不是实例变量。有区别。
(2)如果您仍在使用2.x Python,请避免使用input
。
使用raw_input
并删除str
。那更安全。在3.x中你可以使用输入,它将始终是字符串(raw_input将始终返回字符串)。这也引起了问题。
(3)你有把所有东西都限制在其中的余地。我通常很冷,但有点不好。不要将它称为checked_Out
,这实际上是不一致的,而Python程序员更喜欢checked_out
。 checkedOut
可以命名为checked_out
,嘿,你可以发生冲突。不要将您的函数和变量命名为如此相似。
答案 1 :(得分:0)
单独创建类,并单独获取输入。另外,您要提到的是,每个变量都是一个实例变量,而不是在本地范围内:
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
self.checkedOut = False
def checked_Out(self):
print(self.checkedOut) # it has to be the instance variable
return self.checkedOut
def change_value_of_checkedOut(self):
if self.checkedOut == False:
self.checkedOut = True
print("Switched from False to True.")
elif self.checkedOut == True:
self.checkedOut = False
print("Switched from True to False.")
def return_pages(self):
print(self.pages)
return self.pages
def return_title(self):
print(self.title)
return self.title
class Library:
def __init__(self):
collection = {}
def addExistingBook(self, book):
collection[book.title] = book.author
def addNewBook(self, title, author, pages): # create a book
new_book = Book(title, author, pages)
collection[title] = new_book.author # access the author
def change_checked_out_status(self, title):
if title in collection.keys():
title.change_value_of_checkedOut()
else:
print("This book is not in the collection.")
然后,在main
函数中添加其余部分:
def main():
# if you are using Python 2.x, change input() to raw_input()
title = str(input("Enter the title of the book. "))
author = str(input("Enter the author of the book. "))
pages = int(input("Enter the number of pages in the book. "))
myBook = Book(title, author, pages)
myLib = Library()
myLib.addExistingBook(myBook)