1

私たちの学校のプロジェクトでは、Python を使用して機能する「ログイン システム」を実装するタスクがあります。ほとんどすべてのことを実行しましたが、プログラムに実装されている 2 つの機能に苦労しています。システムの目的をできる限り説明して、私が直面していることを理解できるようにします:) 基本的に、ユーザーの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

このリストは最適ではありません。これについてはもっと良い方法があります。

重要なことは、1 つのオブジェクトを複数のリストまたは辞書で参照できることです。また、オブジェクトにはリスト属性を含めることができます。

したがって、すべての本のリストを維持できます。そして、すべてのユーザーのリスト。

また、ユーザーは書籍リスト属性を持つことができ、書籍も参照できます。たとえば、彼が読んだものなどです。

class User:
    booksRead = []

または、コンストラクターを使用して:

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

次に、書籍をユーザーのリストに追加するには:

user.booksRead.append(book)

これは、これを整理する多くの方法の 1 つにすぎません。キーに基づいてリスト内のアイテムを検索する場合は、辞書を使用します。

于 2013-03-19T23:44:30.630 に答える
0

より多くのことを学び、より多くのコードを書くにつれて、データを整理するためのより良い方法を見つけることができます。とりあえず、削除コードと共有コードの違いをよく見てください。. . (ヒント: 共有コードは、1 つおきエントリだけが本であることを認識しています)。

于 2013-03-20T00:23:35.590 に答える