一旦找到字典中的元素(包含在列表中),如何在列表中停止for循环

时间:2018-06-12 20:50:24

标签: python

我刚刚开始学习Python,我有一个关于FOR LOOP的问题以及如何让它循环直到他在列表中找到一个特定的元素,然后让它停止而不迭代其他列表的元素:

我创建了两个python文件:1)Database.py 2)App.py

In" Database.py"我有以下代码:

books = []

In" App.py"我有这段代码:

def prompt_read_book():
    book_to_search = input("Write the NAME of the book you want to mark as 'READ':\n")
    for book in database.books:
        if book_to_search.lower() == book["name"]:
            print(f"The book '{book_to_search}' is now marked as READ")
            book["read"] = True
            print("-" * 40)
        else:
            print(f"Sorry but the book {book_to_search} is not in the database")
            print("-" * 40)

当我的books列表中有超过1本书(2个或更多)时,我写的函数不能按预期工作。

示例:

books = [{"name": "Fight Club", "author": "Chuck Palahniuk", "read": False}, {"name": "Homo Deus", "author": "Yuval Noah Harari", "read": False}]

我想"标记为READ"只有名字"搏击俱乐部"的书。 所以我输入名称"搏击俱乐部"。 book_to_search变量变为:Fight Club 该函数正确运行并将{"read": False}更改为{"read": True}

无论其

由于我在for循环中,它会继续迭代并且还会打印: "很抱歉,Homo Deus这本书不在数据库中#34; (我对问题的理解如下:由于我们处于for循环中,程序逐个检查列表中的所有元素,以查找它们是否与用户编写的输入匹配。因此我需要一种方法一旦找到匹配元素就停止for循环。)

我想要的是以下内容:

- 一旦book_to_search与字典元素匹配,for循环必须停止而不迭代其他列表'元素

- 如果book_to_search与字典中的任何元素匹配,我想打印"Sorry but the book {book_to_search} is not in the database"

1 个答案:

答案 0 :(得分:1)

在找到图书后添加break,并向检测到是否已找到的变量声明TrueFalse

def prompt_read_book():
    book_to_search = input("Write the NAME of the book you want to mark as 'READ':\n")
    found = False
    for book in database.books:
        if book_to_search.lower() == book["name"]:
            print(f"The book '{book_to_search}' is now marked as READ")
            book["read"] = True
            print("-" * 40)
            found = True
            break

    if not found:
        print(f"Sorry but the book {book_to_search} is not in the database")
        print("-" * 40)
编辑:我刚刚编辑了我的答案,因为我误读了最后一部分。现在它只打印"对不起但是......"如果没有找到。