3. 프로그래밍 맛보기#

많은 프로그래밍 입문서가 Hello, world! 라는 문장을 화면에 출력하는 코드를 이용해서 해당 프로그래밍 언어를 소개하기 시작한다. 이유는 문장을 출력하는 코드를 작성할 때 몇 가지 주요 프로그램 요소를 함께 소개할 수 있기 때문이다. 반면에 파이썬의 경우엔 다음과 같이 print() 함수를 이용한 한 줄의 명령문만 실행하면 Hello, world!가 화면에 출력된다.

print("Hello, world!")
Hello, world!

이처럼 파이썬의 구문이 C, C++, C#, Java, 자바스크립트 등의 그것과는 외형적으로 달라 경우에 따라 처음에는 조금 생소할 수 있다. 파이썬은 또한 명령문을 작성할 때 중괄호 { } 와 세미콜론 ; 을 기본적으로 사용하지 않는다. 대신 들여쓰기와 줄바꿈을 이용하여 블록을 지정하고 명령문을 나눈다. 에를 들어 아래 코드는 파이썬이 좋은 경우에만 Hello world!가 출력되도록 if 조건문을 활용하지만 중괄호와 세미콜론을 전혀 사용하지 않는다.

like_python = True

if like_python:
    print("Hello, world!")
Hello, world!

이처럼 프로그래밍 언어마다 각자 고유의 명령문 작성법을 갖지만 대다수의 프로그래밍 언어의 명령문은 일반적으로 몇 개의 기초 명령문의 조합으로 생성된다. 이는 파이썬에도 해당한다.

3.1. 기초 명령문#

컴퓨터 프로그램은 명령문statement으로 구성된다. 모든 프로그래밍 언어는 구문syntax이라 불리는 프로그래밍 언어 고유의 명령문 작성법을 제공한다. 그렇지만 파이썬, C, C++, C#, 자바, 자바스크립 등 대부분의 프로그래밍 언어는 다음 네 개의 기초 명령문을 조합해서 명령문을 생성하도록 한다.

  • 변수 할당

  • if 조건문

  • for 반복문

  • while 반복문

프로그래밍 언어 구문의 엄밀한 정의는 일반적으로 매우 복잡하기에 초보자가 이해하기 어렵다. 예를 들어 파이썬 명령문에서 파이썬의 명령문 작성법을 확인할 수 있지만 초보자가 굳이 살펴볼 필요는 없다.

프로그래밍에 입문하는 경우 언어의 구문을 정확히 아는 것보다는 원하는 기능을 옳바르게 수행하는 프로그램을 구현하는 훈련이 보다 중요하다. 앞으로 다양한 파이썬 명령문을 작성하는 방식을 하나씩 소개한다. 프로그래밍을 잘한다 함은 바로 문제 해결에 적절한 명령문을 작성한다는 의미이다.

여기서는 자세한 설명 없이 간단하지만 매우 기본적인 파이썬 코드를 이용하여 파이썬 프로그래밍의 기본 요소들을 살펴본다.

3.2. 변수 할당#

컴퓨터 프로그램은 단순하게 말해 값을 저장하고, 조작하여 새로운 값을 계산하고, 계산된 값을 활용하는 방법을 다룬다. 값을 저장하기 위해 변수가, 저장된 값을 조작하여 새로운 값을 계산하기 위해 연산자와 함수 등 다양한 프로그래밍 도구가 사용된다. 먼저 값을 저장하고 활용하는 간단한 방법을 소개한다.

아래 코드에서 첫째 명령문은 변수 a에 값 3을 할당한다. 반면에 둘째 명령문은 변수 b가 2에다가 변수 a가 가리키는 값을 곱한 결과에 해당하는 6을 할당한다.

a = 3
b = 2 * a

이처럼 변수와 값을 연결시키는 것을 변수 할당variable assignment 명령문이라 한다. 파이썬의 명령문은 한 줄에 하나씩 작성하는 것이 원칙이며 줄바꿈은 Enter 키를 이용한다.

변수가 가리키는 값을 확인하려면 보통 다음과 같이 print() 함수를 이용하여 변수가 가리키는 값을 화면에 출력한다.

print(a)
3
print(b)
6

print() 함수는 두 개 이상의 값을 동시에 출력할 수 있다. 아래 코드는 ab 두 변수에 할당된 값을 공백(스페이스)으로 구분하여 출력한다.

print(a, b)
3 6

선언된 변수는 다른 연산에 활용될 수 있다. 예를 들어 아래 코드는 변수 a가 가리키는 값과 변수 b가 가리키는 값의 곱을 계산한다.

a * b 
18

3.3. 계산기#

파이썬을 계산기로 활용할 수 있다. 또한 변수를 연산에 사용할 수 있고, 변수에 저장된 값을 조작하여 다른 값을 계산할 수도 있다. 파이썬이 제공하는 기초 연산을 표로 정리하면 아래와 같다.

연산자

의미

+

덧셈

-

뺄셈

*

곱셈

/

나눗셈

**

지수승

//

%

나머지

다음 세 개의 변수를 이용하여 각 연산자의 사용법을 확인한다.

a = 7
b = 3
c = b + 4

코드 셀 실행

주피터 노트북의 코드 셀code cell은 실행되면 코드의 내용이 기억된다. 따라서 이어지는 코드 셀의 코드는 이전에 실행된 코드 셀의 내용을 활용할 수 있다.

코드셀에 또한 여러 줄의 명령문으로 구성된 코드를 작성할 수 있으며, 해당 셀을 실행하면 맨 윗줄의 명령문부터 차례대로 실행된다. 또한 윗 줄에서 실행됨 명령문의 결과는 아랫 줄의 명령문에서 활용될 수 있다. 예를 들어 b = 3 에 의햇 변수 b가 3일 할당되기에 변수 c에 할당된 값은 b + 4, 즉 7이다.

사칙연산을 자유롭게 사용할 수 있으며 결과를 변수에 할당할 수도 있다.

  • 덧셈

a + b
10
d = a + b
print(d)
10
  • 뺄셈

b - a
-4
e = b - a
print(e)
-4
  • 곱셈

a * b
21
d = a * b
print(d)
21
  • 나눗셈

b / a
0.42857142857142855
e = b / a
print(e)
0.42857142857142855

지수승은 ** 를 사용한다.

a ** 2 + 1 
50
f = a ** 2 + 1 
print(f)
50

정수 나눗셈의 몫 // 과 나머지 % 연산도 지원된다.

8 // b + 3//2 
3
f = 8 // b + 3//2
print(f)
3
c % b + f 
4
g = c % b + f 
print(g)
4

몫 계산과 나눗셈 연산은 다름에 주의한다. 몫 계산의 결과는 정수인 반면에 나눗셈의 결과는 부동소수점이다.

c / b 
3.3333333333333335

연산에 사용된 정수 인자에 점 . 을 찍으면 부동소수점으로 처리된다.

a + 3. 
10.0
a - 3. 
4.0
a * 3.
21.0
a / 3. 
2.3333333333333335

하지만 변수에 점을 찍어 자료형을 변환하는 일은 허용되지 않는다. 아래 코드를 실행하면 허용되지 않은 구문을 사용했다는 의미의 SyntaxError 라는 실행 오류가 발생한다.

오류 내용에 포함된 내용은 다음과 같다.

  • Cell In[45], line 2: 오류가 발생한 코드 셀의 번호와 해당 셀에서 오류가 발생한 줄의 번호

  • a * b. ^: 오류가 발생한 명령문 표시

  • SyntaxError: invalid syntax: 허용되지 않은 구문이 사용되어 SyntaxError 유형의 오류 발생

d = 7
a * d.
  Cell In[27], line 2
    a * d.
          ^
SyntaxError: invalid syntax

3.4. 자료형#

3.4.1. 값과 변수의 자료형#

파이썬에 사용되는 값과 선언된 변수는 모두 자료형data type를 갖는다. 값 또는 변수의 자료형은 type() 함수를 이용하여 확인한다. 아래 코드는 정수의 자료형이 int라고 확인해준다.

type(6)
int

선언된 변수의 자료형은 할당된 값의 자료형으로 지정된다. 예를 들어 변수 b에 할당된 값이 6기에 변수 b의 자료형 또한 int로 확인된다.

type(b)
int

그런데 변수가 가리키는 값을 다른 값으로 대체할 수 있는데 이때 다른 자료형의 값이 사용될 수 있다. 예를 들어 아래 코드는 변수 b가 가리키는 값을 Hello, world! 라는 영어 문장으로 지정한다. 문장은 큰따옴표 또는 작은따옴표로 감싸짐에 주의한다.

b = "Hello, world!"

또는

b = 'Hello, world!'

변수가 가리키는 값이 달라지면 변수의 자료형 또한 변경된 값의 자료형으로 바뀐다. 단어 또는 문장의 자료형은 str 이며 보통 문자열string이라 부른다.

type(b)
str

변수의 자료형 명시

앞서 보았듯이 파이썬의 변수 할당 명령문은 변수에 할당되는 값의 자료형을 지정하지 않으며, 이는 C, C++, C#, 자바 등 다른 프로그래밍 언어와의 차이점 중에 하나다.

예를 들어, C 언어에서 변수 bint 자료형으로 선언하려면 아래와 같이 변수의 자료형을 함께 지정한다.

// C 언어 코드
int b;
b = 6;

C 언어의 경우 또한 선언된 자료형과 다른 자료형값을 변수 할당에 사용할 수 없다. 예를 들어 아래 코드의 실행은 허용되지 않는다.

// C 언어 코드
int b;
b = 6;
b = "Hello, world!";  // 허용되지 않음

3.4.2. 파이썬 기초 자료형#

지금까지 살펴본 정수, 부동소수점, 문자열 세 종류의 값은 int, float, str의 자료형을 갖는다. 이에 더해 파이썬은 부울 자료형인 bool도 기초 자료형으로 제공한다.

정수 자료형: int

-2, -1, 0, 1, 2 등의 정수는 int 자료형의 값이다. 정수는 사칙연산, 변수 할당 등에 사용된다.

1 + 2
3
a = 4
type(a)
int
a * 2
8

부동소수점 자료형: float

부동소수점은 유한소수를 가리키며 float 자료형의 값이다. 정수와 마찬가지로 사칙연산, 변수 할당 등에 사용된다.

2.1 + 3.3
5.4
c = 2.1
type(c)
float

intfloat는 다른 자료형이다. 하지만 정수를 유한소수로 간주하듯이 필요에 따라 int 자료형의 값이 float 자료형의 값으로 취급된다. 예를 들어 2.3 + 3을 계산해야 할 때 2.3 + 3.0을 계산한다.

2.3 + 3
5.3

문자열 자료형: str

문자들을 나열한 값들을 일컫는 자료형으로 작은 따옴표 ' 또는 큰 따옴표 " 를 사용한다.

hello_python = 'Hello, Python!'
print(hello_python)
Hello, Python!
like_python = "파이썬 좋아!"
print(like_python)
파이썬 좋아!

부울 자료형: bool

참과 거짓을 의미하는 TrueFalse부울값Boolean value 또는 진릿값이라 하며, 부울값의 자료형은 부울 자료형인 bool이다.

type(True)
bool
d = False
type(d)
bool

TrueFalsebool 자료형을 갖는 유일한 두 개의 값이다. 반면에 TrueFalse를 표현하는 식을 논리식logical expression이라 한다. 등식, 부등식 등이 부울값을 표현하는 대표적인 논리식이다.

논리식

의미

a < b

a가 가리키는 값이 b가 가리키는 값보다 작을 때 참

a <= b

a가 가리키는 값이 b가 가리키는 값보다 작거나 같을 때 참

a > b

a가 가리키는 값이 b가 가리키는 값보다 클 때 참

a >= b

a가 가리키는 값이 b가 가리키는 값보다 크거나 같을 때 참

a == b

a와 b가 동일한 값을 가리킬 때 참

a != b

a와 b가 동일하지 않은 값을 가리킬 때 참

3 > 4
False
3 >= 4 - 1
True
5/3 + 1.2 < 3/2
False
2.3 <= 2.3 + 3.0 
True
1 == 4/4.0
True

부울값 또는 변수 할당에 활용될 수 있다. 아래 코드는 1.0과 1이 동일하다는 사실을 test 변수에 할당한다.

test = 1.0 == 1
print(test)
True

= vs. ==

기호 = 는 변수 할당에 사용되는 기호이다. 기호 왼편에는 변수가, 오른편에는 특정 값을 표현하는 식이 사용된다. 예를 들어 z = 1+3은 변수 z가 1+3, 즉 4를 가리키도록 하는 명령문이다.

반면에 기호 ==는 두 개의 값이 동일한지 여부를 판단할 때 사용된다. 예를 들어 z == 2 * 3 - 2은 변수 z가 가리키는 값과 2+3-2가 동일한 값을 가리키는지 여부를 따져서 두 값이 동일하면 True, 아니면 False로 계산되기에 최종적으로 True로 계산된다.

3.4.3. 형변환#

2.3 + 3을 실행하면 파이썬 실행기interpreter는 내부적으로 정수를 이용하여 동일한 값의 부동소수점을 계산하는 함수 float()를 이용하여 2.3 + 32.3 + 3.0으로 계산한다.

float(3)
3.0
2.3 + float(3)
5.3

이렇게 내부적으로 값을 다른 자료형의 값으로 계산하는 기능을 형변환type casting이라 부른다. float() 함수 이외에 int(), str(), bool() 등 다양한 형변환 함수가 제공된다.

int() 함수

정수 모양의 문자열, 부동소수점, 부울값을 정수로 계산한다.

  • 정수 모양의 문자열 형변환

int('5')
5

문자열이 정수의 모양을 갖추지 못하면 오류가 발생한다.

  • 오류 종류: 값오류(ValuError)

  • 오류 내용: '5.1'은 정수 모양이 아님.

int('5.1')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[19], line 1
----> 1 int('5.1')

ValueError: invalid literal for int() with base 10: '5.1'
  • 부동소수점에서 정수로 형변환. 소수점 이하 버리기

int(4.8)
4
  • 부울값에서 정수로: TrueFalse는 각각 1과 0으로 취급

int(True)
1
int(False)
0

float() 함수

유한소수 모양의 문자열 또는 정수 등을 부동소수점으로 계산한다.

  • 유한소수 모양의 문자열 형변환

float('7.9')
7.9
  • 정수 모양의 문자열 형변환

float('7')
7.0

문자열이 부동소수점 또는 정수 모양을 갖추지 못하면 오류가 발생한다.

  • 오류 종류: 값오류(ValuError)

  • 오류 내용: '5.1a'은 부동소수점 모양이 아님.

int('5.1a')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[20], line 1
----> 1 int('5.1a')

ValueError: invalid literal for int() with base 10: '5.1a'
  • 정수에서 부동소수점으로 형변환. 소수점 추가.

float(7)
7.0
  • 부울값에서 정수로: TrueFalse는 각각 1.0과 0.0으로 취급

float(True)
1.0
float(False)
0.0

str() 함수

임의의 값을 문자열로 변환한다.

str(6)
'6'
str(7.6)
'7.6'
str(False)
'False'

bool() 함수

임의의 값을 True 또는 False 로 변환한다. 0, 0.0, ''(빈 문자열) 등처럼 0, 비어 있는 것, 의미 없는 것등은 False 로 그렇지 않으면 True 로 지정한다.

bool(0)
False
bool(2)
True
bool(0.0)
False
bool(0.01)
True
bool('')
False
bool('Hello')
True

floatfloat()

float는 부동소수점 자료형을 가리키기도 하고 형변환 함수를 가리키기도 한다. 여기서는 자료형과 형변환 함수의 이름을 구분하기 위해 함수는 int(), float(), str() 등처럼 함수 이름과 괄호를 함께 사용하는 표기법 관행을 따른다.

3.5. 주석#

프로그램을 작성할 때 포함된 코드의 기능과 작성 의도 등을 설명하는 문구나 문장을 추가하면 프로그램의 작동 원리와 과정을 보다 쉽게 이해할 수 있다. 이와 같이 프로그램의 실행과는 무관하지만 명령문, 함수 등의 기능, 아이디어 등을 설명하는 문장이 주석comment이다. 주석은 프로그램이 실행될 때 파이썬 실행기에 의해 무시된다.

한줄 주석

주석은 한 줄 또는 여러 줄로 작성될 수 있다. 한줄 주석은 sharp 기호 # 로 시작한다. 주석 기호 이후의 실행기에 의해 무시된다.

# speed는 시속을 가리키는 변수이다.

speed = 90 # 속도 단위는 km이다.
print("스피드:", speed, "km")
스피드: 90 km

위 코드와 아래 코드는 동일하게 작동한다.

speed = 90
print("스피드:", speed, "km")
스피드: 90 km

다만 코드에 사용된 변수와 코드의 의미에 대한 설명이 주석으로 추가된 경우가 코드의 의미를 이해하는 데에 보다 도움이 된다.

여러 줄 주석

한줄 주석을 연속 사용하여 여러 줄 주석을 작성할 수 있다.

# speed는 시속을 가리키는 변수이다.
# 속도 단위는 km이다.

speed = 90 
print("스피드:", speed, "km")
스피드: 90 km

반면에 작은따옴표 세 개 ''' 또는 큰따옴표 세 개 """ 로 감싸서 여러 줄 주석을 작성할 수도 있다.

'''
speed는 시속을 가리키는 변수이다.
속도 단위는 km이다.
'''

speed = 90 
print("스피드:", speed, "km")
스피드: 90 km

또는

"""
speed는 시속을 가리키는 변수이다.
속도 단위는 km이다.
"""

speed = 90 
print("스피드:", speed, "km")
스피드: 90 km

여러 줄 주석을 코드 또한 모두 아래 코드와 동일하게 작동한다.

speed = 90
print("스피드:", speed, "km")
스피드: 90 km

3.6. 모음 자료형: 리스트#

파이썬은 여러 개의 값을 하나로 묶어 다룰 수 있는 자료구조를 지원한다. 여기서는 리스트list를 간단히 소개한다. 리스트는 보통 관련된 값들을 모아서 하나의 값으로 취급하는 자료형이다. 대괄호 [] 로 항목들의 목록을 감싸고, 각각의 항목은 쉼표 , 로 구분한다. 예를 들어, 1부터 5까지의 정수로 구성된 리스트를 가리키는 변수를 다음과 같이 선언한다.

one2five = [1, 2, 3, 4, 5]

name_list 변수는 사람들의 이름, 즉 문자열로 구성된 리스트를 가리킨다.

name_list = ['김강현', '황현', '남세원', '최흥선', '김현선', '함중아']

리스트의 항목이 반드시 동일한 자료형을 가질 필요는 없으며, 서로 다른 자료형의 항목이 사용될 수도 있다. 예를 들어 아래 리스트는 김강현의 이름, 전화번호, 나이, 키, 출생지로 구성된 리스트를 정의한다.

kgh = ['김강현', '010-1234-5678', 20, 172.3, '제주']

리스트 인덱싱

항목의 위치를 인덱스index로 표기한다. 가장 왼쪽에 위치한 항목부터 차례대로 0, 1, 2, 3 등의 인덱스에 해당한다. 인덱스를 이용하여 해당 인덱스에 위치한 항목을 확인하는 과정을 인덱싱indexing이라 부른다.

예를 들어 가장 왼쪽에 위치한 항목, 즉 0번 인덱스의 항목을 확인하는 방법은 다음과 같다.

name_list[0]
'김강현'

왼쪽에서 세번째 항목은 인덱스가 2이기에 다음과 같이 확인한다.

name_list[2]
'남세원'

인덱스는 음의 정수로도 표현할 수 있다. 맨 오른쪽에 위치한 항목부터 왼쪽으로 이동하면서 차례대로 -1, -2, -3 등의 음의 인덱스를 갖는다. 따라서 가장 오른쪽에 위치한, 즉 리스트의 맨 끝에 위치한 항목은 다음과 같다.

name_list[-1]
'함중아'

모음 자료형으로서의 문자열

파이썬에서 문자열을 여러 개의 문자 또는 기호로 구성된 값으로 간주할 수 있다. 따라서 str을 일종의 모음 자료형으로 간주한다. 더 나아가 리스트의 인덱스와 인덱싱 기능을 문자열에 대해서도 동일하게 적용할 수 있다. 즉, 문자열 가장 왼편에 위치한 문자 또는 기호부터 오른쪽으로 이동하면서 차례대로 0. 1, 2 등의 인덱스를 가지며 이를 이용하여 문자열 인덱싱을 사용할 수 있다.

예를 들어 name_list 리스트의 첫재 항목, 즉 0번 인덱스의 값인 김강현을 변수 kgh에 할당해보자.

kgh = name_list[0]

kgh의 자료형은 당연히 문자열이다.

type(kgh)
str

김강현의 성인 김은 0번 인덱스의 항목이다.

kgh[0]
'김'

반면에 현은 김강현 문자열의 2번 인덱스의 항목이다.

kgh[2]
'현'

3.7. 제어문 활용#

지금까지 변수 할당과 기초 자료형의 값들을 이용한 간단한 연산 정도와 여러 개의 값을 하나로 묶어서 활용할 수 있는 리스트 자료형을 살펴보았다.

앞으로 본격적으로 파이썬 프로그래밍의 진수를 배우기 전에 지금까지 배운 것들을 이용하여 보다 복잡한 복잡한 문제를 해결하는 프로그램을 작성해 본다. 이를 위해 변수 할당과 함께 제어문 세 종류의 활용법을 간단하게 살펴 본다.

  • if 조건문

  • for 반복문

  • while 반복문

참고로 제어문은 코드의 실행 중에 경우에 따라 다른 명령문을 실행하도록 하는 장치를 의미한다.

3.7.1. if 조건문 활용#

특정 조건의 성립여부에 따라 다른 일을 실행하게 만드는 명령문을 조건문이라 부른다. 조건문의 일반적은 형식은 다음과 같다. if ...else가 쓰여진 행의 끝에 콜론 : 이 사용되고 그 아래에 있는 명령문들은 모두 동일한 크기만큼 들여쓰기 되었음에 주의한다.

if 논리식:
    명령문
else:
    명령문

예를 들어 guesssecret 두 변수가 가리키는 값의 등가 여부에 따라 다른 문장을 출력하도록 하려면 아래와 같이 한다.

secret = 2
guess = 3

if guess == secret:
    print("guess")
    print("맞았습니다!")
else:
    print("틀렸습니다!")
틀렸습니다!

Tab 키 활용

코딩할 때 Tab 키는 두 가지 기능으로 유용하게 사용된다.

첫째, 들여쓰기. 커서가 줄 맨 왼쪽에 위치했을 때 Tab 키를 누르면 보통 스페이스 네 개에 해당하는 만큼 들여쓰기가 이뤄진다. 대부분의 편집기는 Enter 키를 치면 들여쓰기를 적절하게 대신 실행하지만 사용자가 직접 Tab 키를 이용하여 들여쓰기 정도를 조절해야 할 필요가 있다. 들여쓰기를 반대로 실행하려면 Shift + Tab 조합을 이용한다.

둘째, 탭 완성. 함수, 변수, 객체 등을 작성하다가 Tab 키를 누르면 이름을 자동으로 완성해준다. 대부분의 편집키는 또한 탭키를 누르면 적절한 함수, 변수, 객체를 추천하기도 한다. Tab 키는 보다 빠른 코딩을 지원하는 것 뿐만 아니라, 코드 작성 오타 또는 오류를 줄여 준다.

3.7.2. for 반복문 활용#

for 반복문은 문자열, 리스트 등 모음 자료형의 값에 포함된 모든 항목을 대상으로 동일한 작업을 실행하고자 할 때 활용된다. 형식은 다음과 같다. for ...가 쓰여진 행의 끝에 콜론 : 이 사용되고 그 아래에 있는 명령문은 들여쓰기 되었음에 주의한다. 들여쓰기된 명령문이 for 반복문의 본문이다.

for 변수 in 문자열 또는 리스트:
    명령문

for 반복문이 작동하는 과정을 간단하게 정리하면 다음과 같다.

  • 변수문자열 또는 리스트에 포함된 항목을 왼쪽에서부터 차례대로 가리킴, 즉 할당받음.

  • 변수가 현재 가리키고 있는 항목을 대상으로 지정된 명령문 실행

  • 지정된 변수에 대해 명령문의 실행이 완료되면 변수은 다음 항목을 가리키게 됨.

  • 변수가 더 이상 가리킬 항목이 없을 때까지 위 과정 반복

예제: 문자열의 각 항목 출력

문자자열에 포함된 문자 각각을 출력하는 코드는 다음과 같다. for 반복문이 실행되는 동안 item 변수가 차례대로 '안', '녕', '하', '세', '요' 를 가리키며, 명령문으로 작성된 print(item)에 의해 각 글자가 출력된다. print() 함수가 실행될 때마다 줄바꿈이 발생함에 주의한다.

hello = "안녕하세요"

for item in hello:
    print(item)
안
녕
하
세
요

예제: 리스트에 포함된 모든 항목의 합

1부터 10까지의 합을 계산하는 코드를 for 반복문과 리스트를 활용하여 구현한다. 또한 다음과 같이 출력되도록 한다.

1부터 10까지 정수의 합: 55

모범답안:

먼저 1부터 10을 항목으로 갖는 리스트를 one2ten 변수에 할당한다.

one2ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for 반복문은 리스트의 0번 인덱스의 항목부터 차례대로 활용한다는 사실을 이용해서 아래 형식으로 덧셈을 진행하는 코드를 작성한다.

sum = 0
sum = 0 + 1
sum = 0 + 1 + 2
sum = 0 + 1 + 2 + 3
...
sum = 0 + 1 + 2 + 3 + ... + 10

위 계산에 따라 항목이 달랄질 때마다 1부터 그 항목까지의 합을 저장하는 변수 sum에 0을 할당한다.

sum = 0 

이제 sum 변수가 가리키는 값을 앞서 설명한 대로 차례대로 업데이트되도록 for 반복문을 작성한다.

  • sum: one2ten의 가장 왼쪽에 위치한 항목부터 차례대로 하나씩 더한 값 저장

  • item: 처음엔 1, 그 다음엔 2, 그 다음엔 3 등을 차례대로 할당받음.

for item in one2ten:
    sum = sum + item
    
print("1부터 10까지 정수의 합:", sum)
1부터 10까지 정수의 합: 55

예제: 짝수 항목의 합

one2ten 리스트에 포함된 정수 중에서 홀수들만의 합을 계산하는 코드를 작성한다.

모범답안:

이전 코드와의 차이점은 if 조건문을 통해 item이 가리키는 값이 홀수임을 먼저 판단하고 그럴 때에만 sum 변수의 값을 업데이트한다는 점이다.

  • item % 2 == 1: item이 가리키는 값을 2로 나눴을 때 나머지가 1과 같은지 여부, 즉 item에 할당된 값이 홀수인지 여부 판단.

one2ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

sum = 0
for item in one2ten:
    if item % 2 == 1:
        sum = sum + item   # 짝수인 경우에만 sum에 추가
    
print("짝수 항목의 합:", sum)
짝수 항목의 합: 25

3.7.3. while 반복문 활용#

while 반복문은 특정 조건이 만족되는 동안 동일한 작업을 반복 수행하도록 할 때 사용하는 명령문이다. 형식은 다음과 같다. while ...가 쓰여진 행의 끝에 콜론 : 이 사용되고 그 아래에 있는 명령문은 들여쓰기 되었음에 주의한다. 들여쓰기된 명령문이 while 반복문의 본문이다.

while 논리식:
    명령문

while 반복문이 작동하는 과정을 간단하게 정리하면 다음과 같다.

  • 논리식이 참일 때 명령문이 한 번 실행되고 다시 논리식의 참/거짓 여부를 판단함.

  • 논리식이 거짓이 될 때까지 위 과정을 반복.

  • 논리식이 거짓이 되면 명령문while 반복문이 종료되고 이어지는 명령문으로 넘어감.

예제: 모든 항목의 합

아래 코드는 while 반복문을 이용하여 정수들의 리스트에 포함된 모든 항목의 합을 계산한다.

  • index: 0으로 초기화된 후 10보다 작은 동안 while 반복문 실행. 본문의 명령문이 실행될 때마다 1씩 커짐. 따라서 언젠가는 10 이상이 되어 while 반복문의 실행이 멈춤.

  • one2ten[index]: for 반복문과는 달리 while 반복문은 항목을 인덱싱을 이용해서 가리켜야 함. 바로 이 부분에서 for 본복문과 다르지만 나머지 부분은 거의 유사함.

  • while 반복문이 실행되는 동안 index 변수가 0부터 9까지 차례대로 가리키고 그럴 때마다 sum은 해당 인덱스의 항목만큼 증가함. 즉, 변수 sum의 역할은 이전 for 반목문을 이용한 코드에서와 동일함.

one2ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

index = 0
sum = 0                          # 항목을 차례대로 더한 값. 시작은 0부터.

while index < 10:
    sum = sum + one2ten[index] 
    index = index + 1
    
print("1부터 10까지 정수의 합:", sum)
1부터 10까지 정수의 합: 55

예제: 모든 짝수 항목의 합

while 반복문을 이용하여 정수 리스트에 포함된 모든 짝수 항목의 합을 계산하는 코드는 다음과 같다. 반복문의 본문에 짝수일 때만 항목의 합에 추가하는 명령문이 사용된다.

  • item = one2ten[index]: 반드시 필요한 변수 할당은 아니지만 이어지는 명령문을 보다 간단하게 보이도록 함.

one2ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

index = 0
sum = 0                     # 짝수 항목을 차례대로 더한 값. 시작은 0부터.

while index < 10:
    item = one2ten[index]  # item 변수를 선언하면 편함
    
    if item % 2 == 0:      # 짝수 여부 확인
        sum = sum + item 
    
    index = index + 1
    
print("1에서 10 사이의 짝수들의 합:", sum)
1에서 10 사이의 짝수들의 합: 30

3.8. 필수 예제#

참고: (필수 예제) 프로그래밍 맛보기

3.9. 연습문제#

참고: (연습) 프로그래밍 시작하기