Programming/Python

[코딩도장-파이썬] if 조건문

Supreme_YS 2020. 11. 12. 11:28

*shell 환경이 아닌 스크립트(script) 환경에서 작업했기 때문에 print로 출력. shell 환경이라면 print 생략 가능


●조건문은 특정 조건일 때 코드를 실행하는 문법이다. 

예. 

if 비가 온다면:

  우산을 가지고 나간다.

if 날씨가 춥다면:

  코트를 입고 나간다.

if 날씨가 덥다면:

  반소매에 얇은 옷을 입고 나간다.

 

●의사코드(pseudo code, 수도코드) : 사람의 언어로 프로그래밍 언어를 표현한 것이다.

예. x = 10 #파이썬코드

변수 x에 10 할당 # 한글로 표현한 의사 코드

 

●if 조건문은 if에 조건식을 지정하고 :(콜론)을 붙이며 다음 줄에 실행할 코드가 온다. 이때 실행할 코드는 반드시 들여쓰기를 해야 한다.

형태 : if 조건식 :

              코드

결과값
x = 10 
if x == 10: 
    print('10 입니다') 
10 입니다

if 조건식의 기본 형태 출처. 코딩도장

파이썬에서 if 조건문은 if 조건식: 형식으로 사용하며 그다음 줄에는 들여쓰기를 한 뒤 조건식이 만족할 때 실행할 코드를 넣는다. 특히 이 조건식이 만족할 때 실행할 코드를 if 본문(if body)이라고 부른다. 파이썬은 =을 할당으로 사용하고 있으므로 값을 비교할 때는 ==을 사용해야 한다. 또한, 조건식에 : (콜론)을 빠뜨리지 않았는지 확인도 필요하다.

if 조건문의 실행 흐름 출처. 코딩도장

● if 조건문에서 코드를 생략하기

if 다음 줄에 pass라는 특별한 키워드를 넣는다. 여기서 pass는 아무 일도 하지 않고 그냥 넘어간다는 뜻. 파이썬에서는 if 다음 줄에 아무 코드도 넣지 않으면 에러가 발생하므로 if 조건문의 형태를 유지하기 위해 pass를 사용한다.

결과값
y = 10
if y == 10:
    pass #TODO : x가 10일 때 처리가 필요
pass는 아무 일도 하지 않는 코드라서 의미가 없을 것 같지만 나중에 작성해야 할 코드를 표시할 때 사용할 수 있다. 즉, 다음과 같이 pass만 넣고 나중에 할 일은 주석으로 남겨놓는 방식

*TODO

TODO는 해야 할 일이라는 뜻인데 보통 주석에 넣는다. 이렇게 TODO를 넣어 두면 검색으로 쉽게 찾을 수 있다. 그래서 프로그래머들은 주석에 TODO 이외에도 FIXME, BUG, NOTE 등과 같이 코드는 아니지만 일관된 주석을 사용한다.

 

● if 조건문과 들여쓰기 :  if 다음에 오는 코드들은 반드시 들여쓰기 깊이가 같아야 한다.

x = 10
if x == 10:
    print('x에 들어있는 숫자는')
        print('10 입니다.') # unexpected indent 에러 발생

 

if 다음에 오는 코드들은 반드시 들여쓰기 깊이가 같아야 한다.

x = 5 # x에 5를 할당
if x == 10: # x값이 5이므로 조건식을 만족하지 않는다.
    print('x에 들어있는 숫자는')
print('10 입니다')

결과값
x = 5 # x에 5를 할당 
if x == 10: # x값이 5이므로 조건식을 만족하지 않는다. 
    print('x에 들어있는 숫자는') 
print('10 입니다')
10 입니다

x가 5라서 if의 조건식을 만족하지 않으므로 다음에 오는 print('x에 들어있는 숫자는')는 실행이 되지 않는다. 그런데 print('10입니다.')는 실행이 된 이유는 들여쓰기가 없어서 if와는 상관없는 코드가 되었기 때문이다.

즉, if 다음 줄에 들여쓰기가 된 코드는 if의 영향을 받아서 조건식에 따라 실행이 결정되지만 들여쓰기가 되지 않은 코드는 항상 실행된다. 들여쓰기 하나 때문에 의도치 않은 동작이 되었는데(x가 5일 때는 '10입니다.'가 출력되지 않아야 하는데 출력됨) 이런 코드는 일단 실행이 되기 때문에 잘못된 부분을 찾기가 쉽지 않다. 자신이 의도한 부분과 코드의 들여쓰기가 일치하는지 항상 확인이 필요함.

 

★파이썬에서 :(콜론)이 나오면 그 다음 줄부터는 무조건 들여쓰기를 한다는 점만 기억하면 됨.

 

if와 들여쓰기 칸 수

if에서 처음부터 들여쓰기를 4칸으로 했다면 계속 4칸으로 유지하고, 2칸으로 했다면 계속 2칸으로 유지한다. 어떨 땐 4칸 어떨 땐 2칸 이렇게는 안 된다. 들여쓰기를 공백 4칸에서 2칸으로 수정해서 실행해보면 에러 없이 잘 실행된다. 들여쓰기 칸 수 자체는 문법으로 정해져 있지 않으며 오직 들여쓰기 깊이로만 판단한다. 하지만 파이썬 코딩 스타일 가이드(PEP 8)에서는 공백 4칸으로 규정하고 있으므로 4칸을 권장.

 

●중첩 if 조건문

 

x = 15 

if x >= 10: 
    print("10 이상입니다.") 

    if x == 15: 
        print("15 입니다.") 

    if x == 20: 
        print("20 입니다.")

-> x값에 15를 할당, if 문의 조건 확인 --> 15 >= 10 이므로 조건이 참(True) -> if body로 진입 -> 진입 후 새로운 if 발견 -> 15 == 15 이므로 두 번째 if문의 if body인 print("15 입니다.") 실행 -> 다음으로 세 번째 if 문 조건은 15 == 20이 되므로 거짓(False) 따라서 세번째 if body를 실행하지 않음. 따라서 결과값은 10 이상입니다. 15 입니다. 

 

● input을 사용하여 사용자가 입력한 값을 변수에 저장하고 if 조건문으로 값 비교하기

 

x = int(input())          # 입력받은 값을 변수에 저장 
  
if x == 10:               # x가 10이면 
    print('10입니다.')    # '10입니다.'를 출력 
  
if x == 20:               # x가 20이면 
    print('20입니다.')    # '20입니다.'를 출력 

만일, 값을 10으로 입력했으면 10입니다. 출력. 20이면 20입니다. 출력