0

タプルのリストとして保存されたデータベースがあり、すべてのタプルには 4 つの要素があります。最初の要素は本の番号、2 番目の要素は本の名前、3 番目の要素は本の著者、4 番目の要素は本の出版年です。

という関数が必要です。この関数findBook(L, keyword)は、本をタプルのリストとして文字列として受け取り、その中にあるすべてをkeyword返します。は次のようになります。tuples of bookskeywordtuple of the book

(BookNumber, BookName, Author, YearPublished)

これらの特定の本を見つけるのに役立つ検索エンジンを作成するにはどうすればよいでしょうか?

私はこれから始めようとしましたが、うまくいきません:

def findBook(L,keyword):

    for i in L:
        BookNumber=i[0]
        BookName=i[1]
        Author=i[2]
        YearPublished=i[3]
        i=(BookNumber,BookName,Author,YearPublished)

        if keyword == str(BookName) or keyword==BookNumber or keyword==str(Author) or keyword==str(YearPublished):
            return i

したがって、ハリー・ポッターの本を持っていて、「ハリー」というキーワードを入力すると、すべてのタプルが返されます。

4

1 に答える 1

0

keyword探しているエントリが含まれている可能性のあるエントリを繰り返し処理し、それらをリストにグループ化して、プロセスの最後までに返すことができます。

def findBook(L, keyword):

    books = list()
    for book in L:

        book = tuple(entry for entry in book)
        if [i for i in book if str(i).find(keyword) != -1]:
            books.append(book)

    return books

L = [(2,"harry potter and the prisoner of azkaban ","J.K Rowling","1998"),
        (3,"harry potter and the half blood prince","J.K Rowling","2007"),
        (6,"Harry potter and deathly hallows","J.K Rowling","2010"),
        (8,"The secret","someone","2009")]

print findBook(L, "harry")

出力:

[(2, 'harry potter and the prisoner of azkaban ', 'J.K Rowling', '1998'), (3, 'harry potter and the half blood prince', 'J.K Rowling', '2007')]

keywordが「Harry」ではなく「harry」であるため、3番目のエントリが見つからなかったことに注意してください。感度の低いケース検索を行うには、次を使用します。

def findBook(L, keyword):

    books = list()
    keyword = keyword.tolower()

    for book in L:

        book = tuple(entry for entry in book)
        if [i for i in book if str(i).tolower().find(keyword) != -1]:
            books.append(book)

    return books
于 2012-12-27T13:20:53.840 に答える