Python else块不能正常工作

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],

我尝试用python创建一个图书列表

以下是示例列表:

该列表包含图书id、图书名称、writerName、WriterUserName和成本对象

  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。在您的代码中,它只显示第一个片段,第二个片段不打印。第二个片段在这里不适用。但我之所以提到它,是因为它鲜为人知,有时避免使用旗帜(这里没有)。