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

질의응답 게시판

 
파이썬입문(예제중심) 364페이지 11.4.3.(ex11.ipynb) 질문있습니다.
이 * 청 | 2023-01-12

궁금한 점이 있어 질문드립니다.

364쪽 예제 11-14에서는 for 반복구문을 한번만 사용했는데요(15행)

아래와 같이 제주, 고산, 성산, 서귀포 마다 for 반복구문을 사용하니
제주에만 max_jeju값이 계산된 값으로 나오더라구요..

for 구문을 단 한 번 쓰는 방법과, 네 번 쓰는 방법의 결과 차이가 왜 나타나는 걸까요?

----------------------------------------------------------------------------

for line in lines:
    if line[1]=="제주" and int(line[2][5:7])==month:
        if float(line[4])>max_jeju:
            max_jeju=float(line[4])


for line in lines:
    if line[1]=="고산" and int(line[2][5:7])==month:
        if float(line[4])>max_gosan:
            max_gosan=float(line[4])


for line in lines:
    if line[1]=="성산" and int(line[2][5:7])==month:
        if float(line[4])>max_sungsan:
            max_sungsan=float(line[4])


for line in lines:
    if line[1]=="서귀포" and int(line[2][5:7])==month:
        if float(line[4])>max_suguipo:
            max_suguipo=float(line[4])

print("{}월 제주 최고기온:{:.1f}".format(month, max_jeju))
print("{}월 고산 최고기온:{:.1f}".format(month, max_gosan))
print("{}월 성산 최고기온:{:.1f}".format(month, max_sungsan))
print("{}월 서귀포 최고기온:{:.1f}".format(month, max_suguipo))



  • 관 * 자
  • 2023-01-12 (21:38)
안녕하세요.

예제에서 CSV 파일을 읽어 오는 것은 다음과 같습니다.

f = open('jeju_2019.csv', 'r', encoding='utf-8')
lines = csv.reader(f)


여기서 lines 변수(버퍼)에 저장된 데이터는 for문에 한줄 한줄 읽어 올때 마다 읽어 오는 포인터 위치가 바뀝니다.

따라서 for문 루프가 한번 돌면 그 다음 데이터를 가져올 것이 없어서 제주 max값만 구해지는 것입니다. 

for로 한줄 읽어올때마다 각각의 if문으로 제주, 고산, 성산, 서귀포에 해당되는 지를 체크하는 것입니다.

만약 for문을 4번 사용하시려면 각각의 for문 앞에 CSV 파일을 닫고 다시 CSV 열어서 데이터를 가져와서 사용하여야 합니다.

결론적으로 예제 소스에서와 같이 for문은 한번만 사용하시는 것이 맞습니다.