Python else块不能正常工作
我尝试用python创建一个图书列表 以下是示例列表: 该列表包含图书id、图书名称、writerName、WriterUserName和成本对象Python else块不能正常工作,python,if-statement,Python,If Statement,我尝试用python创建一个图书列表 以下是示例列表: 该列表包含图书id、图书名称、writerName、WriterUserName和成本对象 books = [ [45623, 'Ptyhon', 'Mustafa', 'Basak', 23], [99878, 'Linux Networks', 'Mustafa', 'Basak', 26], [98938, 'Operating Systems', 'Ali', 'Akinci', 17],
books = [
[45623, 'Ptyhon', 'Mustafa', 'Basak', 23],
[99878, 'Linux Networks', 'Mustafa', 'Basak', 26],
[98938, 'Operating Systems', 'Ali', 'Akinci', 17],
[98947, 'PHP and AJAX', 'Haydar', 'Baskan', 25]
]
我想根据作者的姓氏搜索列表
while 1:
writerSurname = input('Pls enter the writer's surname.')
if writerSurname not in ['exit', 'Exit']:
for k in books:
if str(writerSurname) == k[3]:
print(k[1],'writer', k[2],k[3], "cost is", k[4],"TL")
else:
print(writerSurname, 'there is no such a person.')
break
但除此之外,该块无法正常工作。当我键入一个不在图书列表中的姓氏时,它不会显示print(writerSurname,“没有这样的人”。)行。有人能告诉我哪里出了错吗 除了无效语法外,
if
语句与姓氏是否在图书列表中无关:您要检查的唯一一件事是是否有一种类型退出/退出。对于图书列表之外的任何输入,当输入不是“退出”或“退出”时,代码进入if
块
这是正确的版本:
books = [
[45623, 'Ptyhon', 'Mustafa', 'Basak', 23],
[99878, 'Linux Networks', 'Mustafa', 'Basak', 26],
[98938, 'Operating Systems', 'Ali', 'Akinci', 17],
[98947, 'PHP and AJAX', 'Haydar', 'Baskan', 25]
]
while 1:
writerSurname = raw_input('Pls enter the writers surname.')
if writerSurname not in ['exit', 'Exit']:
found = False
for k in books:
if str(writerSurname) == k[3]:
print(k[1],'writer', k[2],k[3], "cost is", k[4],"TL")
found = True
if not found:
print(writerSurname, 'there is no such a person.')
else:
break
如果某些名称匹配,则内部循环应使用标志集
while True:
writerSurname = input("Pls enter the writer's surname.")
if writerSurname in ['exit', 'Exit']:
break
found = False
for k in books:
if writerSurname == k[3]:
found = True
print(k[1],'writer', k[2],k[3], "cost is", k[4],"TL")
if not found:
print(writerSurname, 'there is no such a person.')
break
请注意,对于单个中断匹配(此处不适用),可以使用for/else
语句:
for k in books:
if writerSurname == k[3]:
print(k[1],'writer', k[2],k[3], "cost is", k[4],"TL")
break
else:
# end of the loop reached, without break: enters here
print(writerSurname, 'there is no such a person.')
您有缩进错误和一些逻辑错误。代码中的所有混乱不一定都是必需的,因此我将代码简化为以下内容:
books = [
[45623, 'Ptyhon', 'Mustafa', 'Basak', 23],
[99878, 'Linux Networks', 'Mustafa', 'Basak', 26],
[98938, 'Operating Systems', 'Ali', 'Akinci', 17],
[98947, 'PHP and AJAX', 'Haydar', 'Baskan', 25]
]
while True:
surname = input("pls enter the writer's surname: ")
for record in books:
if surname in record:
print("..details..")
break
else:
print("Failed")
注意:如果您正在处理诸如姓名、数字等详细信息/记录,并且这些详细信息是相关的,并且您相信您将不断搜索这些详细信息,那么我发现使用字典比在列表中线性搜索更方便
while
循环允许程序有多个条目,因此可以为程序输入无限多个名称。内部for
循环执行实际工作,在嵌入的列表中搜索姓氏(如果存在)。如果找到姓氏,将执行print(“…details…”)
,如果搜索了所有嵌入列表,但未找到匹配的姓氏,则将执行print(“失败”)
希望这对你有帮助,祝你好运 试试这个:
书籍=[
[45623,'Ptyhon','Mustafa','Basak',23],
[99878,‘Linux网络’、‘Mustafa’、‘Basak’,26],
[98938,‘操作系统’、‘阿里’、‘阿金奇’、17],
[98947,‘PHP和AJAX’、‘Haydar’、‘Baskan’,25]
]
姓氏=[book[3]。lower()表示books in books]
而1:
writerSurname=input(“请输入作者的姓氏”)。lower()
如果writerSurname使用姓氏:
对于书名、作者姓名、作者姓氏、图书成本:
如果作者姓氏.lower()==writerSurname:
打印(“{book_name}writer{author_name}{author_name}成本为{cost}TL”。格式(book_name=book_name,author_name=author_name,author_name=author_name,cost=cost))
其他:
print(writerSurname,“没有这样的人”。)
如果writerSurname==“退出”:
打破
writerSurname=input('请输入作者的姓氏')
语法无效。此代码无法工作,因为输入提示中只有一个引号。input('请输入作者的姓氏')
肯定会引发错误。使用“
或转义”
。else
语句与if writerSurname
语句相关。SO代码段中的语法突出显示清楚地表明,由于出现了错误的引号,代码无法工作。您的评论似乎不错,但有两本书属于Mustafa Basar。在您的代码中,它只显示第一个片段,第二个片段不打印。第二个片段在这里不适用。但我之所以提到它,是因为它鲜为人知,有时避免使用旗帜(这里没有)。