flowchart LR
A[명령 작성] --> B[파일 저장]
B --> C[인터프리터 실행]
C --> D{처리 결과}
D --> E[실행 결과]
D --> F[오류 메시지]
개념 이해
이미 간단한 파이썬 코드를 작성해 본 학생이라면 변수에 값을 저장하고 print()로 결과를 출력할 수 있습니다. 이제는 코드가 실행된다는 사실을 확인하는 데서 한 걸음 더 나아가야 합니다. 같은 +라도 숫자에서는 덧셈이 되고 문자열에서는 연결이 되는 이유, 화면에서 똑같이 20으로 보이는 두 값이 서로 다를 수 있는 이유, 대입문 한 줄이 실행될 때 변수의 값이 어떻게 달라지는지를 설명할 수 있어야 합니다.
이 장에서는 짧은 코드를 먼저 살펴보고, 그 코드가 어떤 순서로 처리되는지 추적합니다. 문법을 따로 외우기보다 코드, 자료형, 실행 결과를 함께 놓고 비교하는 방식으로 파이썬의 기본 원리를 정리합니다.
파이썬 프로그램은 어떻게 실행되는가
파이썬 프로그램은 사람이 작성한 명령을 컴퓨터가 실행할 수 있도록 전달한 글입니다. 편집기나 코랩의 코드 셀에서 실행 명령을 내리면 파이썬 인터프리터가 코드를 읽고 처리합니다. .py 파일은 여러 명령을 저장해 다시 실행하거나 다른 사람에게 전달할 때 사용합니다.
인터프리터는 사람이 작성한 파이썬 명령을 컴퓨터가 처리할 수 있도록 해석하고 실행하는 프로그램입니다. 입문 단계에서는 “파이썬 파일을 인터프리터가 읽어 실행한다”라고 이해하면 충분합니다. 실제 내부 과정은 더 복잡하지만, 지금은 작성한 명령과 실행 결과의 관계를 확인하는 것이 중요합니다.
코드의 실행 순서 확인하기
price = 18000
quantity = 2
total = price * quantity
print(total)36000
인터프리터는 위에서 아래로 코드를 처리합니다. 먼저 두 값을 변수에 연결하고, 세 번째 줄에서 두 변수의 현재 값을 가져와 곱합니다. 계산 결과 36000은 total에 연결되고, 마지막 줄에서 화면에 출력됩니다. 코드를 읽을 때에도 이 순서를 따라가면 됩니다.
컴파일러와 인터프리터는 모두 사람이 작성한 프로그램을 컴퓨터가 실행할 수 있게 돕습니다. 컴파일러는 보통 프로그램 전체를 먼저 번역하여 실행 파일을 만드는 방식이고, 인터프리터는 실행 과정에서 명령을 해석하는 방식입니다. 파이썬은 일반적으로 인터프리터를 이용해 실행하는 언어로 소개됩니다. 이 구분은 두 방식의 큰 차이를 이해하기 위한 설명이며, 실제 실행 구조는 구현 방법에 따라 달라질 수 있습니다.
잠깐 확인하기
- 파이썬 파일을 저장할 때 사용하는 확장자는 무엇입니까?
- 인터프리터는 프로그램 실행 과정에서 어떤 역할을 합니까?
컴퓨터가 다루는 값과 자료형
데이터란 무엇인가
데이터(data)는 관찰하거나 측정하거나 입력하여 얻은 사실을, 컴퓨터가 저장하고 처리할 수 있는 형태로 표현한 것입니다. 학생의 이름, 강의실 온도, 도서 대출 권수, 설문 응답처럼 글자와 숫자로 기록할 수 있는 것은 모두 데이터가 될 수 있습니다. 사진과 소리도 컴퓨터 안에서는 일정한 규칙에 따라 데이터로 저장됩니다.
데이터는 그 자체만으로 의미가 분명하지 않을 수 있습니다. 25라는 데이터만 보면 나이인지, 온도인지, 인원수인지 알 수 없습니다. 기온 25도처럼 데이터가 나타내는 대상과 단위를 함께 알 때 의미를 정확하게 해석할 수 있습니다. 프로그램을 작성할 때 변수 이름과 출력 문구를 구체적으로 쓰는 이유도 여기에 있습니다.
프로그램에서 한 번에 다루는 구체적인 데이터 하나를 값(value)이라고 합니다. 25, 3.5, "서울", True는 각각 하나의 값입니다. 그러나 25는 계산할 수 있는 정수이고, "25"는 숫자 모양의 글자입니다. 사람에게는 비슷하게 보이지만 컴퓨터는 둘을 다른 종류의 값으로 처리합니다.
| 구분 | 뜻 | 예 |
|---|---|---|
| 데이터 | 컴퓨터가 저장하고 처리할 수 있도록 표현한 사실 | 이름, 온도, 주문 수량, 사진 |
| 값 | 프로그램에서 다루는 개별 데이터 | 25, "서울", True |
| 자료형 | 값의 종류와 가능한 처리 방법 | int, float, str, bool |
자료형(data type)은 값의 종류와 그 값으로 할 수 있는 일을 나타냅니다. 파이썬을 처음 배울 때에는 다음 네 가지 자료형을 먼저 익히면 됩니다.
| 자료형 | 파이썬 이름 | 값의 예 | 알맞은 사용 사례 |
|---|---|---|---|
| 정수 | int |
12, 0, -5 |
인원수, 상품 수량, 페이지 수 |
| 실수 | float |
3.14, 1.5, -0.2 |
키, 온도, 평균 점수 |
| 문자열 | str |
"김민지", "2026" |
이름, 주소, 학번처럼 글자로 다룰 정보 |
| 불리언 | bool |
True, False |
로그인 여부, 제출 여부처럼 두 상태로 구분되는 정보 |
정수형은 소수점이 없는 수를 표현합니다. 파이썬 정수는 고정된 몇 자리까지만 저장하도록 제한하지 않지만, 실제로 사용할 수 있는 크기는 컴퓨터의 메모리에 영향을 받습니다. 실수형은 소수점이 있는 수를 표현합니다. 컴퓨터는 실수를 이진 방식으로 저장하므로 일부 소수는 아주 작은 오차를 포함할 수 있습니다.
문자열은 글자의 나열입니다. 따옴표로 둘러싸인 "100"은 문자열이므로 정수 100과 구별해야 합니다. 불리언은 참과 거짓을 나타내며, 파이썬에서는 True와 False로 표현합니다.
flowchart TB
A[생활 속 정보] --> B[수량과 횟수]
A --> C[측정값]
A --> D[이름과 문장]
A --> E[참과 거짓의 상태]
B --> F[정수 int]
C --> G[실수 float]
D --> H[문자열 str]
E --> I[불리언 bool]
자료형은 값의 겉모습만 보고 정하지 않습니다. 전화번호와 학번은 숫자로 이루어져 있지만 더하거나 곱하기 위한 값이 아니며, 앞자리의 0도 보존해야 합니다. 이런 정보는 문자열로 다루는 편이 알맞습니다. 자료형을 선택할 때에는 “이 값으로 무엇을 할 것인가”를 함께 생각해야 합니다.
겉모습이 같은 값 비교하기
number_value = 2026
text_value = "2026"
print(number_value, type(number_value))
print(text_value, type(text_value))2026 <class 'int'>
2026 <class 'str'>
출력된 값만 보면 둘 다 2026이지만 자료형은 다릅니다. type()은 코드가 예상과 다르게 동작할 때 값의 종류를 확인하는 점검 도구로 사용할 수 있습니다.
실수 계산에서는 결과를 그대로 믿기 전에 표현상의 오차도 살펴볼 필요가 있습니다.
print(0.1 + 0.2)0.30000000000000004
이 결과는 계산이 틀렸다는 뜻이 아닙니다. 컴퓨터가 일부 소수를 이진수로 정확하게 표현하지 못해 매우 작은 차이가 생긴 것입니다. 금액처럼 정확한 소수 계산이 필요한 분야에서는 별도의 처리 방법을 사용하지만, 여기서는 실수에 작은 표현 오차가 생길 수 있다는 점을 기억하면 됩니다.
자주 하는 오해: 숫자처럼 보이면 모두 숫자형일까요?
그렇지 않습니다. 우편번호, 학번, 전화번호처럼 계산하지 않는 정보는 숫자로만 이루어져 있어도 문자열로 표현하는 것이 적절합니다.
잠깐 확인하기
- 나이와 이름은 각각 어떤 자료형으로 표현하는 것이 알맞습니까?
- 학번을 정수보다 문자열로 표현하는 편이 좋은 이유는 무엇입니까?
변수는 값에 붙이는 이름이다
프로그램에서는 같은 값을 여러 번 사용하거나 계산 과정에서 값을 바꾸는 경우가 많습니다. 매번 값을 직접 적는 대신 이름을 붙여 두면 그 값을 쉽게 사용하고 변경할 수 있습니다. 이때 사용하는 이름을 변수(variable)라고 합니다.
정확히 말하면 파이썬의 변수는 객체(object)를 참조하도록 연결된 이름입니다. 객체는 값과 자료형을 함께 가진 프로그램의 대상입니다. 입문 단계에서는 객체를 ‘파이썬이 관리하는 값’으로 이해해도 좋습니다. 변수 이름을 사용하면 파이썬은 그 이름과 연결된 객체를 찾아 연산이나 출력에 사용합니다.
따라서 파이썬 변수는 값을 담는 물리적인 상자나 메모리 주소 자체가 아닙니다. book_price = 18000은 정수 객체 18000에 book_price라는 이름을 연결한다는 뜻입니다. 등호 =는 수학에서처럼 양쪽이 같다는 뜻이 아니라, 오른쪽의 값을 왼쪽 이름에 연결하는 대입을 뜻합니다.
이 과정을 메모리와 연결하여 설명하면 다음과 같습니다. 파이썬이 18000이라는 값을 사용하려면 그 값을 가진 객체가 컴퓨터의 메모리에 마련되어야 합니다. book_price는 그 객체를 프로그램에서 찾아 사용할 수 있게 하는 이름입니다. 코드에서 book_price를 사용하면 파이썬은 이 이름이 참조하는 객체를 찾아 그 값을 계산이나 출력에 사용합니다.
학생들이 처음 배울 때에는 “값은 메모리에 저장되고, 변수 이름은 그 값을 찾아 쓰게 해 준다”라고 이해해도 좋습니다. 다만 변수 이름이 메모리 주소 그 자체이거나 C 언어의 포인터와 같다고 설명해서는 안 됩니다. 메모리의 구체적인 위치를 관리하는 일은 파이썬이 맡고, 프로그래머는 변수 이름을 통해 값을 사용합니다.
변수를 사용하는 기본 과정은 세 단계로 볼 수 있습니다.
- 대입문으로 변수 이름과 값을 연결합니다.
- 계산이나 출력에서 변수 이름을 사용합니다.
- 필요하면 새로운 값을 다시 대입합니다.
book_price = 18000 # 1. 변수 만들기
total = book_price * 2 # 2. 변수의 값 사용하기
book_price = 20000 # 3. 새로운 값으로 변경하기첫 번째 줄에서 book_price가 만들어지고, 두 번째 줄에서는 현재 값 18000을 가져와 계산합니다. 세 번째 줄이 실행되어도 이미 계산된 total의 값은 저절로 바뀌지 않습니다. 코드는 실행되는 시점의 값을 사용하기 때문입니다.
같은 변수에 새로운 값을 대입하면 이후에는 새로운 값이 사용됩니다. 책 가격이 18,000원에서 20,000원으로 바뀌었다면 book_price라는 이름은 그대로 두고 연결된 값만 바꿀 수 있습니다.
flowchart LR
A[코드에서 사용하는 이름<br/>book_price] -->|참조| B[메모리에 마련된 정수 객체<br/>값 18000 · 자료형 int]
C[book_price = 20000 실행] --> D[이름 book_price]
D -->|새로 참조| E[메모리에 마련된 정수 객체<br/>값 20000 · 자료형 int]
변수 이름은 내용을 짐작할 수 있도록 정하는 것이 좋습니다. x보다 book_price가, n보다 student_count가 읽는 사람에게 더 많은 정보를 줍니다.
| 구분 | 설명 | 예 |
|---|---|---|
| 사용할 수 있는 문자 | 문자, 숫자, 밑줄을 사용할 수 있습니다. | total_price, score2 |
| 첫 문자 | 숫자로 시작할 수 없습니다. | 2score는 사용할 수 없음 |
| 대소문자 | 대문자와 소문자를 구분합니다. | Score와 score는 다른 이름 |
| 예약어 | 파이썬이 문법에 사용하는 단어는 피합니다. | class, for는 사용할 수 없음 |
| 권장 표기 | 여러 단어는 밑줄로 연결합니다. | user_name, total_count |
파이썬은 한글 변수 이름도 허용하지만, 실습에서는 영문 소문자와 밑줄을 사용하는 것이 좋습니다. 다른 환경에서 코드를 공유하기 쉽고, 파이썬의 함수 이름 및 오류 메시지와 함께 읽기도 편하기 때문입니다. 또한 student_count처럼 역할이 드러나는 이름을 사용하고, a, data1, temp처럼 뜻을 알기 어려운 이름은 짧은 임시 계산이 아니라면 피하는 편이 좋습니다.
변수의 활용, 재사용, 복사, 변경
변수는 한 번 출력하고 끝내는 이름이 아닙니다. 입력값을 저장하고, 계산에 여러 번 사용하고, 중간 결과를 보관하는 데 활용할 수 있습니다.
unit_price = 1500
quantity = 4
subtotal = unit_price * quantity
delivery_fee = 3000
total_price = subtotal + delivery_fee
print(subtotal)
print(total_price)6000
9000
unit_price와 quantity는 계산에 사용되는 입력값이고, subtotal과 total_price는 계산 과정에서 만들어진 결과입니다. 계산 결과에도 이름을 붙이면 긴 계산식을 반복해서 쓰지 않아도 되고 코드의 의미도 쉽게 파악할 수 있습니다.
이미 만든 변수를 다른 계산에 다시 사용하는 것을 변수의 재사용이라고 할 수 있습니다. 다만 하나의 변수에 전혀 다른 의미의 값을 계속 대입하는 것은 바람직하지 않습니다. price에는 가격을, student_name에는 학생 이름을 저장하는 식으로 변수의 역할을 유지해야 합니다.
변수의 값을 다른 변수에 대입하여 복사하는 코드도 자주 사용합니다.
변수 복사와 변경 확인하기
original_score = 80
copied_score = original_score
copied_score = 95
print(original_score)
print(copied_score)80
95
copied_score = original_score이 실행될 때 두 이름은 같은 정수 값 80을 참조합니다. 이후 copied_score = 95를 실행하면 copied_score만 새로운 값과 연결됩니다. 따라서 original_score는 여전히 80입니다. 정수, 실수, 문자열, 불리언처럼 이 장에서 다루는 기본 자료형은 이러한 방식으로 이해할 수 있습니다. 목록과 같이 여러 값을 담는 객체를 복사할 때에는 주의할 점이 추가되며, 해당 자료형을 배울 때 자세히 다룹니다.
파이썬에서는 같은 변수 이름에 서로 다른 자료형의 값을 차례로 대입할 수 있습니다. 이를 동적 타이핑(dynamic typing)이라고 합니다.
status = 1
print(status, type(status))
status = "접수 완료"
print(status, type(status))1 <class 'int'>
접수 완료 <class 'str'>
편리한 기능이지만 한 변수의 의미가 중간에 달라지면 코드를 읽기 어려워집니다. 문법적으로 가능하다는 것과 읽기 좋은 코드라는 것은 구별해야 합니다.
파이썬은 여러 변수에 값을 한 번에 대입할 수도 있습니다. 이 방법을 이용하면 임시 변수를 만들지 않고 두 값을 교환할 수 있습니다.
두 변수의 값 교환하기
left = "A구역"
right = "B구역"
left, right = right, left
print(left)
print(right)B구역
A구역
대입문의 오른쪽 값들이 먼저 준비된 다음 왼쪽 변수에 차례로 연결됩니다. 따라서 첫 번째 값을 덮어써서 잃어버리지 않고 두 값을 바꿀 수 있습니다.
자주 하는 오해: 대입문의 등호는 수학의 등호와 같을까요?
대입문은 오른쪽을 먼저 처리한 뒤 그 결과를 왼쪽 변수에 연결합니다. 따라서 변수의 현재 값에 수를 더한 결과를 다시 같은 변수에 대입하는 표현도 가능합니다.
입력된 값과 자료형 변환
프로그램은 키보드, 파일, 센서 등 여러 곳에서 데이터를 받습니다. 파이썬의 input()으로 키보드 입력을 받으면 결과는 문자열입니다. 사용자가 화면에서 20을 입력해도 프로그램은 처음에 이를 문자열 "20"으로 받아들입니다.
문자열 상태에서도 화면에 표시하거나 다른 글자와 이어 붙일 수 있습니다. 그러나 수치 계산에 사용하려면 알맞은 숫자형으로 바꾸어야 합니다. 값의 자료형을 다른 자료형으로 바꾸는 일을 자료형 변환(type conversion)이라고 합니다.
| 변환 | 의미 | 변환 예 |
|---|---|---|
int() |
정수로 변환 | "25" → 25 |
float() |
실수로 변환 | "3.5" → 3.5 |
str() |
문자열로 변환 | 25 → "25" |
bool() |
불리언으로 변환 | 값의 유무를 참·거짓으로 해석 |
모든 값이 원하는 자료형으로 바뀌는 것은 아닙니다. "스무 살"을 정수로 바꾸거나 "3.5"를 int()로 바로 바꾸려고 하면 오류가 발생합니다. 입력을 받는 프로그램에서는 사용자가 예상한 형식으로 입력했는지 확인할 필요가 있습니다.
입력, 변환, 계산을 한 줄씩 확인하기
age_text = input("나이: ")
age = int(age_text)
next_age = age + 1
print(f"내년 나이: {next_age}세")내년 나이: 21세
20을 입력했다고 가정하면 값은 다음 순서로 바뀝니다.
| 실행 단계 | 변수 | 값 | 자료형 |
|---|---|---|---|
| 입력 직후 | age_text |
"20" |
str |
| 변환 직후 | age |
20 |
int |
| 계산 직후 | next_age |
21 |
int |
int(input(...))처럼 입력과 변환을 한 줄로 작성할 수도 있습니다. 다만 처음에는 위와 같이 나누어 쓰는 편이 어느 단계에서 오류가 났는지 확인하기 쉽습니다.
입력받은 내용을 문장으로 출력하기
입력 함수는 계산기에만 쓰이지 않습니다. 사용자의 이름, 메일 주소, 지역처럼 문자열로 사용할 정보를 받아 안내 문장을 만드는 데에도 사용할 수 있습니다. 이런 예제는 입력과 출력의 관계가 바로 보이기 때문에 파이썬을 처음 배우는 학생에게 알맞습니다.
수강신청 확인 메일 만들기
student_name = input("학생 이름: ")
subject_name = input("신청 과목: ")
email = input("받을 메일 주소: ")
print(f"받는 사람: {email}")
print(f"{student_name} 학생의 {subject_name} 수강신청이 접수되었습니다.")받는 사람: seoyeon@example.com
이서연 학생의 컴퓨팅적사고 수강신청이 접수되었습니다.
세 입력값은 계산하지 않으므로 문자열 상태로 사용합니다. 입력 순서와 출력 문장을 바꾸어 보면서 각 변수가 어느 위치에 사용되는지 확인할 수 있습니다.
비밀번호 관련 예제를 사용할 때에는 실제 비밀번호를 메일로 보내는 상황을 그대로 모방하지 않는 편이 좋습니다. 실제 서비스에서는 기존 비밀번호 대신 일회용 인증번호나 비밀번호 재설정 링크를 보냅니다. 수업에서는 보안 원칙도 함께 익힐 수 있도록 ‘인증번호 발송 안내’로 바꾸는 것이 적절합니다.
택배 발송 안내문 만들기
receiver = input("받는 사람: ")
address = input("배송지: ")
box_count = int(input("상자 수: "))
weight = float(input("전체 무게(kg): "))
print(f"{receiver} 님에게 택배를 발송합니다.")
print(f"배송지: {address}")
print(f"상자 {box_count}개, 전체 무게 {weight:.1f}kg")김민지 님에게 택배를 발송합니다.
배송지: 서울시 종로구
상자 2개, 전체 무게 3.5kg
받는 사람과 배송지는 계산하지 않으므로 문자열로 사용합니다. 상자 수는 정수, 무게는 실수로 변환합니다. 하나의 프로그램에서도 입력값의 용도에 따라 서로 다른 자료형을 선택해야 한다는 점을 확인할 수 있습니다. int()나 float()를 제거한 뒤 type()으로 자료형을 확인해 보면, input()이 모든 입력을 문자열로 받는다는 사실도 다시 확인할 수 있습니다.
flowchart LR
A[키보드 입력] --> B[문자열로 받기]
B --> C[필요한 자료형으로 변환]
C --> D[계산에 사용]
잠깐 확인하기
- 사용자가
15를 입력했을 때input()의 결과는 어떤 자료형입니까? - 입력한 값을 화면에 그대로 보여 주는 경우에도 반드시 정수로 변환해야 합니까?
값을 계산하는 산술 연산
연산자(operator)는 값에 어떤 처리를 할지 나타내는 기호입니다. 파이썬의 산술 연산자는 계산기에서 사용하는 기호와 비슷하지만, 몫·나머지·거듭제곱처럼 별도의 기호를 사용하는 연산도 있습니다.
| 연산자 | 의미 | 예 | 결과 |
|---|---|---|---|
+ |
더하기 | 7 + 3 |
10 |
- |
빼기 | 7 - 3 |
4 |
* |
곱하기 | 7 * 3 |
21 |
/ |
나누기 | 7 / 2 |
3.5 |
// |
나눈 몫을 내림하여 구하기 | 7 // 2 |
3 |
% |
나머지 구하기 | 7 % 2 |
1 |
** |
거듭제곱 | 2 ** 3 |
8 |
몫과 나머지는 물건을 일정한 수로 나누는 상황에서 유용합니다. 사탕 17개를 5명에게 똑같이 나누면 한 사람에게 3개씩 줄 수 있고 2개가 남습니다. 이 관계는 17 // 5와 17 % 5로 표현할 수 있습니다. //는 소수점 아래를 단순히 지우는 연산이 아니라 계산 결과를 아래쪽 정수로 내리는 연산입니다. 음수가 포함된 계산에서는 이 차이가 나타납니다.
하나의 식에 여러 연산자가 있으면 계산 순서를 확인해야 합니다. 파이썬은 거듭제곱, 곱셈·나눗셈, 덧셈·뺄셈의 순서로 계산합니다. 계산 순서를 분명하게 나타내고 싶을 때에는 괄호를 사용합니다.
| 식 | 계산 과정 | 결과 |
|---|---|---|
3 + 4 * 2 |
곱셈을 먼저 계산 | 11 |
(3 + 4) * 2 |
괄호 안을 먼저 계산 | 14 |
2 ** 3 * 4 |
거듭제곱을 먼저 계산 | 32 |
변수의 현재 값에 일정한 수를 더하거나 곱한 뒤 다시 저장하는 일도 자주 발생합니다. +=, -=, *=, /=와 같은 복합 대입 연산자는 연산과 대입을 한 번에 나타냅니다. 구체적인 작성 방법과 실행 결과는 코딩 실습에서 확인합니다.
복합 대입과 연산 순서 추적하기
points = 10
points += 5
points *= 2
print(points)30
| 실행된 문장 | 실행 뒤 points |
설명 |
|---|---|---|
points = 10 |
10 | 처음 값 대입 |
points += 5 |
15 | 현재 값에 5를 더해 다시 대입 |
points *= 2 |
30 | 현재 값에 2를 곱해 다시 대입 |
복합 대입문을 읽을 때에는 변수가 한 줄마다 어떻게 달라지는지 적어 보면 결과를 쉽게 확인할 수 있습니다.
문자열에도 연산이 있다
덧셈 기호는 숫자를 더할 때뿐 아니라 문자열을 이어 붙일 때에도 사용됩니다. "컴퓨팅" + "사고"는 두 문자열을 연결합니다. 문자열에 정수를 곱하면 같은 문자열을 여러 번 반복할 수 있습니다. 이처럼 같은 연산자라도 값의 자료형에 따라 하는 일이 달라질 수 있습니다.
반대로 문자열과 정수를 그대로 더할 수는 없습니다. 나이를 나타내는 정수와 "세"라는 문자열을 바로 더하면 두 값의 종류가 맞지 않아 오류가 발생합니다. 화면에 문장과 값을 함께 나타낼 때에는 f-string을 사용하면 편리합니다.
name = "서연"
score = 87
print(f"{name} 학생의 점수는 {score}점입니다.")서연 학생의 점수는 87점입니다.
문자열 앞에 f를 붙이고 중괄호 안에 변수나 식을 쓰면, 해당 값이 문자열 안에 들어갑니다. 출력할 값의 자료형을 일일이 문자열로 바꾸지 않아도 된다는 장점이 있습니다.
자주 하는 오해: 더하기 기호는 언제나 숫자를 더할까요?
정수끼리 더하면 합이 계산되지만 문자열끼리 더하면 두 문자열이 연결됩니다. 연산자를 보기 전에 값의 자료형을 먼저 확인해야 합니다.
오류 메시지는 수정할 곳을 알려 준다
프로그램이 실행되지 않거나 예상과 다른 결과가 나오는 일은 프로그래밍 과정에서 흔히 발생합니다. 오류 메시지는 문제가 발생한 위치와 원인을 찾을 수 있도록 단서를 제공합니다.
| 오류 | 주된 원인 | 확인할 내용 |
|---|---|---|
SyntaxError |
파이썬 문법에 맞지 않게 작성함 | 괄호, 따옴표, 콜론 등의 누락 |
NameError |
정의하지 않은 이름을 사용함 | 변수 이름의 철자와 대입 여부 |
TypeError |
맞지 않는 자료형끼리 연산함 | 연산에 사용된 값의 자료형 |
ValueError |
자료형은 맞지만 값의 형식이 적절하지 않음 | 숫자로 변환하려는 문자열의 내용 |
다음 코드는 네 오류의 차이를 보여 줍니다. 실제로 확인할 때에는 한 줄씩 따로 실행해야 합니다.
print("안녕하세요) # SyntaxError: 따옴표가 닫히지 않음
print(total) # NameError: total이 아직 정의되지 않음
print("수량: " + 3) # TypeError: 문자열과 정수를 더함
number = int("세 개") # ValueError: 정수로 바꿀 수 없는 문자열오류 메시지를 읽을 때에는 마지막 줄에 표시된 오류 이름과 설명을 먼저 확인합니다. 그다음 오류가 지목한 줄에서 변수 이름, 자료형, 괄호와 따옴표를 살펴봅니다. 한 번에 여러 부분을 바꾸기보다 원인으로 보이는 한 부분을 고치고 다시 실행하는 편이 좋습니다.
주석은 프로그램을 읽는 사람에게 코드의 목적이나 주의할 점을 알려 주는 설명입니다. 파이썬에서는 # 뒤에 주석을 작성합니다. 주석은 눈에 보이는 명령을 그대로 번역하기보다 왜 그 계산이 필요한지 설명할 때 도움이 됩니다. 의미 있는 변수 이름, 일정한 공백, 필요한 주석은 프로그램을 다시 읽고 오류를 찾는 시간을 줄여 줍니다.
잠깐 확인하기
- 정의하지 않은 변수 이름을 사용했을 때 확인해야 할 오류는 무엇입니까?
- 문자열
"삼"을 정수로 바꾸지 못한 경우에는 어떤 부분을 점검해야 합니까?
터틀 그래픽으로 실행 과정을 관찰하기
터틀 그래픽은 화면 속 거북이를 이동시키면서 선과 도형을 그리는 도구입니다. 명령을 실행한 결과가 화면에 바로 나타나기 때문에 파이썬 명령이 순서대로 처리되는 모습을 관찰하기 좋습니다.
거북이를 앞으로 이동시키면 현재 위치와 방향을 기준으로 선이 그려집니다. 방향을 바꾼 뒤 다시 이동하면 새로운 방향으로 선이 이어집니다. 정사각형을 그리려면 ‘이동하고 90도 회전하는 과정’을 네 번 수행해야 합니다. 이 과정은 명령의 순서가 결과에 어떤 영향을 주는지 보여 줍니다.
터틀 그래픽에서 이동 거리와 회전 각도는 숫자형 값입니다. 그 값에 이름을 붙이면 같은 도형의 크기나 모양을 쉽게 바꿀 수 있습니다. 따라서 터틀은 값, 변수, 연산, 실행 순서를 눈으로 확인하는 학습 도구입니다.
같은 명령으로 정사각형 그리기
import turtle
pen = turtle.Turtle()
side = 100
pen.forward(side)
pen.right(90)
pen.forward(side)
pen.right(90)
pen.forward(side)
pen.right(90)
pen.forward(side)
pen.right(90)
turtle.done()side의 값을 바꾸면 네 변의 길이가 한꺼번에 달라집니다. 같은 두 명령이 반복된다는 사실도 코드에서 확인할 수 있습니다. 지금은 반복되는 명령을 직접 작성하고 실행 순서를 관찰하며, 반복을 간단히 표현하는 문법은 별도의 단원에서 다룹니다.
핵심 정리
파이썬 코드는 위에서 아래로 실행되며, 각 줄은 현재 변수에 연결된 값을 이용합니다. 값의 자료형에 따라 같은 연산자도 다르게 동작하므로 type()과 실행 결과를 함께 확인하는 습관이 필요합니다. 대입문에서는 오른쪽 식이 먼저 계산되고 그 결과가 왼쪽 변수에 연결되며, 다중 대입과 복합 대입은 이러한 규칙을 간결하게 표현합니다. 키보드 입력은 문자열로 들어오므로 계산 목적에 맞게 변환해야 합니다. 예상과 다른 결과나 오류가 발생하면 변수값 추적표와 오류 메시지를 이용하여 문제가 생긴 줄을 찾습니다.