2013-11-28 3 views
1

파일의 데이터를 분석하기 위해 다음 코드를 작성했습니다. 그러나 코드를 구현할 때 코드가 중단되어 일부 파생 데이터가 화면에 인쇄되지 않습니다. 문제가 있다면 무엇입니까?코드가 파이썬에서 실행을 완료하지 못합니다.

#!/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

어떻게하면 어떻게됩니까'난 = LEN (데이터) - 2'? – Blender

+0

전적으로 확신하지 못합니다. if-statement의 해당 부분의 목적은 프로그램이 오류없이 입력 파일의 끝에 도달 할 수있게하는 것입니다. 문제가있는 곳입니까? – stars83clouds

+0

특정 'i'에 대해서는 무한 루프에 빠지게됩니다. – Blender

답변

1

여기 내 실수. 코드 하단의 마지막 if 문 내에서 sum 방정식의 "data2"배열 대신 "data"배열에 액세스했습니다.

가되어 있어야합니다 :

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

무한 루프는 while 루프 내부에서 발생해야합니다. i은 0으로 초기화됩니다. while 루프는 배열의 경계에 도달 할 때까지 회전합니다. 각 반복에 대해 i+2이 범위를 벗어나지 않고 현재 행이 "모델"로 시작하는 경우 i를 2로 진행합니다. 그렇지 않으면 i+8이 경계를 오버플로하지 않을 경우 i을 11만큼 진행합니다. 사실, while 루프는 종료되지 않습니다. 내가 생각

아마도이 블록에 다른 조건이있을 필요가있다 :

else: 
    i += 1 
+0

스크립트를 오류없이 실행할 수있는 else : break 조건을 포함 시켰습니다. 바라기를 더 연습하면 무한 루프가 어디에서 발생하는지 확인할 수 있습니다. 귀하의 제안에 감사드립니다. – stars83clouds

관련 문제