살콤아내 자기계발/파이썬

점프투파이썬 1주차 실습

살콤아내 2021. 4. 8. 10:46
728x90
반응형

return은 최종결과값을 뱉어줌
(메모리상에서 함수는 다른 메모리에 따로 저장되어있다. 메인함수를 계산하는 중
함수를 만나면 함수가 속한 메모리로 점프하여 따로 함수를 계산한 뒤, 함수의
결과값을 다시 메인함수쪽으로 던져주는 것이다. 이것이 값을 반환한다는 뜻이다.

 

값을 반환(return)
def add(a,b)
     c=a+b
     return c

 

값을 추출
반환과는 다른 개념. 한 리스트에서 맨 뒤의 값을 던져주고 그 값을 지워주는것. *반환이라는 개념이 추출에 포함되는 경우도 있다.

var.a.pop( ) 가 대표적인 경우이다.

 

 

gion.csv
1.15MB

 

실습문제 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 : 본인 생일의 최고 기온을 구하여라

 

 

위의 예제와 아래 예제는 다르다.

 

 

 

 

 

리플: 프로그래밍 코드 공유하는 사이트

replit.com/

 

The collaborative browser based IDE

Replit is a simple yet powerful online IDE, Editor, Compiler, Interpreter, and REPL. Code, compile, run, and host in 50+ programming languages.

replit.com

 

728x90
반응형