2014-11-22 72 views
-3

在没有中断功能的循环中,有没有办法在Python中停止代码?例如,如果我给一个文本文件,它看起来像:在没有中断的情况下停止Python中的代码

5 * 
7 * 
5 * 
Limerick 
8 A 
8 A 
5 B 
5 B 
8 A 
Quintain (English) 
0 A 
0 B 
0 A 
0 B 
0 B 

如何,只要它达到一个包含所有字母(在这种情况下,利默里克),而不使用断点功能行停止循环?

for line in file: 
    list.append(line) until it reaches Limerick and ignore the rest of the file 

基本上我想前3行到一个列表,然后停止循环追加不使用断点功能。

+2

你想跳出循环的,但你不希望使用命令明确表示该目的? – khelwood 2014-11-22 02:19:57

+1

“While”循环怎么样? – Himal 2014-11-22 02:21:35

+0

不适合我。这是一个任务,我们不允许使用休息。我不会问是否可以。 – nigerianmahogany 2014-11-22 02:24:41

回答

0

试试这个:

f = open('your_file') 
my_list= [] 
for x in f: 
    if x.strip() == 'Limerick': 
     f.seek(0,2) 
    else:my_list.append(x.strip()) 
print my_list 

输出:

['5 *', '7 *', '5 *'] 

在上面的代码将追加,直到它找到利默里克,f.seek(0,2)将让文件到达终点。

你也可以使用一个回报:

>>> my_list = [] 
>>> def limeric(f): 
...  for x in f: 
...   if x.strip() == 'Limerick': 
...    return 
...   my_list.append(x.strip()) 
... 
>>> f= open('your_file') 
>>> limeric(f) 
>>> my_list 
['5 *', '7 *', '5 *'] 
0

您可以使用一个变量来控制回路的动作。

my_list = [] 
with open('test.txt', 'r') as f_i: 
    flag = 1 
    for line in f_i: 
     if flag: 
      if line.strip() != 'Limerick': 
       my_list.append(line) 
      else: 
       flag = 0 

print(my_list) 
0

你也可以在函数中做到这一点,并简单地从函数返回而不是使用break。

0

把它放在一个函数和return将停止循环:

def lines_to_limerick_in(file_path): 
    lines = [] 
    with open(file_path) as file: 
     for line in file: 
      lines.append(line) 
      if 'Limerick' in line: 
       return lines 
     return lines 

用法:

lines = lines_to_limerick_in(filepath) 
相关问题