
3.1. 변수란 무엇인가?
변수(Variable)를 가장 쉽게 이해하는 방법은 이름표가 붙은 상자로 생각하는 것이다.
집에 상자가 있고 그 상자에 "장난감"이라는 이름표가 붙어 있다고 생각한다. 상자 안에 장난감을 넣어두면, 나중에 "장난감 상자"를 찾으면 꺼낼 수 있다. 프로그래밍에서 변수도 마찬가지로 데이터를 저장해두고 이름으로 꺼내 사용할 수 있다.
3.2. 변수를 왜 사용하는가?
변수가 없다면 아래처럼 같은 값을 계속 반복해서 써야 한다.
print("홍길동의 점수는", 85, "점입니다.")
print(85, "점은 합격입니다.")
위 코드에서 점수를 90으로 바꾸고 싶으면 85 를 두 곳 모두 수정해야 한다. 하지만 변수를 사용하면 한 곳만 바꿔도 된다.
score = 85
print("점수:", score, "점입니다.")
print(score, "점은 합격입니다.")
이제 score = 85 를 score = 90 으로 단 한 곳만 수정하면 모든 출력이 자동으로 바뀐다.
3.3. 변수 만들기
변수를 만드는 방법은 간단하다. 변수이름 = 저장할 값 형식으로 작성한다.
여기서 = 는 수학의 "같다"가 아니라 "오른쪽 값을 왼쪽 변수에 저장하라"는 의미이다.
name = "홍길동"
age = 20
height = 175.5
is_student = True
| 줄 | 설명 |
|---|---|
| 1 | name 이라는 상자에 "홍길동" 이라는 글자를 저장한다. |
| 2 | age 라는 상자에 숫자 20 을 저장한다. |
| 3 | height 라는 상자에 소수 175.5 를 저장한다. |
| 4 | is_student 라는 상자에 True (참)를 저장한다. |
3.4. 변수 사용하기
변수에 저장된 값을 사용할 때는 변수 이름만 쓰면 된다.
name = "홍길동"
age = 20
print(name)
print(age)
print("안녕하세요,", name, "님!")
print(name, "의 나이는", age, "세입니다.")
| 줄 | 설명 |
|---|---|
| 1~2 | 변수 name 과 age 에 값을 저장한다. |
| 4 | print(name) 은 print("홍길동") 과 같은 결과이다. 변수 이름을 쓰면 저장된 값으로 대체된다. |
| 5 | print(age) 는 print(20) 과 같은 결과이다. |
| 6 | 문자열과 변수를 쉼표로 연결하여 출력한다. |
| 7 | 두 변수를 함께 사용하여 문장을 만들어 출력한다. |
실행 결과
홍길동
20
안녕하세요, 홍길동 님!
홍길동 의 나이는 20 세입니다.
변수에 저장된 값의 자료형을 확인할 때는 type() 함수를 사용한다.
x=10
print(x)
y="Y"
print(y)
print(type(y)) # 변수 자료형 확인
print(type(x)) # 변수 자료형 확인
3.5. 변수의 값 바꾸기
변수는 말 그대로 "변하는 수"이다. 같은 변수에 새 값을 넣으면 이전 값은 사라지고 새 값으로 교체된다.
score = 50
print("처음 점수:", score)
score = 80
print("수정된 점수:", score)
score = score + 10
print("보너스 적용 점수:", score)
| 줄 | 설명 |
|---|---|
| 1 | score 에 50 을 저장한다. |
| 2 | 50 을 출력한다. |
| 4 | score 에 80 을 새로 저장한다. 이전 값 50 은 사라진다. |
| 5 | 80 을 출력한다. |
| 7 | 오른쪽 score + 10 을 먼저 계산한다. 현재 score 는 80 이므로 80 + 10 = 90 이다. 이 결과를 다시 score 에 저장한다. |
| 8 | 90 을 출력한다. |
실행 결과
처음 점수: 50
수정된 점수: 80
보너스 적용 점수: 90
3.6. 여러 변수 선언하기
여러 변수에 값을 한 번에 대입하여 선언할 수 있다. 변수의 선언 개수와 값의 개수가 같아야 한다.
x,y,z=10,20,30
print(x)
print(y)
print(z)
값이 동일한 여러 개의 변수는 다음과 같이 연속으로 대입하여 선언한다.
x=y=z=10
print(x)
print(y)
print(z)
두 변수의 값을 맞바꿀 때도 다중 대입을 활용하여 교환할 수 있다.
x,y=10,20 # x=10, y=20
x,y=y,x # x=20,y=10
print(x)
print(y)
3.7. 빈 변수 선언하기
변수에 값을 지정하지 않고 빈 상태로 둘 때는 None을 대입하여 선언한다.
x=None
3.8. 변수의 삭제
생성한 변수를 삭제할 때는 del 키워드를 사용한다. 삭제된 변수는 메모리에서 제거되므로 다시 접근하려고 하면 오류가 발생한다.
x=10
print(x)
del x
print(x)
3.9. 변수 이름 짓는 규칙
| 규칙 | 올바른 예 | 잘못된 예 |
|---|---|---|
영문자, 숫자, 언더스코어(_)만 사용 | player_hp | player-hp (하이픈 불가) |
| 숫자로 시작 불가 | hp2 | 2hp |
| 공백 사용 불가 | my_name | my name |
| 대소문자 구분 | Score 와 score 는 별개 | |
| 파이썬 예약어 사용 불가 | my_if | if, for, while 등 |
변수 이름은 저장하는 내용을 알 수 있게 짓는 것이 좋다. a, b 처럼 의미 없는 이름보다 name, score, hp 처럼 역할이 보이는 이름을 사용한다.
3.10. 변수로 계산하기
변수에 저장된 값을 이용하여 연산을 수행하고 그 결과를 새로운 변수에 저장할 수 있다.
a=10
b=20
c=a+b
print(c) #30
3.11. 변수의 값을 동적으로 할당하기
3.11.1. input() 함수
input 함수를 사용하여 사용자가 입력한 값을 동적으로 할당한다.
a = int(input('첫 번째 숫자를 입력하세요: ')) #int를 사용하여 값을 정수로 변환
b = int(input('두 번째 숫자를 입력하세요: ')) #int를 사용하여 값을 정수로 변환
print(a + b)
a = input('첫 번째 숫자를 입력하세요: ')
b = input('두 번째 숫자를 입력하세요: ')
int 함수를 사용해서 정수로 변환하지 않을 경우 문자열이 연결되어 출력된다.
실수 형태의 숫자를 입력받을 때는 float() 함수를 사용하여 변환한다.
a = float(input('첫 번째 숫자를 입력하세요: '))
b = float(input('두 번째 숫자를 입력하세요: '))
print(a + b)
3.11.2. input().split() – 문자열 분할
input으로 입력받은 문자열을 나눠서 여러 변수에 저장하는 방법이다.
| 방법 | 설명 | 코드 예시 |
|---|---|---|
split() | 공백 기준으로 분할 | a, b = input().split() |
split('구분자') | 지정한 구분자로 분할 | a, b = input().split(',') |
input('문자열').split() | 안내 메시지와 함께 공백으로 분할 | a, b = input('두 값 입력: ').split() |
input('문자열').split('기준문자열') | 안내 메시지와 함께 특정 문자로 분할 | a, b = input('쉼표로 입력: ').split(',') |
# 1. split() - 공백으로 분할
a, b = input('문자열 두 개를 입력하세요: ').split()
print(a)
print(b)
# 2. split('구분자') - 쉼표로 분할
x, y = input().split(',')
print(f"x: {x}, y: {y}")
# 3. input('문자열').split() - 안내 메시지와 함께 공백 분할
name, age = input('이름과 나이 입력: ').split()
print(f"이름: {name}, 나이: {age}")
# 4. input('문자열').split('기준문자열') - 안내 메시지와 특정 문자로 분할
fruit1, fruit2 = input('과일 두 개를 쉼표로 입력: ').split(',')
print(f"첫번째: {fruit1}, 두번째: {fruit2}")
f""는 Python 3.6부터 추가된 문자열 포맷팅 방법으로, 문자열 안에 변수 값을 쉽게 넣을 수 있다.
3.11.3. map
여러 값에 같은 함수를 한 번에 적용하는 함수를 사용하여 반복 작업을 줄일 수 있다.
#1 입력받은 값을 한번에 정수로 변환
a, b = map(int, input('숫자 두 개를 입력하세요: ').split())
print(a + b)
#2 입력받은 값을 콤마를 기준으로 분리
a, b = map(int, input('숫자 두 개를 입력하세요: ').split(','))
print(a + b)
#3
a, b, c = map(int, input().split())
print(a + b + c)
3번 예시 단계별 설명
1. input()
# 사용자가 입력: 10 20 30
input() # → '10 20 30' (문자열)
2. .split()
'10 20 30'.split() # → ['10', '20', '30'] (문자열 리스트)
공백 기준으로 문자열을 나눈다.
3. map(int, ...)
map(int, ['10', '20', '30']) # → [10, 20, 30] (정수 리스트)
각 문자열을 정수로 변환한다.
4. 변수에 저장
a, b, c = [10, 20, 30]
# a = 10
# b = 20
# c = 30
5. 계산 및 출력
print(a + b + c) # 10 + 20 + 30 = 60
map(int, ...) 에서 int 뒤에 괄호 ()가 없는 이유:
# ❌ 잘못된 방법
map(int(), input().split()) # 오류 발생!
# ✅ 올바른 방법
map(int, input().split())
int()→ 함수를 즉시 호출함 (결과: 0)int→ 함수 자체를 전달함
map은 함수를 받아서 나중에 실행하기 때문에 괄호 없이 함수 이름만 써야 한다.