return은 최종결과값을 뱉어줌
(메모리상에서 함수는 다른 메모리에 따로 저장되어있다. 메인함수를 계산하는 중
함수를 만나면 함수가 속한 메모리로 점프하여 따로 함수를 계산한 뒤, 함수의
결과값을 다시 메인함수쪽으로 던져주는 것이다. 이것이 값을 반환한다는 뜻이다.
값을 반환(return)
def add(a,b)
c=a+b
return c
값을 추출
반환과는 다른 개념. 한 리스트에서 맨 뒤의 값을 던져주고 그 값을 지워주는것. *반환이라는 개념이 추출에 포함되는 경우도 있다.
var.a.pop( ) 가 대표적인 경우이다.
실습문제 1. 1904년부터 2021년까지 일별 최고기온 구하기
import csv
f=open('파일주소') #파일주소를 복사할 때 나오는 역슬러시를 슬러시로 바꿔야함. 아직 파일은 사람이 텍스트를 읽을 수 있는 파일형태가 아님.
main_data=csv.reader(f) #csv패키지의 내장함수 reader로 파일 f를 읽을 수 있게 한다.
print(main_data) #main_data 파일을 스파이더에서 읽을 수 있도록 출력한다.
temp= [ ] #temp가 비어있는 상태
for row in main_data: #for함수를 main_data의 각 항목 row에 대하여
temp.append(row) #temp에 한 줄씩 추가로 row에 있는 데이터를 넣는다.
f.close() #파일 f를 닫는다.
1. 데이터 variable explorer를 확인해보면 데이터 전처리가 필요함을 알 수 있다, (데이터가 서로 맞지않는 경우, 누락된 경우 등이 있음)
2. 실제 데이터만 추출
temp1=[ ]
for row in temp[12:]:
temp1.append(row)
3. 최고기온 데이터에 접근 >> float로 데이터타입바꾸기 >> 최대값구하기 (아래는 예시)
A=[3,1,5,1,8]
max=0
for a in A: #A의 요소들을 a에 차례대로 넣어서 비교한 후 참이면 a에 값을 넣고 아니면 다시 for문으로 돌아감.
if max<a:
max=a
for idx, ~ 대신에 아래 함수를 넣어보면 에러메시지가 뜬다.
ValueError: could not convert string to float: '' >> 중간에 비어있는 데이터들 때문이다.
Enumerate함수로 비어있는 열 에러 확인하기
A=[1,2,3,4,5]
for idx, row in enumerate(A):
print(idx)
print(row)
#enumerate함수는 변수를 2개가 필요로함. 해당 루프를 몇번째 반복하는지 알게하는 idx값이 필요하다.
idx에 0이 들어가고, row에는 1이 들어간다. 0, 1 출력
다음루프에서는 idx에 1이 들어가고, row에는 2가 들어간다. 1, 2 출력
결과: 0112233445
enumerate를 활용해서 아래 예제를 실습해보자
이 경우 자료가 비어있는 부분에 오류가 생긴다. 이 때 if문을 활용해서 비어있는 부분을 skip할 수 있도록 코드를 짠다.
if문을 사용하면 could not convert string to float 오류는 사라지지만 list index out of range라는 또다른 오류가 생긴다.
print(temp1[41033]) 해보면 빈 리스트 [ ] 가 나오는 것을 확인가능하다.
이 경우 if row를 추가해서 리스트가 비어있지 않은 경우(참인경우) 스트링형태인 if row[4]가 참인경우 float(row[4])를 실행시킨다.
자, 다시 처음으로 돌아가서 최고기온을 구해보자.
max라는 방을 만들고, enumerate함수와 if 함수를 써서 빈 리스트값이 아닌 경우 if row[4] 스트링타입의 인덱스를 호출한다. 만약 if row[4]를 가지고 max를 구한 뒤 print(max)를 하면 39.6 라는 값이 도출된다.
이제 36.9도가 나온 날짜를 찾아보자
리스트가 [ ] 공백이 아닌경우, 4번째 줄의 데이터가 이전에 구한 max값과 같다면 row[0]값을 출력한다.
선생님의 코드
max = 0
for idx, row in enumerate(temp1):
if row:
if row[4]:
if max < float(row[4]):
max = float(row[4])
high_temp_index = idx
print(temp1[high_temp_index][0], max)
print(temp1[high_temp_index])
실습문제 2 : 본인 생일의 최고 기온을 구하여라
위의 예제와 아래 예제는 다르다.
리플: 프로그래밍 코드 공유하는 사이트
'살콤아내 자기계발 > 파이썬' 카테고리의 다른 글
점프투파이썬 2주차 정리 (0) | 2021.04.12 |
---|---|
POSTECH 데이터사이언스를 위한 통계학입문 2(1-4주차 요약) (0) | 2021.04.08 |
POSTECH 데이터사이언스를 위한 통계학입문 1(1-4주차 요약) (0) | 2021.04.07 |
POSTECH 컴퓨터 공학 입문 2 (1-4주차 요약) (0) | 2021.04.07 |
점프투파이썬 1주차 112pg. 연습문제풀이 (0) | 2021.04.07 |