변수, 자료형, 입력과 출력
3강. 변수, 자료형, 입력과 출력
1. 이번 강의에서 해결할 문제
프로그램은 플레이어 이름, 점수, 이동 속도처럼 실행 중에 달라지는 데이터를 기억해야 합니다. 값의 종류를 구분하지 않으면 "120" + "30"이 150이 아니라 "12030"이 되거나, 숫자가 아닌 입력을 계산하려다 프로그램이 멈춥니다. 이번 강의에서는 값에 이름을 붙이고, 목적에 맞는 타입으로 다루는 방법부터 시작합니다.
2. 학습 목표
3. 핵심 개념
변수는 값을 담는 상자보다 '값에 붙인 이름'에 가깝습니다
Python에서 score = 120은 score라는 이름을 정수 값 120에 연결합니다. 이후 score = 150을 실행하면 기존 정수를 고치는 것이 아니라, 같은 이름을 새 값 150에 다시 연결합니다. 프로그램은 이 이름을 통해 값을 다시 읽고 계산합니다.
score = 120
print(score) # 120
score = 150
print(score) # 150
=는 '서로 같다'는 수학 기호가 아니라 오른쪽 결과를 왼쪽 이름에 대입한다는 뜻입니다. 비교는 ==를 사용합니다.
자료형은 값으로 할 수 있는 일을 정합니다
| 타입 | 뜻 | 예시 | 어울리는 데이터 |
|---|---|---|---|
int | 소수점 없는 정수 | 120, -3 | 점수, 목숨, 아이템 개수 |
float | 소수점이 있는 수 | 2.5, 0.875 | 이동 속도, 시간, 확률 |
str | 글자들의 순서인 문자열 | "Seokhyeon" | 이름, 직업, 안내 문장 |
bool | 참 또는 거짓 | True, False | 게임 종료 여부, 치명타 여부 |
None | 아직 의미 있는 값이 없음 | None | 아직 선택되지 않은 대상 |
int와 float는 계산할 수 있지만 str은 글자를 연결합니다. bool은 이후 조건문에서 '실행할지 말지'를 결정합니다. float는 많은 소수를 근삿값으로 저장하므로 돈처럼 정확한 소수 계산이 필요한 분야에서는 별도 방법이 필요합니다.
의미 있는 이름은 데이터의 목적을 남깁니다
x = 120보다 player_score = 120이 좋습니다. Python에서는 여러 단어를 소문자와 밑줄로 잇는 snake_case를 주로 사용합니다. 이름만 읽어도 단위와 뜻이 모호하지 않게 time보다 elapsed_seconds처럼 적습니다.
input()의 결과는 언제나 문자열입니다
키보드로 120을 입력해도 input()이 돌려주는 값은 "120"입니다. 계산하기 전에 목적에 맞게 변환해야 합니다.
score_text = input("점수: ") # 사용자가 120을 입력해도 str
score = int(score_text) # 숫자 모양 문자열을 int로 변환
int("120")은 성공하지만 int("백이십")과 int("3.5")는 ValueError를 냅니다. 변환은 잘못된 입력을 자동으로 고치는 기능이 아니라 요구한 타입의 값인지 확인하는 경계입니다.
4. 가장 작은 예제로 시작하기
먼저 입력 없이 네 종류의 값을 만들어 출력합니다. 파일은 C:\dev\game-log-analyzer\main.py입니다.
player_name = "Seokhyeon"
score = 120
move_speed = 2.5
is_game_over = False
print(player_name)
print(score)
print(move_speed)
print(is_game_over)
코드 한 줄씩 이해하기
player_name = "Seokhyeon"은 이름을 나타내는str값에player_name을 연결합니다.score = 120은 소수점이 필요 없는 점수이므로int를 사용합니다.move_speed = 2.5는 소수점이 필요한 속도이므로float입니다.is_game_over = False는 종료 여부라는 두 가지 상태를bool로 표현합니다.- 네 번의
print()는 현재 각 이름이 가리키는 값을 위에서 아래 순서로 보여 줍니다.
예상 출력:
Seokhyeon
120
2.5
False
score = 200으로 바꾸면 두 번째 줄만 200이 됩니다. 값 변경이 화면 결과에 어떻게 연결되는지 먼저 확인해야 합니다.
5. 입력부터 조건 판단까지의 동작 흐름
이제 키보드 입력을 타입에 맞게 변환하고, 점수에 따라 메시지를 바꿉니다.
print("=== 캐릭터 상태 ===")
player_name = input("플레이어 이름: ").strip()
score = int(input("점수: "))
move_speed = float(input("이동 속도: "))
is_game_over = input("게임이 끝났나요? (y/n): ").strip().lower() == "y"
print(f"이름: {player_name}")
print(f"점수: {score}, 이동 속도: {move_speed}")
if score >= 100:
print("상급 보상을 받을 수 있습니다.")
else:
print("100점까지 조금만 더 도전하세요.")
if is_game_over:
print("게임 결과를 저장합니다.")
else:
print("게임을 계속합니다.")
Set-Location C:\dev\game-log-analyzer
py -3.13 .\main.py
Seokhyeon, 120, 2.5, n을 차례로 입력하면 다음 흐름으로 처리됩니다.
| 순서 | 표현식 | 만들어지는 값 | 타입 |
|---|---|---|---|
| 1 | input(...).strip() | "Seokhyeon" | str |
| 2 | int(input(...)) | 120 | int |
| 3 | float(input(...)) | 2.5 | float |
| 4 | ...lower() == "y" | False | bool |
| 5 | score >= 100 | True | bool |
따라서 보상 문장은 상급 보상으로, 종료 문장은 게임 계속으로 출력됩니다. score를 80으로 바꾸면 비교 결과가 False가 되어 보상 문장만 달라집니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
10. 다음 강의 연결
이제 데이터를 타입에 맞게 저장할 수 있습니다. 다음 강의에서는 이 값들에 산술·비교·논리 연산을 적용해 실제 피해량과 생존 여부를 계산합니다.
변수, 자료형, 입력과 출력 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.