2016-10-09 2 views
0

내가 한 일 중 하나는 내가받은 파일의 데이터에서 평균 인플레이션을 찾는 것입니다. year, interestinflation과 그 아래에있는 모든 숫자가 표시됩니다. 이런 모습입니다.파일의 평균 찾기

이 더 꽤이게
year interest inflation 
1900 4.61 8.1 

, 내가 germancoder 사의 씨의 도움으로 약간의 진전을 한 2008 년에 모든 방법. 나는 아직도 찔 렸어.

코드가 지금까지와 유사합니다.

def myTest(file): 
    with open ('filename', 'r') as f: 
      inflation = [] 
      header = 1 
      for line in f: 
       if header !=1: 
        infl = line.split(",")[2] 
        inflation.append(float(infl)) 
        header += 1 

      avgInflation = sum(inflation)/len(inflation) 

    return avgInflation 

문제, 생각, 상단의 년이자 인플레이션이 문제를 일으키는 것이 었습니다. 그래서 도움을 받아 코드에 내용을 추가했지만 여전히 오류가 발생합니다. 그것은 제로 오류로 나누기를 말합니다, 11 행. 지금해야 할 일에 대한 어떤 생각?

실제 파일 이름은 Inflation.csv입니다. 나는 간단한 인터프리터 프로그램을 만들어 인터프리터에 출력 해 쉼표로 구분하여 보여줍니다. (",")

+0

len (인플레이션)이 0이면 이는 인플레이션 목록에 아무 것도 추가하지 않는다는 것을 의미합니다. 헤더를 1로 설정 했으므로 아무 것도 추가하지 않으며 헤더가 1이 아닌 경우에만 작업을 수행합니다. –

+0

header = 1로 설정했습니다. 따라서 블록이 실행되지 않을 경우. 인플레이션 배열의 크기는 0이며, 0으로 나누기 오류는 불가피합니다. – acsrujan

+0

당신은'file'을 사용하고 있지만 결코 사용하지 않습니다. (또한, 내장 변수와 같은 이름의 변수를 사용하는 것은 좋지 않습니다.) – tripleee

답변

0

조건에 부합하지 않는 조건으로 header += 1이 조건에 부합됩니다 header != 1header의 초기 값은 1입니다. 따라서 배열을 루핑하고 아무것도하지 않습니다. 평균을 계산하는 방법이 끝나면 inflation 목록은 여전히 ​​비어 있으므로 len(inflation)0으로 해결됩니다.

또한 파일의 줄을 잘못 읽었습니다. 나는 당신이 줄을 f.readlines()을 사용하여 그것들을 읽고 싶어한다고 생각하니?

def myTest(file): 
    with open ('filename', 'r') as f: 
      lines = f.readlines() <--- 2 
      inflation = [] 
      header = 1 
      for line in lines: 
       if header !=1: 
        infl = line.split(",")[2] 
        inflation.append(float(infl)) 
       header += 1 <--- 1 

      avgInflation = sum(inflation)/len(inflation) 

    return avgInflation 
+0

파일을 올바르게 읽는 중입니다. readline을 호출하는 것은 실제로 더 나쁜 접근 방법입니다. –

0

avgInflation = sum(inflation)/len(inflation) 효과적으로되고, 당신은 header = 1을 initalizing하고, header이 때문에, 아닌 경우에는 확인 후 inflinflation의 값을 초기화 :

avgInflation = sum(0/len(0))

것이 있는지 확인해야합니다 인플레이션은 부문에서 그것을 사용하기 전에 가치가 있습니다. 아마도 당신이 초기화하는 것을 의미했습니다 header = 0

+0

상단에서, 만약 내가 헤더 = 0보다 그냥 그게 플로트로 문자열을 변환 할 수 없다는 내게 말해 : ( – Anonymous

+0

나는 문제를 따르지 모르겠다. 선언 및 할당'헤더 = 0' doesn – Av4t4r

+0

내가 말했듯이, 나는 프로그래밍에 아주 익숙하다. 모든 도움을 주겠다! 누군가가 + = 무엇을 설명 할 수 있겠는가? – Anonymous

-1

변수 header을 for 루프 외부에서 1로 초기화하는 것을 보았습니다. for 루프의 내부에서 header이 1이 아니고 아무 것도 수행하지 않으면 1을 나타냅니다. 루프는 절대로 안됩니다 if header !=1: 그냥 전체 파일을 반복하고 아무 것도하지 않고 루프를 종료합니다 . 11 번 줄에 아무 것도 추가하지 않으므로 len(inflation)은 0입니다. 코드의 어딘가에서 조건부 루프를 변경하거나 변수 header을 변경해야합니다.

def myTest(file): 
with open ('filename', 'r') as f: 
     inflation = [] 
     header = 1 
     for line in f: 
      if header !=1: //Never goes inside 
       infl = line.split(",")[2] 
       inflation.append(float(infl)) 
       header += 1 

     avgInflation = sum(inflation)/len(inflation) //Divison by zero 

return avgInflation 
0

어때?

def myTest(file): 
    with open ('filename', 'r') as f: 
     inflation = [] 
     header = 1 
     for line in f: 
      if header == 1: 
       header += 1 
       continue 
      else: 
       infl = line.split(",")[2] 
       inflation.append(float(infl)) 

     avgInflation = sum(inflation)/len(inflation) 

    return avgInflation 

이 문제가 해결되어야한다고 생각합니다.

+0

죄송합니다. 이전 코드와의 오류에 대해 사과하십시오! –