우아한 개발계발 블로그

따라하며 배우는 파이썬과 데이터 과학 (4) - IF! 조건을 따져 실행해 보자 본문

Study/따라하며 배우는 파이썬과 데이터 과학

따라하며 배우는 파이썬과 데이터 과학 (4) - IF! 조건을 따져 실행해 보자

W00_Ah 2021. 5. 30. 19:30

 

2021.05.28 - [Study/따라하며 배우는 파이썬과 데이터 과학] - 따라하며 배우는 파이썬과 데이터 과학 (3) - 연산자로 연산을 해 보자

 

따라하며 배우는 파이썬과 데이터 과학 (3) - 연산자로 연산을 해 보자

2021.05.28 - [Study/따라하며 배우는 파이썬과 데이터 과학] - 따라하며 배우는 파이썬과 데이터 과학 (2) - 값을 담아 다루어 보자 우리는 지난 글에서 데이터를 담을 수 있는 변수를 알아봤다. 이제

w00-ah.tistory.com

우린 파이썬 프로그래밍을 하기위한 '그릇'을 만들줄 알고 그 그릇을 어떻게 사용할지도 알아봤다.

이번 장에서는 프로그램의 흐름을 제어해볼 것이다.


4.1 제어 구조

우선 우리가 프로그램을 설계할 때, 사용할 수 있는 세가지의 기본적인 제어 구조가 있다.

  • 순차 구조(Sequence) - 여러 명령이 순차적으로 실행되는 구조
  • 선택 구조(selection) - 여러 개 중 하나의 명령문을 선택하여 실행하는 구조
  • 반복 구조(iteration) - 동일한 명령이 반복되면서 실행되는 구조

아래 그림은 위의 세가지 구조를 순서도(flow chart)로 나타낸 것이다.

앞으로 사용할 용어 중 'if','elif',' else' 는 선택 구조 'for 와 'while' 은 반복 구조이다.


4.2 if ?

if 는 어떤 조건식(condition expreession)을 인자로 받아서, 그 값이 참(True)인지 거짓(False)인지에 따라 해당 if 의 구문을 실행할 지 말지를 결정하는 예약어이다. 조건식에는 어떠한 값이 들어가도 상관없지만 이전의 글을 자세하게 읽었다면 Boolean 에서 0 과 False 가 아닌 모든 값은 파이썬에서 True 로 인식되는 것을 알 수 있을 것이다.

if (Condition):
	Code

위와 같은 구조를 if 문 (조건문) 이라고 한다. 그럼 Condition에 들어갈 조건식에는 값, 변수, 함수, 수식 등이 들어가면 된다. 아래를 참고하자. idle에 실행하면 좋다.

True 		#True
1 == 1 		#True
'1' == '1'	#True
False		#False
1 > 2		#False

if '참':
	print("참 입니다")
# 조건식 자리에 "참"이라는 String 값이 들어가게되고 이는 True인식되기 때문에
# print("참 입니다") 명령어가 실행된다.

위의 코드에서 보면 if 아래 print("참입니다") 가 들여쓰기가 되어 있는 모습을 볼 수 있는데, 이는 파이썬의 문법이라 꼭 지켜줘야한다. 설정에서 설정할 수 있지만 보통 Default로 4칸의 띄어쓰기(탭키 한번)으로 들여쓰기를 할 수 있으니 꼭 지켜줘야한다.

그리고 여기서 동일한 들여쓰기를 공유하는 명령어들을 묶어서 Block 이라고 부르니 알아두자.

자세한 내용은 아래 코드를 보면서 참고하자

A = True
B = False
if A:
	print("A의 블록")
    
if B:
	print("B의 블록")
    
# >>> A의 블록
# B변수의 값이 False 이므로 if B 블록은 실행되지 않는다.

 위의 코드를 그대로 복사해서 실행해보면, A의 값은 True로 if A 블록은 실행되지만 B의 값은 False로 if B는 실행되지 않는다.

A = False
B = False
if A:
	print("A가 참")

# A가 False 이므로 A 블록을 무시하고 B를 판단한다    
elif B:
	print("B가 참")
    
# B가 False 이므로 B 블록을 무시하고 else 블록으로 넘어간다
else :
	print("무엇도 참이 아님")
# else 블록을 실행함

# >>> 무엇도 참이 아님
 

위의 코드를 보면 elif 와 else의 사용 예를 볼 수 있는데 말로 풀어서 이해하면 아주 쉽다.

  • if  A :  만약 A 라면, {블록} 해라
  • elif  B :  만약 B 라면, {블록} 해라
  • else  :  아니면, {블록} 해라

if에 연결되는 elif 는 여러개 쓸 수 있으나 else는 여러개 쓸 수 없으니 염두해두자.


4.3 실전

활용 예시를 보면서 어떻게 쓰이는 지 알아보자

 

  • 게임 점수를 입력 받고 해당되는 결과를 출력하는 프로그램
game_score = int(input("게임 점수 : "))
if game_score >= 10000:
    print("고수입니다.")
else:
    print("입문자입니다.")

# input() 함수는 () 괄호안에 문자열을 넣을 수 있고
# 실행시 괄호안에 문자열을 출력하고, 이후 사용자로 부터 입력을 대기 받는 상태가 된다
# 사용자로 부터 입력이 들어오면 이를 문자열로 반환한다.

# int() 함수는 () 괄호 안에 있는 객체를 int형으로 형변환 한다.
# ex: int("123")
# >>> 123 #문자열 123을 넣으면 정수 123으로 바꿔준다.
  • 점의 좌표 정수 x와 y를 입력받고 점이 어디에 위치하는지 출력하는 프로그램 
from math import sqrt

# math라는 모듈에서 sqrt 함수를 불러와서 사용한다는 명령어
# from {모듈 이름} import {함수 이름} >-> {모듈 이름}으로 부터 {함수 이름}을 가져옴

x, y = map(int, (input("점의 좌표 x, y를 입력하시오 : ")).split(" "))

# 사용자로 부터 '1 2' 와 같은 포맷으로 입력을 받고
# 문자열의 메소드인 split을 통해 " "(공백)으로 문자열을 나눔
# 나눠진 값들은 list 객체 로 반환되는데
# 이를 map() 함수로 list 객체의 내부 요소들에 int() 함수를 적용시킴
# 그럼 아까 list 객체의 내부요소들은 int 자료형으로 형변환이 되었고
# 이를 x 와 y 변수에 동시 할당문으로 값을 할당하는 명령어

# sqrt() 함수는 ()괄호 안의 값의 제곱근을 반환한다.

# 윈점으로 부터 압력받은 점까지의 거리를 계산하는 수식
if sqrt((3-x) ** 2 + (4-y) ** 2) > 10:
	print("원의 외부에 있음")
elif sqrt((3-x) ** 2 + (4-y) ** 2) < 10:
    print("원의 내부에 있음")
else:
    print("원 위에 있음")

처음보는 굉장히 긴 코드가 있어서 당황스러울 수 있으나 혹시 주석으로도 이해가 안될 수 있어서 아래 다 풀어서 써놨다.

x, y = map(int, (input("점의 좌표 x, y를 입력하시오 : ")).split(" "))

입력값 = input("점의 좌표 x, y를 입력하시오 : ")
입력값들 = 입력값.split(" ")
x = int(입력값들[0])
y = int(입력값들[1])

4줄 짜리 코드를 한줄로 줄일 수 있는게 대단하지 않은가?  물론 코드는 보기좋고 이해하기 좋은 코드가 좋다.

굳이 어떻게든 코드를 줄이려고 하지않아도 된다. 다만 위처럼 {입력값, 입력값들} 과 같은 변수를 만들지 않을 수 있다면 컴퓨터가 사용할 자원을 아낄 수 있으니 이런 부분에선 코드를 줄이면 좋다.


이번에는 프로그래밍의 첫번째 꽃 if , 조건문에 대해 알아봤으니 두번째 피는 꽃인 for , 반복문에 대해 알아보자.

Comments