본문 바로가기

[일상봇 만들기] 나의 하루하루를 도와줄 친구!

level_02_part_2

 

Level

02

02_제어문과 반복문 기초

 

 1_제어문의 구조

 

설명 01

 SHAPE  \* MERGEFORMAT

if 불리언:

    불리언이 True 인 경우 실행되는 코드

else:

    불리언이 False 일 경우 실행되는 코드



예)

age = 3

if age < 5:

    print('영 유아 입니다.')

else:

    print('영 유아가 아닙니다.')

if 의 의미는 '만약 ~ 이라면' 이지요.

만약 불리언이 참 이라면, 들여쓰기 된 부분을 실행 하겠다는 의미를 갖고 있습니다.

 

불리언이 거짓인 경우, 다음 단계인 else로 넘어갑니다.

만약 ~ 이라면 이렇게, 아니면 저렇게

두 가지 경우의 수가 있는 것입니다.

 

여기에서 더 나아가 두 가지를 더 다뤄보겠습니다.

 

1). 참인 경우에만 코드를 실행하고, 거짓인 경우에는 아무것도 하지 않게 하려면

2). 두 가지를 넘는, 여러 가지 경우의 수가 있다면

 

 

 

2_참인 경우에만 코드를 실행하고, 거짓인 경우에는 아무것도 하지 않게 하려면

 

설명 01

 SHAPE  \* MERGEFORMAT

if 불리언:

    불리언이 True 인 경우 실행되는 코드



예)

age = 3

if age < 5:

    print('영 유아 입니다.')

생각보다 너무 간단했나요?

else 부분을 지우면 됩니다.

 

이러면 이렇게, 저러면 저렇게 만드는 것이 if ~ else 라고 하였죠?

'저러면 저렇게' 부분을 지우는 것으로 간단하게 구현할 수 있습니다.

 

 

3_두 가지를 넘는, 여러 가지 경우의 수가 있다면

 

설명 01

 SHAPE  \* MERGEFORMAT

if 불리언_1:

    불리언_1 이 True 인 경우 실행되는 코드

elif 불리언_2:

    불리언_2 이 True 인 경우 실행되는 코드

else:

    위 모든 조건이 False 일 경우 실행되는 코드



예)

age = 3

if age < 5:

    print('영 유아 입니다.')

elif age < 20:

    print('학생 입니다.')

elif age < 25:

    print('아직 어른이 아닙니다.')

else:

    print('어른 입니다.')

if 에서는, 오른쪽 불리언이 False 일 경우 다음 단계인 else 로 내려갔었죠?

if 와 else 사이에 elif 라는 것을 추가하면 새로운 경우의 수를 추가할 수 있습니다.

elif 는 여러 번 넣을 수 있어요.

 

$$ 중요한 점

맨 처음에 if 로 판별한 후, 다음 단계로 한 단계씩 내려가면서 불리언을 판별하게 됩니다.

if 부터 else 를 만날 때 까지 순서대로 내려오면서 확인하기 때문에 순서 가 중요합니다.

 

[순서도 그림 첨부]

[순서도 그림 첨부]

else 까지 내려오는 것은 if 와 모든 elif 에서 False 인 경우 입니다.

 

 

 

 

 

4_(while) 반복문의 구조

 

설명 01

SHAPE \* MERGEFORMAT

while 불리언:

    반복할 부분



예)

age = 3

while age < 5:

    print('영 유아 입니다.')

    age = age + 1

while 문은 기본적으로 if 문과 동일하게 구성되어있습니다.

if 문에서의 '만약 불리언이 참 이라면, 들여쓰기 된 부분을 실행 하겠다는 의미'를 동일하게 갖고 있습니다.

 

딱 한가지 다른 점은

들여쓰기 된 부분을 실행하고 나서 불리언이 참인지를 다시 한 번 확인한다는 것입니다.

이렇게 다시 한 번 확인하는 과정이 있기 때문에 반복이 일어나게 됩니다.

 

만약 불리언이 참 이라면, 들여쓰기 된 부분을 실행합니다.

이 때 불리언이 참이라면 들여쓰기 된 부분을 다시 수행하고, 불리언이 참인지를 다시 확인합니다. 

 

볼드체는 if 문과 동일한 부분입니다.

볼드체가 아닌 부분은 while 문에서 반복되는 영역입니다.

 

 

 

 

 

 

5_(for) 반복문의 구조

 

설명 01

SHAPE \* MERGEFORMAT

 

for 변수명 in 묶음:

    반복할 부분



예)

sample = [1, 3, 5, 7, 9]

for i in sample:

    print(i)

for 문을 이해하는 방법:

1) in 오른쪽의 '묶음' 으로부터 하나를 꺼내 in 왼쪽의 '변수' 에 대입합니다.

2) (if 문과 동일하게) 불리언이 참일 경우 들여쓰기 된 부분을 실행합니다.

3) -> 1) 로 돌아가 새롭게 하나를 꺼내서 반복합니다.

 

묶음 안에 5 개가 있으면 5번 꺼낼 수 있으므로

반복이 5번 일어나게 됩니다.

 

$$ 조금 더 깊게 알아보기

(in 을 불리언으로 이해하는 방법)

이 불리언은 묶음으로부터 꺼낸 값이 묶음 안에 존재하는지를 나타내는 것이므로 항상 '참' 입니다.

항상 '참' 인 경우가 묶음 안에 들어있는 개수만큼 있기 때문에, 그 개수만큼 반복합니다.

 

 

 

5_ 조건문과 반복문 중간정리

 

설명 01

SHAPE \* MERGEFORMAT

 

[3 가지 사이의 공통점]

1) 조건 부분과 실행 부분으로 이루어져 있습니다.

2) 조건이 참인 경우 들여쓰기 된 부분이 실행됩니다.



if 불리언:                <- 조건 부분

    들여쓰기 된 부분        <- 실행 부분



while 불리언:           <- 조건 부분

    들여쓰기 된 부분        <- 실행 부분



for 변수명 in 묶음:    <- 조건 부분

    들여쓰기 된 부분        <- 실행 부분 



  

[while 과 for 의 공통점]

1) 들여쓰기 된 부분을 실행 한 이후 조건에 따라 반복합니다.



[while 과 for 의 차이점]

반복하는 기준이 다릅니다.

while 은 조건 부분이 '거짓' 이 될 때 까지 반복합니다.

for 는 in 기준 오른쪽인 묶음의 개수만큼 반복합니다. 

 

지난 시간에 딕셔너리 구조를 다루었습니다.

날씨와, 뉴스제목 정보를 폴더 트리구조로 이해해 보았죠.

 

뉴스정보와 날씨가 여러 개 있었지만 하나씩만 조회했었는데요,

이제 우리가 배운 반복문으로 전부 알아볼 수 있겠어요!

 

[예제문제]

네이버에서 뉴스 실시간으로 가져오기 첫걸음(웹 자료형 XML)

   우리에게 필요한건 단 하나(RSS)

   예제코드:

import requests

import xmltodict

url = ''' 접속할 RSS주소를 입력 '''

req = requests.get(url).text.encode(encoding="ISO-8859-1")

diction = xmltodict.parse(req)

for news in diction['rss']['channel']['item']:

    print(news['title'])
    
# diction['rss']['channel']['item'] 까지가 리스트 이었기 때문에, 하나씩 뽑아올 수 있는 for 문을 사용할 수 있어요.

# 하나를 뽑아온 후, 이것은 딕셔너리처럼 '키' 로 조회할 수 있기 때문에 대괄호 안에 키를 넣어 조회하였습니다.

 

 

[도전문제]

날씨에 대한 예제코드를 보고, 아래 조건대로 개선해보기

    - day 에는 오늘(0), 내일(1), 모레(2) 정보가 있습니다.

     이를 이용해 오늘의 정보만 출력되게끔 제어 / 반복문을 만들어주세요.

예제코드:

import requests

import xmltodict

url = 'http://www.kma.go.kr/wid/queryDFSRSS.jsp?zone=1117052000'

req = requests.get(url).text

diction = xmltodict.parse(req)

for weather in diction['rss']['channel']['item']['description']['body']['data']:

    print(weather['wfKor'])
    
# 위의 예제와 사실상 동일합니다.



# diction['rss']['channel']['item']['description']['body']['data'] 까지가 리스트 이었기 때문에,

# 하나씩 뽑아올 수 있는 for 문을 사용할 수 있어요.

# 하나를 뽑아온 후, 이것은 딕셔너리처럼 '키' 로 조회할 수 있기 때문에 대괄호 안에 키를 넣어 조회하였습니다.

 

'[일상봇 만들기] 나의 하루하루를 도와줄 친구!' 카테고리의 다른 글

level_03_part_2  (0) 2019.07.03
level_03_part_1  (0) 2019.07.02
level_02_part_1  (0) 2019.06.20
mok_cha  (0) 2019.06.20
level_00_들어가며  (0) 2019.06.20