2011-11-20 2 views
0

저는이 특정 부분에 붙어있는 것을 제외하고는 거의 모든 프로그램을 작성했습니다. 나는 모든 학생들이 최종 성적을 과정의 통계로 파악할 수 있도록 평균을 작성해야합니다. 학생 이름과 최종 학년이 외부 파일에 추가되었습니다 (더 많은 학생과 성적을 추가 할 수 있음을 명심하십시오).파이썬 프로그램에서 산술 평균을 찾는 데 도움이 필요합니다.

여기까지 내가 지금까지 가지고있는 것이고, 어떤 의견도 높이 평가됩니다. 6 호선 (sum = sum + eval(line))에서

fname = input("What is the file name?") 
file1 = open(fname,'r') 
sum = 0.0 
count = 0 
for line in file1: 
    sum = sum + eval(line)          
    count = count + 1 

print("\nThe average of the numbers is", sum/count) 

나는 나는 이것이 무엇을 의미하는지 알고 파이썬에 대해 충분히 모른다

syntax error: unexpected EOF while parsing (<string>, line 1) 

가 계속. 누군가 코드에서 나를 보여줄 수 있습니까? 그리고 참조 용 외부 파일 형식은 다음과 같습니다.

tom jones,100, 
bill smith,89, 

등등.

+0

가 이해되지 않는다 :


는 추가 신용 들어, 당신이 읽고 파일을 구문 분석하는 Python csv library를 사용하려고 할 수 있습니다. 행에서 정수를 파싱합니다. (또는 실제로 쉼표로 분리되어 정수가 아니라면 쉼표로 분리하여 반복하고 ints를 구문 분석하십시오.) – Corbin

+0

'eval'? ARGH! (저는 JavaScript 커뮤니티에서 널리 사용되는 표현식을 인용합니다 : "eval is evil") –

+0

'csv' 모듈을 사용할 수 있습니다. –

답변

0

당신이 점점 오류 :

Traceback (most recent call last): 
    File "stud.py", line 6, in <module> 
    sum = sum + eval(line) 
    File "<string>", line 1 
    tom jones,100, 
      ^
SyntaxError: invalid syntax 

당신은 파이썬 표현으로 "tom jones,100,"를 평가하려고하기 때문이다. 이것은 유효한 파이썬 표현이 아닙니다. 말할 것도없이 임의의 문자열에 eval()을 호출하는 것은 매우 나쁜 생각입니다.

split 줄을 사용하려면 ','을 구분 기호로 사용하십시오. 그런 다음 두 번째 필드 (100)를 가져와 int으로 변환해야합니다. 이 intsum (또는 total)에 추가하고 계속 진행할 수 있습니다.

N.B : sum()은 파이썬에서 기본 제공되는 함수이며 같은 이름의 변수로 숨 깁니다. total과 같은 다른 저작물을 사용하는 것이 좋습니다.

행운을 빈다.

+0

코드를 보지 않고서는 이해가 안됩니다 ... 죄송합니다.이 책에 신입생이 아닙니다. –

+0

나는 숙제를 할 수 없습니다. 나는 당신의 코드가 그것이 올바른 방향으로 행동하고있는 방향으로 행동하고있는 이유에 대해서만 설명 할 수 있습니다. 내 대답의 링크를 따르는 경우 작업을 완료하는 데 필요한 정보가 충분해야합니다. – Johnsyweb

+0

int (line.split (',', 1) [1])이 맞습니까? –

0

먼저, Python interactive mode에 들어가야합니다. 어떤 일이 발생하는지 즉시 볼 수 있기 때문에 작은 코드로 재생하기가 더 쉽습니다.

eval을 사용하는 대신 str.split을 사용하여 문자열을 값으로 나눌 수 있습니다. 대화 형 인터프리터를 시작하고 선으로 다음 코드 줄을 실행

a = '1,2,3' 
b = a.split(',') 
print b 
print b[0] 
print b[0] + b[1] 
print float(b[0]) + float(b[1]) 

이유 b[0] + b[1] 인쇄 그들은 여전히 ​​문자열이기 때문에 '(12)'가있다. Python이 예상대로 작동하기 전에 float()을 사용하여 숫자로 처리하도록 지시해야합니다.

라인을 evaling
# Tell Python that you are going to use the csv (comma separated value) library 
import csv 

# Open the file 
file = open('marks.csv') 

# Use the csv library to read the file, instead of using "for line in file1" 
markReader = csv.reader(file) 

# Using this for means that each line is read as a list of strings. 
for row in markReader: 

    # Now we get the string we want from the list. 0 would get the name, 1 gets the mark 
    number_as_string = row[1] 

    # We now make the string an actual number, because if we add '10' + '20', we get '1020' instead of 30.   
    number = float(number_as_string) 
+0

고침, 고마워. 필자는 라이브러리 참조 예제의 코드를 수정했다. 숙제라는 질문은 남자에게 고기를 가르쳐주십시오. –

+0

나는 숙제를 할 사람을 얻으 려하지 않고있다. 나는 대부분의 프로그램에 도움이 필요하다고 말했고, 11 주 과정이라는 것을 이해하지 못하고, 배울 필요가있는 everyhting을 배울 수있는 충분한 시간이 아니다. 나는 지금까지 사기꾼이다. 감사합니다. –

+0

당신에게 보여줄 프로그램의 전체 sh * t와 caboodle을 보낼 수 있습니다. –

관련 문제