【问题标题】:How do you store objects in python and how you access them如何在 python 中存储对象以及如何访问它们
【发布时间】:2013-03-19 00:37:33
【问题描述】:

在我们的学校项目期间,我们的任务是使用 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)           

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

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

我希望我没有把事情弄得太复杂,并且对我的英语不好感到抱歉:) 非常感谢

【问题讨论】:

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


    【解决方案1】:

    这个列表不是最佳的,有更好的方法来解决这个问题。

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

    因此您可以维护所有书籍的列表。以及所有用户的列表。

    用户可以有一个书单属性,然后也可以参考书,例如他读过的书:

    class User:
        booksRead = []
    

    或者,使用构造函数:

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

    然后将一本书添加到用户的列表中:

    user.booksRead.append(book)
    

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

    【讨论】:

    • 我明白你的意思。如果这对您来说不是太麻烦的话,您能否举个例子告诉我如何将 2 个对象(用户、书籍)链接在一起。并感谢您的回复
    • 非常感谢,现在这更有意义了:)
    【解决方案2】:

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

    【讨论】:

    • 我知道这两个函数之间有什么区别,但我只在此处发布了它们,因此您可以了解更多关于我在这里尝试做的事情的详细信息 :) 我遇到的主要问题是存储细节不是功能本身
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    相关资源
    最近更新 更多