【发布时间】:2019-08-13 14:47:12
【问题描述】:
我有一个程序,它循环遍历一本书的行来匹配我创建的一些标签,这些标签指示了本书每一章的开始和结束。我想将每一章分成不同的文件。程序找到每一章并要求用户为文件命名,然后继续直到下一章,依此类推。我不知道在哪里放置我的“休息”或可以阻止我的循环的东西。该程序运行良好,但是当它到达最后一章时,它又回到了第一章。我想在标签和章节完成时停止循环并终止程序,并打印诸如“章节结束”之类的内容。任何人都可以帮助我吗?代码如下:
import re
def separate_files ():
with open('sample.txt') as file:
chapters = file.readlines()
pat=re.compile(r"[@introS\].[\@introEnd@]")
reg= list(filter(pat.match, chapters))
txt=' '
while True:
for i in chapters:
if i in reg:
print(i)
inp=input("write text a file? Y|N: ")
if inp =='Y':
txt=i
file_name=input('Name your file: ')
out_file=open(file_name,'w')
out_file.write(txt)
out_file.close()
print('text', inp, 'written to a file')
elif inp =='N':
break
else:
continue
else:
continue
separate_files()
【问题讨论】:
-
“但是当它到达最后一章时,它会回到第一章”......是的。因为
for i in chapters:循环结束并且外部while 重复所有内容。只需删除 while(当你在它的时候,还有最后的else: continue,我 200% 确定它放错了) -
除非您自己破坏它,否则使用“While True”将永远不会结束,我建议您找到一个实际的真/假条件检查以与您的 while 语句一起使用,以便当该条件为假时循环结束。或者您可以删除 while,因为您已经使用“for i in chapters”语句循环数据。
-
while循环是否应该在separate_files内? (似乎是这样,否则chapters没有定义。) -
@GPhilo,好的!我将尝试删除 while True。
-
这不是您在代码中遇到的唯一错误,但您可以从那里开始。正如 chepner 指出的那样,
chapters没有在任何地方定义
标签: python string while-loop