对于Python中的循环问题

时间:2011-07-22 21:03:12

标签: python loops

我是编程新手。我希望能够为我的列表中的两个条目运行此程序,但是不能理解编程以使其正确。这个网站的成员已帮助我做到这一点,该程序适用于一组标签。我想让它运行所以我可以一次搜索多个作者。输出结果是它只收集“Shakes”的所有信息。然后停下来。我只是不知道如何格式化循环以使其正确。

以下是我正在使用的代码:

authorList = ['Shakes.','Scott']

with open('/Users/Adam/Desktop/Poetrylist.txt','w') as output_file:
with open('/Users/Adam/Desktop/2e.txt','r') as open_file:
        the_whole_file = open_file.read()
        start_position = 0
        for x in authorList:
            while True:
               start_position = the_whole_file.find('<A>'+x+'</A>', start_position)
               if start_position < 0:
                   break
               end_position = the_whole_file.find('</W>', start_position)
               output_file.write(the_whole_file[start_position:end_position+4])
               output_file.write("\n")    
               start_position = end_position + 4

我确信这是一个非常简单的问题,但我正在尝试自学python,而且进展相当缓慢。

3 个答案:

答案 0 :(得分:5)

我认为这是因为您没有重置start_position; Python中的变量的范围限定在它们的封闭函数或类或模块中,但不限于它们的封闭循环。所以尝试添加这一行:

for x in authorList:
    start_position = 0   # Add this
    while True:

答案 1 :(得分:2)

这将是一个问题

    start_position = 0
    for x in authorList:
        while True:

对于第一作者,start_position为0.酷。

对于第二作者,start_position会是什么?暗示。没有什么能把它重置为零。

答案 2 :(得分:1)

这一次处理输入文件:

#!/usr/bin/env python

authorList = ['Shakes.','Scott']
with open('/Users/Adam/Desktop/2e.txt','r') as open_file:
    the_whole_file = open_file.read()
    start_position = 0
    for x in authorList:
        while True:
           start_position = the_whole_file.find('<A>')
           if start_position < 0:
               break
           author_end = the_whole_file.find('</A>', start_position)
           end_position = the_whole_file.find('</W>', start_position)
           if the_whole_file[start+position + 3:author_end] in authorList:
               output_file.write(the_whole_file[start_position:end_position+4])
               output_file.write("\n")    
           start_position = end_position + 4

它通过扫描作者标签来反转循环,查看它们的值是否在作者列表中,如果是,则打印到结束标记。由于必须访问每个标记,这可能会或者可能不会比循环每个作者更有效。