Back
Featured image of post 제어문 (1)

제어문 (1)

들여쓰기, 조건문, 반복문

1. 들여쓰기(Indentation)

C에서는 코드 실행 단위인 블록을 구분하기 위해 중괄호{ }를 사용하고, 들여쓰기는 가독성을 증진시키는 데만 사용되는 개념이었다.

하지만 파이썬에서는 들여쓰기 수준으로 코드 블록을 구분한다.

C/C++ Style

if (조건문) {
	명령1;
   	명령2;
}

Python Style

if a > b:
    명령1
    명령2

C와 비교했을 때, Python의 문법적 차이는 다음와 같다.

  • 조건문을 괄호( )로 싸지 않고 콜론:을 조건문 뒤에 적는 것으로 간단하게 사용한다.
  • 명령문의 끝에 세미콜론;을 적지 않는다. (적어도 상관은 없음)
  • 코드 블록을 감싸는 중괄호{ }를 생략한다. 대신 들여쓰기(Indentation)로 코드 블록을 구분한다.

그리고 마지막 항목인 중괄호 생략이 바로 파이썬의 가장 큰 특징이다. 자세한 내용은 조건식에서 추가적으로 다룬다.

2. 조건식

조건식으로 입력되는 부울값에 따라 제어문에 의해 실행되는 코드가 달라진다(코드의 흐름이 달라진다).

비교연산자

두 개의 값을 비교하고 부울값을 반환한다.

연산자 반환값
A == B 두 값이 서로 같으면 True, 아니면 False
A != B 두 값이 서로 다르면 True, 아니면 False
A < B A가 B보다 작으면 True, 아니면 False
A <= B A가 B보다 작거나 같으면 True, 아니면 False
A > B A가 B보다 크면 True, 아니면 False
A >= B A가 B보다 크거나 같으면 True, 아니면 False
A in B A가 B(리스트 or 튜플)에 포함된(B의 요소 중 A가 존재) 경우 True, 아니면 False

부울연산자

부울연산자의 피연산자로 비교연산자 등의 조건식을 조합하여 사용할 수 있다.

A B AND OR
True True True True
True False False True
False True False True
False False False False

not은 입력값과 반대되는 부울값을 반환한다. 이를 정리하면 다음과 같다.

연산자 반환값
조건식1 and 조건식2 조건 1과 조건 2가 모두 True이면 True, 아니면 False
조건식1 and 조건식2 조건 1과 조건 2중 하나만 True여도 True, 아니면 False
not 조건식 조건식이 True이면 False, False이면 True 반대되는 부울값을 반환한다.

부울 이외의 데이터형

위 2개 연산자의 경우 부울값을 반환하므로 조건식으로 사용할 수 있지만, 부울값 이외의 값도 조건식으로 사용할 수 있다. 그대로 사용하는 것은 아니고, 부울값으로 데이터형을 변환한 후 조건식으로 사용한다.

데이터형 True False
수치 0(0.0) 0 이외의 값
문자열 빈 문자열 '', "" 비어있지 않은 문자열
리스트, 튜플 비어있는 리스트[ ], 튜플( ) 요소가 하나라도 있는 경우

bool() 함수를 사용해 변환 결과를 알아볼 수 있다.

>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(426)
True
>>> bool(2.718)
True
>>> bool({})
False
>>> bool((1, 2, 3))
True
>>> bool("Hello, Python!")
True
>>> bool('')
False

3. 조건문

코드 블록을 콜론:과 들여쓰기만으로 구분한다는 점을 제외하면 C와 거의 동일하다.

들여쓰기로 코드 블록을 구분하는 것을 구체적으로 살펴보기 위해 각 경우의 코드 예시를 살펴본다.

if: ~ else:

조건문이 True일 경우 if 바로 뒤 블록 내의 코드를 실행하고, False일 경우 else 뒤 블록의 코드를 실행한다.

>>> a = 4
>>> b = 2
>>> if a > b:
	    print(a + b)
    else:
    	print(a - b)
6
>>> if a < b:
	    print(a + b)
    else:
	    print(a - b)
2

동일한 if문을 실행했음에도 조건식의 값에 따라 다른 결과가 나타나는 것을 볼 수 있다.

if: 단독 사용

False인 경우를 고려할 필요가 없는 경우 if문을 단독으로 사용한다.

>>> subject = {"Korean", "Math", "English"}
>>> score = {}
>>> if subject:
    	print(subject)
{'Korean', 'Math', 'English'}
>>> if score:
    	print(score)
>>>

subject 리스트에는 요소가 존재하므로 해당요사가 출력되고, score리스트에는 요소가 없으므로 아무런 일도 일어나지 않는다.

if: elif: else

elifelse if를 줄인 형태이다. 사용법은 C와 동일하므로 추가로 예시를 살펴보지는 않는다.

4. 반복문

파이썬의 반복문은 C와 동일하게 whilefor가 있다.

while

while (조건문):
    명령1
    명령2
명령3

이런 형태의 코드의 경우 조건문이 True에서 False가 되기 전까지 명령1, 명령2를 반복해서 수행하다 while루프가 종료되면 명령3을 실행하게 된다.

for

python의 for문은 C에 비해 매우 직관적이다.

for문의 기본적인 구조는 다음과 같다.

for (변수) in (리스트, 튜플, 문자열 ):
    명령1
    명령2
    . . .

즉, in뒤의 데이터형에서 요소를 하나씩 꺼내어(문자열의 경우 문자를 하나씩) 변수에 넣고, 명령을 처리한다.

이렇게 특정 요소에 차례대로 접근 가능한 대상을 이터러블(Iterable) 객체라고 부른다.

복잡한 응용도 가능하다. 변수 위치에 꼭 단일 변수만 와야 하는 것은 아니고, 특정 자료형도 위치할 수 있다.

for (a, b) in [(1, 2), (3, 4), (5, 6)]:
    print(a)
    print(b)
    print("next")
1
2
next
3
4
next
5
6
next

오른쪽 2차원 리스트의 각 요소인 튜플이 자동으로 왼쪽 튜플의 요소에 언팩되어 들어간다.

for ~ range()

기존의 C에서처럼 숫자를 증가시키는 반복문 형태도 있다. range()함수와 함께 사용한다. range() 함수는 번호가 들어 있는 이터러블 객체를 반환하는 함수이다.

range(숫자)는 0에서부터 (해당 숫자-1)까지의 정수들을 요소로 하는 리스트(튜플)처럼 사용할 수 있다.

range()의 인수는 1개부터 3개까지 입력 가능한데, 각각 다음 의미를 갖는다.

인수의 개수 1번째 인수 2번째 인수 3번째 인수
1개 입력 마지막 숫자 X X
2개 입력 시작 숫자 마지막 숫자 X
3개 입력 시작 숫자 마지막 숫자 증가폭

인수를 1개만 입력하는 경우 0부터 시작하는 것으로 인식한다.

>>> print(range(4))
range(0, 4)

각 경우를 직접 출력해보면 다음과 같은 결과를 볼 수 있다.

>>> for i in range(4):
    	print(i)
0
1
2
3
>>> for j in range(2, 6):
    	print(j)
2
3
4
5
>>> for k in range(5, 15, 3):
    	print(k)
5
8
11
14

break, continue

C에서와 동일하게 사용할 수 있다.

  • break : 반복 도중 반복문을 강제로 벗어난다.
  • continue : 반복 도중 반복문의 맨 앞으로 돌아간다.

C와 차이가 없으므로 구체적인 설명은 생략한다.

다음 글에서는 파이썬에서 함수를 정의하는 방법과, 기존에 정의된 함수 모음인 모듈에 대해 다룰 예정이다.

(다음 글에서 계속됩니다.)

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus