我刚刚开始学习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"
答案 0 :(得分:1)
在找到图书后添加break
,并向检测到是否已找到的变量声明True
或False
:
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)
编辑:我刚刚编辑了我的答案,因为我误读了最后一部分。现在它只打印"对不起但是......"如果没有找到。