코딩 스쿨에 오신것을 환영합니다~~

질의응답 게시판

 
예제 5-11 질문드립니다.
권 * 철 | 2018-12-10

scores = [[75,83,90],[86,86,73],[76,95,83],[89,96,69],[89,76,93]]

sum = 0

for i in range(len(scores)):
       
    for j in range(len(scores[i])):
        sum = sum + scores[i][j]

    avg = sum / len(scores[i])

    print('%d번째 학생의 합계: %d, 평균: %.2f' %(i+1, sum, avg))


이렇게 했을 때 와

scores = [[75,83,90],[86,86,73],[76,95,83],[89,96,69],[89,76,93]]

for i in range(len(scores)):
    sum = 0    
    for j in range(len(scores[i])):
        sum = sum + scores[i][j]

    avg = sum / len(scores[i])

    print('%d번째 학생의 합계: %d, 평균: %.2f' %(i+1, sum, avg))

이렇게 했을 때

<전자>
 RESTART: C:/Users/CDL 2F A-7-6/AppData/Local/Programs/Python/Python37-32/startpython5-11.py 
1번째 학생의 합계: 248, 평균: 82.67
2번째 학생의 합계: 493, 평균: 164.33
3번째 학생의 합계: 747, 평균: 249.00
4번째 학생의 합계: 1001, 평균: 333.67
5번째 학생의 합계: 1259, 평균: 419.67

<후자>
 RESTART: C:/Users/CDL 2F A-7-6/AppData/Local/Programs/Python/Python37-32/startpython5-11.py 
1번째 학생의 합계: 248, 평균: 82.67
2번째 학생의 합계: 245, 평균: 81.67
3번째 학생의 합계: 254, 평균: 84.67
4번째 학생의 합계: 254, 평균: 84.67
5번째 학생의 합계: 258, 평균: 86.00

이렇게 값의 차이가 나는 데요.
sum=0 의 위치에 따라 어떤 이유로 인해서 차이가 나는지 모르겠습니다.

  • 관 * 자
  • 2018-12-10 (17:19)
<전자>의 경우에는 성적 합계를 나타내는 변수 sum이 처음 한번만 0 초기화되기 때문에 for의 반복루프가 수행되면 모든 성적의 합계가 구해집니다.

따라서, 변수 sum은 <후자>에서와 같이 각 학생의 성적 합계가 구해지기 전에 초기화 되어야 합니다.
for i in range(len(scores)): 
    sum = 0 
에서 len(scores)가 5가 되고 i는 0~4까지의 값을 가지는데 이 i의 값은 각 학생 하나 하나를 의미하기 때문에 각 학생의 성적합계가 구해지기 전에 sum이 0으로 초기화 되어야 하는 것입니다.

도움이 되시길...