-
chapter03-1 if문점프 투 파이썬 2021. 9. 8. 18:53In [2]:
money=True if money: print("택시를 타고 가라") else: print("걸어 가라")
택시를 타고 가라
if문의 기본 구조¶
if 조건문:
- 수행할 문장1
- 수행할 문장2
- .....
else: - 수행할 문장A
- 수행할 문장B
- .....
조건문을 테스트해서 참이면 if문 바로 다음 문장들을 수행하고, 조건문이 거짓이면 else문 다음 문장들을 수행하게 된다. 그러므로 else문은 if문 없이 독립적으로 사용할 수 없다.
조건문:¶
- 수행할 문장1
- 수행할 문장2
- 수행할 문장3
위처럼 작성하면 오류가 발생한다. '수행할 문장2' 를 들여쓰기하지 않았기 때문이다. IDLE 에디터에서 다음과 같이 작성하여 실행해 보자. 여기에서는 오류가 뜨는지 확인만 하면 되니 IDLE 에디터 창에서 바로 실행하자.
In [1]:money=True if money: print('택시를') print("타고") print("가라")
File "<ipython-input-1-81fb4ac19001>", line 5 print("가라") ^ IndentationError: unexpected indent
들여쓰기 오류가 발생하는 것을 확인할 수 있다.
다음과 같은 경우에도 오류가 발생한다.'수행할 문장3'을 들여쓰기했지만 '수행할 문장1'이나 '수행할 문장2'와 들여쓰기의 너비가 다르다. 즉 들여쓰기는 언제나 같은 너비로 해야 한다.
if 조건문: 수행할 문장1 수행할 문장1 수행할 문장3
In [4]:money=True if money: print("택시를") print("타고") print("가라")
File "<ipython-input-4-8f3801210ea3>", line 5 print("가라") ^ IndentationError: unexpected indent
마찬가지로 들여쓰기 오류가 발생하는 것을 확인할 수 있다.
그렇다면 들여쓰기는 공백으로 하는것이 좋을까? 아니면 탭으로 하는것이 좋을까? 이에 대한 논란은 파이썬을 사용하는 사람들 사이에서 아직도 계속되고 있다. 탭으로 하자는 쪽과 공백으로 하자는 쪽 모두가 동의하는 내용은 단 하나, 2가지를 혼용해서 쓰지는 말자는 것이다. 공백으로 할 거면 항상 공백으로 통일하고, 탭으로 할 거면 항상 탭으로 소스에서 눈으로 보이는 것이 아니기 때문에 혼용해서 쓰면 오류의 원인이 되니 주의하자.조건문 다음에 콜론(:)을 잊지 말자!¶
if 조건문 뒤에는 반드시 콜론(:)이 붙는다. 어떤 특별한 의미가 있다기보다는 파이썬의 문법 구조이다. 왜 하필 콜론(:)인지 궁금하다면 파이썬을 만든 귀도에게 직접 물어보아야 할것이다. 앞으로 배울 while이나 for,def, class문에도 역시 문장의 끝에 콜론(:)이 항상 들어간다. 초보자들은 이 콜론(:)을 빠뜨리는 경우가 많으니 특히 주의하자
파이썬이 다른 언어보다 보기 쉽고 소스 코드가 간결한 이뉴는 바로 콜론(:)을 사용하여 들여쓰기를 하도록 만들었기 때문이다. 하지만 이는 숙력된 프로그래머들이 파이썬을 처음 접할때 제일 혼란스러워하는 부분이기도 하다. 다른언어에서는 if문을 {}기호로 감싸지만 파이썬에서는 들여쓰기로 해결한다는 점을 기억하자.조건문이란 무엇인가?¶
if 조건문에서 '조건문'이란 참과 거짓을 판단하는 문장을 말한다.
앞에서 살펴본 택시 예제에서 조건문은 money가 된다.In [9]:money=True if money:
File "<ipython-input-9-ff17eb57904c>", line 2 if money: ^ SyntaxError: unexpected EOF while parsing
money는 True이기 때문에 조건이 참이 되어 if 문 다음 문장을 수행한다.
비교연산자¶
이번에는 조건문에 비교 연산자(<,>,==,!=,>=,<=)를 쓰는방법에 대해 알아보자.
다음 표는 비교 연산자를 잘 설명해 준다.
비교 연산자 $\quad$ 설명- x<y $\quad$ - x가 y보다 작다.
- x>y $\quad$ - x가 y보다 크다.
- x==y $\quad$- x가 y가 같다.
- x!=y $\quad$ - 와 y가 같지 않다.
- x>=y $\quad$- x가 y보다 크거나 같다.
- x<=y $\quad$- x가 y보다 작거나 같다.
이제 위 연산자를 어떻게 사용하는지 알아보자.
In [10]:x=3 y=2 x>y
Out[10]:True
x에 3을, y에 2를 대입한 다음에 x>y라는 조건문을 수행하면 True를 돌려준다. x>y 조건문이 참이기 때문이다.
In [11]:x<y
Out[11]:False
위 조건문은 거짓이기 때문이 False를 돌려준다.
In [12]:x==y
Out[12]:False
x와 y는 같지 않다. 따라서 위 조건문은 거짓이다.
In [13]:x!=y
Out[13]:True
x와 y는 같지 않다. 따라서 위 조건문은 참이다.
앞에서 살펴본 택시 예제를 다음처럼 바꾸려면 어떻게 해야 할까?
만약 3000원 이상의 돈을 가지고 있으면 택시를 타고 그렇지 않으면 걸어 가라.In [19]:money=2000 if money>=3000: print("택시를 타고 가라") else: print("걸어 가라")
걸어 가라
moeny>=3000 조건문이 거짓이 되기 떄문에 else 문 다음 문장을 수행하게 된다.
and, or, not¶
조건을 판단하기 위해 사용하는 다른 연산자로는 and, or, not이 있다. 각각의 연산자는 다음 처럼 동작한다.
- 연산자 $\quad$ 설명
- x or y $\quad$ x와 y둘 중에 하나만 참이어도 참이다.
- x and y$\quad$x와 y 모두 참이여야 참이다.
- not x $\quad$ x가 거짓이면 참이다.
다음 예를 통해 or 연산자의 사용법을 알아보자.
돈이 3000원 이상 있거나 카드가 있다면 택시를 타고 그렇지 않으면 걸어가라.In [21]:money=2000 card=True if money >=3000 or card: print("택시를 타고 가라") else: print("걸어 가라")
택시를 타고 가라
money는 2000이지만 card가 True 이기 떄문에 money>= 3000 or card 조건문이 참이 된다. 따라서 if문 다음 '택시를 타고가라' 문장이 출력된다.
x in s, x not s¶
더 나아가 파이썬은 다른 프로그래밍 언어에서 쉽게 볼 수 없는 재미있는 조건물을 제공한다.
바로 다음과 같은 것들이다.- in$\quad$$\quad$$\quad$$\quad$$\quad$not in
- x in 리스트$\quad$x not in리스트
- x in 튜플$\quad$ x not in 튜플
- x in 문자열 $\quad$ x not in 문자열
영어 단어 in의 뜻이 '~안에'라는 것을 생각해 보면 다음 예가 쉽게 이해될 것이다.
In [22]:1in[1,2,3]
Out[22]:True
In [24]:1 not in[1,2,3]
Out[24]:False
앞에서 첫 번째 예는'[1,2,3,]이라는 리스트 안에 1이 있는가?' 조건문이다. 1은 [1,2,3]안에 있으므로 참이 되어 True를 돌려준다. 두 번째 예는 '[1,2,3] 리스트 안에 1이 없는가?' 조건문이다. 1은 [1,2,3] 안에 있으므로 거짓이 되어 False를 돌려준다.
다음은 튜플과 문자열에 적용한 예이다. 각각의 결과가 나온 이유는 쉽게 유출할 수 있다.
In [25]:'a'in('a','b','c')
Out[25]:True
In [26]:'j' not in 'python'
Out[26]:True
이번에는 우리가 계속 사용해 온 택시 예제에 in을 적용해 보자.
만얀 주머니에 돈이 있으면 택시를 타고, 없으면 걸어가라.In [27]:pocket=['paper','cellphone','money'] if 'money' in pocket: print("택시를 타고 가라") else: print("걸어 가라")
택시를 타고 가라
['paper', 'cellphone', 'money'] 리스트 안에 'money'가 있으므로 'money' in pocket은 참이 된다. 따라서 if문 다음 문장이 수행된다.
다양한 조건을 판단하는 elif¶
if와 else만으로 다양한 조건을 판단하기 어렵다. 다음 예를 보더라도 if와 else만으로는 조건을 판단하는데 어려움을 겪게 된다.
- 주머니에 돈이 있으면 택시를 타고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어가라.
위 문장을 보면 조건을 판단하는 부분이 두 군데가 있다. 먼저 주머니에 돈이 있는지를 판단해야 하고 주머니에 돈이 없으면 다시 카드가 있는지 판단해야 한다.
if와 else만으로 위 문장을 표현하려면 다음과 같이 할 수 있다.In [28]:pecket=['paper','cellphone'] card=True if'money'in pocket: print("택시를 타고 가라") else: if card: print("택시를 타고 가라") else: print("걸어가라")
택시를 타고 가라
언뜻 보기에도 이해하기 어렵고 산만한 느낌이 든다. 이런 복잡함을 해결하기 위해 파이썬에서는 다중 조건 판단을 가능하게 하는 elif를 사용한다.
위 예를 elif 를 사용하면 다음과 같이 바꿀 수 있다.In [29]:pocket=['paper','cellphone'] card=True if 'money' in pocket: print("택시를 타고 가라") elif card: print("택시를 타고 가라") else: print("걸어 가라")
택시를 타고 가라
즉 elif는 이전 조건문이 거짓일 때 수행된다. if, elif, else를 모두 사용할 때 기본 구조는 오른쪽과 같다.
if 조건문:¶
- 수행할 문장 1-1
- 수행할 문장 1-2
- .....
### elif 조건문2: - 수행할 문장 2-1
- 수행할 문장 2-1
- .....
### elif 조건문N: - 수행할 문장 N-1
- 수행할 문장 N-2
- .....
.... #### else - 수행할 문장A
- 수행할 문장B
- ......
조건부 표현식¶
다음 같은 코드를 보자.
if score >=60: message="success" else: message="failure"
위 코드는 score가 60 이상일 경우 message에 문자열에 "success"를, 아닐 경우에는 "failure"를 대입하는 코드이다.
파이썬의 조건부 표현식을 사용하면 위 코드를 다음과 같이 간단히 표현할 수 있다.message="success" if score >=60 else "failure"
조건부 표현식은 다음과 같이 정의한다.
조건문이 참인 경우 if 조건문 else 조건문이 거짓인 경우
조건부 표현식은 가독성에 유리하고 한 줄로 작성할 수 있어 활용성이 좋다.출처 : "점프투파이썬"
'점프 투 파이썬' 카테고리의 다른 글
chapter03-3 for문 (0) 2021.09.08 chapter03-2 while문 (0) 2021.09.08 chapter02-8 자료형의 값을 저장하는 공간,변수 (0) 2021.09.07 chapter02-7 불 자료형 (0) 2021.09.07 chapter02-6 집합 자료형 (0) 2021.09.07