[점프 투 파이썬] 3장. 프로그램의 구조를 쌓는다! 제어문

정지나·2022년 5월 28일
0

4주차

2022.05.23. ~ 2022.05.28.

  • 03-1 if문
  • 03-2 while문
  • 03-3 for문

03-1 if문


프로그래밍에서 조건을 판단하여 해당 조건에 맞는 상황을 수행하는 데 쓰는 것이 바로 if문이다.

if문의 기본 구조

조건문을 테스트해서 참이면 if문 바로 다음 문장(if 블록)들을 수행하고, 조건문이 거짓이면 else문 다음 문장(else 블록)들을 수행하게 된다. 그러므로 else문은 if문 없이 독립적으로 사용할 수 없다.

if 조건문:
    수행할 문장1
    수행할 문장2
    ...
else:
    수행할 문장A
    수행할 문장B
    ...

들여쓰기

if문을 만들 때는 if 조건문: 바로 아래 문장부터 if문에 속하는 모든 문장에 들여쓰기(indentation)를 해주어야 한다. 그렇다면 들여쓰기는 공백(Spacebar)으로 하는 것이 좋을까? 아니면 탭(Tab)으로 하는 것이 좋을까? 둘 중 어느 것을 선택해도 괜찮지만, 2가지를 혼용해서 사용하진 말자. 참고로 요즘 파이썬 커뮤니티에서는 들여쓰기를 할 때 공백(Spacebar) 4개를 사용하는 것을 권장한다.

조건문 다음에는 콜론을 잊지말자!

if 조건문 뒤에는 반드시 콜론(:)이 붙는다. 어떤 특별한 의미가 있다기보다는 파이썬의 문법 구조이다. 또한 다른 언어에서는 if문을 { } 기호로 감싸지만 파이썬에서는 들여쓰기로 해결한다는 점을 기억하자.

조건문이란 무엇인가?

if 조건문에서 "조건문"이란 참과 거짓을 판단하는 문장을 말한다.

>>> money = True #조건문, money = true 이기에 조건이 참이 되어 if문 다음 문장을 수행한다.
>>> if money:

비교연산자

비교연산자 설명
x < yx가 y보다 작다
x > yx가 y보다 크다
x == yx와 y가 같다
x != yx와 y가 같지 않다
x >= yx가 y보다 크거나 같다
x <= yx가 y보다 작거나 같다

and, or, not

연산자 설명
x or yx와 y 둘중에 하나만 참이어도 참이다
x and yx와 y 모두 참이어야 참이다
not xx가 거짓이면 참이다

x in s, x not in s

in not in
x in 리스트x not in 리스트
x in 튜플x not in 튜플
x in 문자열x not in 문자열

영어 단어 in의 뜻이 "~안에"라는 것을 생각해 보면 다음 예가 쉽게 이해될 것이다.

>>> 1 in [1, 2, 3]
True
>>> 1 not in [1, 2, 3]
False

첫 번째 예는 "[1, 2, 3]이라는 리스트 안에 1이 있는가?" 조건문이다. 1은 [1, 2, 3] 안에 있으므로 참이 되어 True를 돌려준다. 두 번째 예는 "[1, 2, 3] 리스트 안에 1이 없는가?" 조건문이다. 1은 [1, 2, 3] 안에 있으므로 거짓이 되어 False를 돌려준다.

조건문에서 아무 일도 하지 않게 설정하고 싶다면?

가끔 조건문의 참, 거짓에 따라 실행할 행동을 정의할 때, 아무런 일도 하지 않도록 설정하고 싶을 때가 있다. 이럴 땐 pass를 이용하자.

>>> pocket = ['paper', 'money', 'cellphone']
>>> if 'money' in pocket:
...     pass #pocket 리스트 안에 money 문자열이 있기 때문에 if문 다음 문장인 pass가 수행되고 아무 결괏값도 보여 주지 않는다.
... else:
...     print("카드를 꺼내라")
...

다양한 조건을 판단하는 elif

elif는 이전 조건문이 거짓일 때 수행된다. if, elif, else를 모두 사용할 때 기본 구조는 다음과 같다. elif는 개수에 제한 없이 사용할 수 있다.

If <조건문>:
    <수행할 문장1> 
    <수행할 문장2>
    ...
elif <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
elif <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
...
else:
   <수행할 문장1>
   <수행할 문장2>
   ... 

조건부 표현식

[조건문이 참인 경우] if [조건문] else [조건문이 거짓인 경우]
if score >= 60:
    message = "success"
else:
    message = "failure"
     
# 조건부 표현식: message = "success" if score >= 60 else "failure"

03-2 While문


while문의 기본 구조

반복해서 문장을 수행해야 할 경우 while문을 사용한다. 그래서 while문을 반복문이라고도 부른다.

while <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    <수행할 문장3>
    ...

While문 강제로 빠져나가기

while문을 빠져나가고 싶을 때는 break문을 사용한다.

>>> coffee = 10
>>> money = 300
>>> while money:# 참
...     print("돈을 받았으니 커피를 줍니다.")
...     coffee = coffee -1
...     print("남은 커피의 양은 %d개입니다." % coffee)
...     if coffee == 0: #coffee가 0이 될 때 해당 문장이 참이 되므로 아래 문장이 실행되고 break문이 호출되어 while문 빠져나감 
...         print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
...         break
...

While문 맨 처음으로 돌아가기

while문을 빠져나가지 않고 while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우가 생기게 된다. 이때 사용하는 것이 바로 continue문이다.

1부터 10까지의 숫자 중 홀수만 출력할 때

>>> a = 0
>>> while a < 10:
...     a = a + 1
...     if a % 2 == 0: continue #a가 짝수 일때 continue 문장 수행
...     print(a) #a가 짝수일 때 print(a) 수행 불가
...
1
3
5
7
9

무한루프

무한 루프란 무한히 반복한다는 의미이다. 우리가 사용하는 일반 프로그램 중에서 무한 루프 개념을 사용하지 않는 프로그램은 거의 없다. 그만큼 자주 사용한다는 뜻이다. [Ctrl+C]를 눌러 빠져나갈 수 있다.

while True: 
    수행할 문장1 
    수행할 문장2

03-3 for문


파이썬의 직관적인 특징을 가장 잘 대변해 주는 것이 바로 이 for문이다. while문과 비슷한 반복문인 for문은 매우 유용하고 문장 구조가 한눈에 쏙 들어온다는 장점이 있다.

for문의 기본구조

for 변수 in 리스트(또는 튜플, 문자열):
    수행할 문장1
    수행할 문장2
    ...

전형적인 for문

>>> test_list = ['one', 'two', 'three'] 
>>> for i in test_list: 
...     print(i) #첫 번째 요소인 'one'이 먼저 i 변수에 대입된 후 print(i)문장을 수행한다. 마지막 요소까지 이것을 반복한다.
... 
one 
two 
three

다양한 for문의 사용

>>> a = [(1,2), (3,4), (5,6)]
>>> for (first, last) in a: #a 리스트의 요솟값이 튜플이기 때문에 각각의 요소가 자동으로 (first, last) 변수에 대입된다.
...     print(first + last)
...
3
7
11

for문과 continue

while문에서 살펴본 continue문을 for문에서도 사용할 수 있다. 즉 for문 안의 문장을 수행하는 도중에 continue문을 만나면 for문의 처음으로 돌아가게 된다.

for문과 자주 사용하는 range 함수

for문은 숫자 리스트를 자동으로 만들어 주는 range 함수와 함께 사용하는 경우가 많다. 시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.

>>> a = range(10) #0부터 10미만의 숫자를 포함하는 객체
>>> a
range(0, 10)      

리스트 내포하기

리스트 안에 for문을 포함하는 리스트 내포(List comprehension)를 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.

>>> a = [1,2,3,4]
>>> result = []
>>> for num in a:
...     result.append(num*3)
      # >>> result = [num * 3 for num in a] < 리스트 내포 사용했을 때
...
>>> print(result)
[3, 6, 9, 12]

리스트 내포의 일반 문법은 다음과 같다.

[표현식 for 항목 in 반복가능객체 if 조건문]
profile
폭주벨로거,, (가 될 예정)

0개의 댓글