如何在python中存储对象以及如何访问它们

时间:2013-03-19 00:37:34

标签: list object python-3.x nested-lists dictionary

在我们的学校项目中,我们有一个任务是使用python实现一个工作的“登录系统”。 我几乎做了所有事情,但我一直在努力解决程序中实现的两个功能。我将尝试尽可能多地解释系统的目的是什么,以便您能够理解我面临的问题:) 基本上我使用的对象是2个用户角色(管理员和普通用户),以及书籍对象。每个用户都可以登录系统,他们会看到5种不同的选择:添加书籍,删除书籍,列表簿,共享书籍(这个检查是否有其他用户正在阅读同一本书),然后退出。我在删除书籍和分享书单时遇到了极大的困难。

到目前为止,我一直将我的对象存储在列表中,并设法完成所有功能,以便它们正常工作。但问题是:这就是我在嵌套列表中存储对象的方式,这样每本书都可以与所需的用户相关联

books=[book1,[user1],book2,[user1,user3],book3,[user3,user2],book4,[user1,user4,user3]]

但每当我尝试删除一本书时,我都会使用此功能,但它无法正常工作。我知道这段代码对你来说基本没用,但无论如何我已经发布了它,所以你可以更好地了解我想要做的事情。

total=len(books)
a=input("\nType in the book you want to delete:\n")
if (total!=0):
    for i in range(total):
        if(a==books[i].title):
            del(books[i])
            print("Book has been deleted\n\n")
            print(books)
            break

以下代码块用于共享书功能,实际上正在运行。

books2=[]          
books3=[]          
xStr=input("Enter the name of the book\n")
for i in range(len(books)):
    if (i%2==1):               #This will select only users asociated with a book
        books2.append(books[i])
    if (i%2==0):               #This will select only the books
        books3.append(books[i])
for i in range(len(books2)):        
    for j in range(len(books2[i])): 
        if (books3[i].title==xStr): 
                print("Book: ",books3[i],"is also used by:",books2[i][j-1].username)           

我也尝试过字典,但它没有用。

所以我想知道的是: - 在您看来,这是存储此类程序对象的最佳方式 - 我应该使用哪种数据结构以及基本如何完成

我希望我没有太多复杂,抱歉我的英语不好:) 非常感谢你

2 个答案:

答案 0 :(得分:0)

此列表并非最佳,有更好的方法可以解决这个问题。

要认识到的重要一点是,可以在多个列表或词典中引用单个对象。此外,对象可以包含列表属性。

所以你可以保留所有书籍的清单。并列出所有用户。

用户可以拥有书籍列表属性,然后可以参考书籍,例如他读过的书籍:

class User:
    booksRead = []

或者,使用构造函数:

class User:
    def __init__(self):
        self.booksRead = []

然后将图书添加到用户列表中:

user.booksRead.append(book)

这只是组织此方法的众多方法之一。如果您希望根据键在列表中查找项目,请使用字典。

答案 1 :(得分:0)

随着您了解更多并编写更多代码,您将找到更好的方法来整理数据;现在,仔细看看删除代码和共享代码之间的区别。 。 。 (提示:您的共享代码知道只有每个其他条目都是一本书)。