2013-11-28 64 views
1

爲了分析文件中的數據,我寫了下面的代碼。但是,當我執行代碼時,它只是掛起,並沒有完成一些派生的數據打印到屏幕上。它有什麼問題,如果有的話?代碼不能在Python中完成執行

#!/usr/bin/python2.7 

infile=open("ratios.dat","r") 
outfile=open("corr_ratios.txt","wb") 
outfile2=open("corr_ratios2.txt","wb") 

data=infile.readlines() 

i=0 
while i < len(data): 
    if i+2 < len(data) and data[i+2].startswith("Model "): 
     outfile.write(" ") 
     outfile.write("\n") 
     i=i+2; 
    elif i+8 < len(data): 
     targetline=data[i+8] 
     outfile.write(targetline.split(" ")[0]+"\n") 
     outfile2.write(targetline.split(" ")[2]+"\n") 
     i=i+11; 


count=0 
sum=0.0 
infile2=open("corr_ratios.txt","r") 
data2=infile2.readlines() 
for j,line in enumerate(data2): 
    if data2[j]!=" ": 
     count=count+1 
     sum=sum+float(data[j]) 


mean=sum/count 
print count,sum,mean 
+1

會發生什麼'I = LEN(數據) - 2'? – Blender

+0

我不完全確定。 if語句的這一部分的目的是允許程序無誤地到達輸入文件的末尾。這是問題所在嗎? – stars83clouds

+0

對於那個具體的'我',你會陷入無限循環。 – Blender

回答

1

我自己的錯誤在這裏。我在代碼底部的最後一個if語句中的sum方程中訪問了「data」數組,而不是「data2」數組。

本來應該是:

for j,line in enumerate(data2): 
    if data2[j]!=" ": 
     count=count+1 
     sum=sum+float(data2[j]) 
1

無限循環必須在while循環內部發生。 i被初始化爲0. while循環旋轉直到我遇到數組邊界。對於每次迭代,如果i+2沒有超出界限並且當前行以「Model」開頭,則將i前進2。否則,如果i+8不會溢出邊界,則將i前移11。因此,如果這兩個條件都不是true,while循環將永遠不會終止。

我想也許有需要在這一塊的其他條件:如果

else: 
    i += 1 
+0

我包含了一個else:break條件,允許腳本無誤地執行。希望有更多的練習,我可以看到無限循環發生的地方。謝謝你的建議。 – stars83clouds