Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不是';我的其他声明不起作用吗?它打印的是;这本书不是';t可在图书馆获得”;几次而不是一次_Python_Loops_For Loop_If Statement - Fatal编程技术网

Python 为什么不是';我的其他声明不起作用吗?它打印的是;这本书不是';t可在图书馆获得”;几次而不是一次

Python 为什么不是';我的其他声明不起作用吗?它打印的是;这本书不是';t可在图书馆获得”;几次而不是一次,python,loops,for-loop,if-statement,Python,Loops,For Loop,If Statement,除此之外:它会连续打印“这本书在图书馆不可用”我认为更正缩进后,您的原始代码将是: file=open('database.txt','r') x=input("Please enter the title of the book you are looking for?") print("%s %10s %8s %22s %11s"%\ ("ID","Title","Author","Purchase Date","Member ID")) for line in file: if x i

除此之外:它会连续打印“这本书在图书馆不可用”

我认为更正缩进后,您的原始代码将是:

file=open('database.txt','r')
x=input("Please enter the title of the book you are looking for?")
print("%s %10s %8s %22s %11s"%\
  ("ID","Title","Author","Purchase Date","Member ID"))
for line in file:
if x in line.split():
    print(line)
else:
    print("This book isn't available in Library.")
file.close()
而您不断打印“这本书在图书馆不可用”的原因是因为您的循环要求文件中的每一行 1) 打印行 或 2) 打印“图书馆没有这本书。”

所以如果你的文件是1000行,不管怎样,你都会打印1000次

相反,可以从分配一个布尔变量开始,该变量跟踪是否找到一本书。然后在database.txt文件中的行中循环查找感兴趣的书籍

如果找到了该书,您可以更改该变量,并打印包含该书的行,在循环中继续执行此操作

如果找不到该书,则循环的外部将打印“此书在图书馆中不可用”消息


同样是的,正如Eugene Pakhomov在上文中所评论的,如果您提供输入和预期输出的示例,则更容易排除故障。

我认为更正缩进后,您的原始代码将是:

file=open('database.txt','r')
x=input("Please enter the title of the book you are looking for?")
print("%s %10s %8s %22s %11s"%\
  ("ID","Title","Author","Purchase Date","Member ID"))
for line in file:
if x in line.split():
    print(line)
else:
    print("This book isn't available in Library.")
file.close()
而您不断打印“这本书在图书馆不可用”的原因是因为您的循环要求文件中的每一行 1) 打印行 或 2) 打印“图书馆没有这本书。”

所以如果你的文件是1000行,不管怎样,你都会打印1000次

相反,可以从分配一个布尔变量开始,该变量跟踪是否找到一本书。然后在database.txt文件中的行中循环查找感兴趣的书籍

如果找到了该书,您可以更改该变量,并打印包含该书的行,在循环中继续执行此操作

如果找不到该书,则循环的外部将打印“此书在图书馆中不可用”消息


同样是的,正如Eugene Pakhomov在上文中所评论的,如果您提供输入和预期输出的示例,则更容易排除故障。

注意缩进问题。如果你的
If/else
语句在
for
循环中,它们应该正确缩进。除了代码之外,你还应该提供一个小版本的
database.txt
和手动输入。谢谢你,我不太清楚你说的尤金·帕霍莫夫是什么意思(对不起,这里是初学者x)注意缩进问题。如果你的
If/else
语句在
for
循环中,它们应该正确缩进。除了代码之外,你还应该提供一个小版本的
database.txt
和你手动输入的内容。谢谢你,我不太确定你说的尤金·帕霍莫夫(抱歉,这里是初学者x)是什么意思谢谢你!但是,现在当我打印时,它只打印database.txt文件中我的一本书。例如,有5本书的副本,但在使用您的建议后,它不再打印所有书的副本。。。很抱歉,我是python初学者,因此很难理解。好的,我更新了答案。但是,同样,如果你明确地注意到输入是什么以及预期的输出,那么得到问题的答案要容易得多。谢谢!但是,现在当我打印时,它只打印database.txt文件中我的一本书。例如,有5本书的副本,但在使用您的建议后,它不再打印所有书的副本。。。很抱歉,我是python初学者,因此很难理解。好的,我更新了答案。但是,同样,如果你明确地注意到输入是什么,以及预期的输出,那么得到问题的答案要容易得多。
file = open('database.txt','r')

x = input("Please enter the title of the book you are looking for?")

print("%s %10s %8s %22s %11s"%\
  ("ID","Title","Author","Purchase Date","Member ID"))

book_not_found = True

for line in file:
    if x in line.split():
        book_not_found = False
        print(line, end = '')

if book_not_found:
    print("This book isn't available in Library.")

file.close()