2014-11-22 102 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) 
相關問題