1

在我们学校的项目中,我们有一个任务是使用 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)           

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

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

我希望我没有太复杂,对不起我的英语不好:) 非常感谢

4

2 回答 2

0

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

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

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

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

class User:
    booksRead = []

或者,使用构造函数:

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

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

user.booksRead.append(book)

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

于 2013-03-19T23:44:30.630 回答
0

You'll find better ways to organize your data as you learn more and write more code; for now, take a close look at the difference between your delete code and your sharing code . . . (hint: your sharing code knows that only every other entry is a book).

于 2013-03-20T00:23:35.590 回答