A-1: 파이썬 첫 대화 — 변수와 입출력
목차 35
안녕하세요! 여러분의 파이썬 가이드, 홍순구 튜터입니다.
지난 시간엔 파이썬을 깔고, uv 로 환경을 만들고, VS Code 에서 ▶ 버튼으로 첫 코드를 실행했죠. 작업대가 완성됐으니, 오늘부터는 드디어 파이썬 언어 자체와 대화를 시작합니다.
오늘이 끝나면 여러분은 파이썬에게 직접 말을 걸고, 값을 그릇에 담고, 사용자와 묻고 답하는 작은 프로그램을 만들게 됩니다. 빨간 에러 메시지를 읽는 법까지요.
오늘 우리는 이런 길을 따라갑니다.
오늘의 여정 — A-1 (총 5 단계)
1. REPL — 파이썬과 첫 대화
2. 변수 — 값을 담는 이름표
3. 값의 종류 — 숫자·글자·참거짓
4. print 와 input — 묻고 답하기
5. 에러 읽는 법 — 빨간 글씨와 친구 되기
처음 보는 단어가 나와도 걱정 마세요. 하나씩, 직접 실행해 보면서 익혀갈 거예요.
💡 오늘 수업의 핵심 — "파이썬에게 말을 걸고, 변수에 값을 담아 사용자와 묻고 답하기까지"
🎯 학습 목표
- REPL 로 파이썬에게 한 줄씩 말을 걸고 즉시 결과를 확인할 수 있다
- 변수에 값을 담고, 값의 종류(int·float·str·bool)를
type()으로 확인할 수 있다 input()과print()로 사용자와 묻고 답하는 프로그램을 만들 수 있다- 빨간 에러 메시지를 읽고 무엇이 잘못됐는지 찾아낼 수 있다
Step 1: "REPL — 파이썬과 첫 대화"
지난 시간에 작업대를 다 차렸으니, 이제 파이썬과 직접 대화해 볼 시간입니다. 파이썬에는 한 줄 입력하면 즉시 답을 돌려주는 대화 모드가 있어요. 이걸 REPL 이라고 부릅니다.
REPL 켜기
VS Code 아래쪽 터미널(또는 별도 터미널 창)에서 아래 명령을 입력하면 대화 모드가 켜집니다.
uv run python
그러면 이런 안내가 뜨고, 맨 아래에 >>> 라는 표시가 나타나요.
(날짜나 운영체제 부분은 여러분 컴퓨터마다 조금 다르게 보일 수 있어요.)
Python 3.14.4
Type "help", "copyright", "credits" or "license" for more information.
>>>
이 >>> 표시가 "자, 입력하세요" 라는 신호예요.
여기에 한 줄씩 쳐 봅시다.
파이썬에게 말 걸어보기
>>> 2 + 2
4
>>> name = "jaehoon"
>>> name
'jaehoon'
>>> exit()
한 줄씩 읽어볼까요?
2 + 2를 입력했더니 파이썬이 즉시4라고 답했어요. 파이썬은 계산기도 됩니다.name = "jaehoon"은 "name 이라는 이름표에 글자 jaehoon 을 담아라" 라는 뜻이에요. 이건 다음 Step에서 자세히 다룹니다.name만 입력했더니 방금 담아둔 값'jaehoon'을 보여줬어요.exit()를 입력하면 대화 모드에서 빠져나옵니다.
방금 2 + 2 를 해봤죠?
파이썬에는 더하기·빼기 말고도 다양한 계산 기호가 있어요.
본격적인 사칙연산과 비교는 다음 시간에 연산자라는 이름으로 자세히 배웁니다.
💡 한 줄 정리
uv run python 으로 REPL 을 켜면 한 줄씩 입력하고 즉시 결과를 확인하는 실험 공간이 열려요.
🙋 학생 질문 — "REPL 에 쓰는 거랑, 파일로 저장해서 실행하는 거랑 뭐가 달라요?"
아주 핵심을 찌르는 질문이에요!
REPL 은 빠른 실험용이에요. "이거 하면 어떻게 되지?" 싶을 때 한 줄 쳐서 바로 확인하기 좋죠. 하지만 REPL 을 끄면 입력한 내용이 사라집니다.
반면 파일에 저장하면 그 코드가 남아요. 여러 줄짜리 프로그램을 만들고, ▶ 버튼으로 언제든 다시 실행할 수 있죠. 바로 다음 Step부터는 파일에 코드를 써서 실행할 거예요.
정리하면, 짧은 실험은 REPL, 제대로 된 프로그램은 파일이라고 기억하면 됩니다.
Step 2: "변수 — 값을 담는 이름표"
프로그램이 뭔가를 기억하려면 값을 어딘가에 담아둬야 합니다. 그 담는 그릇이 바로 변수(variable)예요.
변수는 값을 담는 이름표
REPL에서 name = "jaehoon" 을 해봤죠?
여기서 = 기호는 수학의 "같다"가 아니에요.
"오른쪽 값을 왼쪽 이름표에 담아라" 라는 뜻입니다.
택배 상자에 이름표를 붙이는 모습을 떠올려 보세요. 상자 안에 물건(값)을 넣고, 겉에 이름표(변수)를 붙이는 거예요. 나중에 이름표만 부르면 그 안의 물건을 꺼낼 수 있죠.
REPL에서 직접 담고 꺼내 봅시다.
>>> username = "jaehoon"
>>> username
'jaehoon'
>>> follower_count = 1240
>>> follower_count
1240
username 이라는 이름표에 글자를, follower_count 라는 이름표에 숫자를 담았어요.
이름표만 부르면 담아둔 값이 그대로 나오죠.
변수 이름 짓는 규칙
변수 이름은 아무렇게나 짓지 않고, 파이썬에서는 보통 follower_count 처럼 소문자에 밑줄(_)을 끼워 짓습니다.
이런 방식을 snake_case(스네이크 케이스)라고 불러요.
뱀이 기어가듯 밑줄로 단어를 이어서 그렇게 부릅니다.
이름은 그 안에 뭐가 담겼는지 알 수 있게 짓는 게 좋아요.
a, x 보다는 username, follower_count 가 나중에 코드를 읽을 때 훨씬 친절하답니다.
💡 한 줄 정리
변수는 값을 담는 이름표예요. = 는 "오른쪽 값을 왼쪽 이름표에 담아라" 라는 뜻이고, 이름은 snake_case 로 의미 있게 짓습니다.
🙋 학생 질문 — "변수 이름은 정말 아무렇게나 지어도 돼요?"
거의 자유롭지만, 두 가지 규칙은 있어요.
첫째, 이름은 숫자로 시작할 수 없어요. 1st_user 는 안 되고 first_user 는 됩니다.
둘째, 띄어쓰기는 못 써요. 그래서 밑줄로 단어를 잇는 snake_case 를 쓰는 거예요.
그리고 규칙은 아니지만 강력한 습관이 하나 있어요.
이름만 봐도 무엇이 담겼는지 알 수 있게 짓는 것.
x = 1240 보다 follower_count = 1240 이 훨씬 읽기 좋죠.
코드는 컴퓨터만 보는 게 아니라 나중의 나, 그리고 동료가 읽으니까요.
Step 3: "값의 종류 — 숫자·글자·참거짓"
변수에 값을 담는 법을 배웠어요. 그런데 담기는 값에는 종류가 있습니다.
자료형이란?
글자인지, 숫자인지, 참/거짓인지에 따라 파이썬이 값을 다르게 다뤄요. 이 종류를 자료형(data type)이라고 부릅니다. A-1에서는 가장 기본이 되는 네 가지를 만나요.
| 자료형 | 한국어 | 예시 | 어디에 쓰나 |
|---|---|---|---|
int |
정수 | 1240 |
팔로워 수, 좋아요 수 |
float |
실수(소수) | 4.5 |
평점, 평균 |
str |
문자열(글자) | "jaehoon" |
이름, 캡션 |
bool |
불리언(참/거짓) | True |
인증 여부, 공개 여부 |
글자는 큰따옴표로 감싸서 "jaehoon" 처럼 쓰고, 참/거짓은 True 또는 False 로 적습니다.
(첫 글자가 대문자예요.)
직접 담고, 종류를 확인해 봅시다
인스타그램의 사용자 한 명을 떠올리며 값들을 변수에 담아볼게요.
아래 코드를 a1_types.py 라는 파일로 저장하고 ▶ 버튼으로 실행해 봅니다.
(우리 코드베이스에서는 src/a_intro/a1_types.py 에 들어 있어요.)
# src/a_intro/a1_types.py
# 변수에 값을 담고, print() 와 type() 으로 "값의 종류"를 눈으로 확인해 봅니다.
# 사용자 이름 — 글자(문자열, str)
username = "jaehoon"
print(username)
print(type(username))
# 팔로워 수 — 정수(int)
follower_count = 1240
print(follower_count)
print(type(follower_count))
# 평점 — 소수(실수, float)
rating = 4.5
print(rating)
print(type(rating))
# 인증 계정 여부 — 참/거짓(불리언, bool)
is_verified = True
print(is_verified)
print(type(is_verified))
여기서 type() 은 "이 값의 종류가 뭐야?" 하고 물어보는 도구예요.
실행하면(▶ 버튼, 또는 터미널에서 uv run python src/a_intro/a1_types.py) 이렇게 나옵니다.
jaehoon
<class 'str'>
1240
<class 'int'>
4.5
<class 'float'>
True
<class 'bool'>
값과 함께 <class 'str'>, <class 'int'> 처럼 종류가 찍혀 나오죠?
username 은 글자라서 str, follower_count 는 정수라서 int 로 나왔어요.
변수 이름과 값, 그리고 그 종류를 한눈에 정리하면 이렇습니다.
username ──▶ "jaehoon" str · 글자
follower_count ──▶ 1240 int · 정수
rating ──▶ 4.5 float · 소수
is_verified ──▶ True bool · 참/거짓
왼쪽 = 변수(이름표) 오른쪽 = 담긴 값과 그 종류
💡 한 줄 정리
값에는 종류(int·float·str·bool)가 있고, type() 으로 그 종류를 직접 눈으로 확인할 수 있어요.
🙋 학생 질문 — "종류를 굳이 알아야 하나요? 그냥 값만 쓰면 안 돼요?"
아주 좋은 질문이에요! 값의 종류가 중요한 이유는, 종류에 따라 할 수 있는 일이 다르기 때문이에요.
예를 들어 숫자 3 과 4 는 더하면 7 이 되죠.
하지만 글자 "3" 과 "4" 를 더하면 "34" 처럼 그냥 붙어버려요.
같은 3, 4 처럼 보여도 종류가 다르면 결과가 달라지는 거예요.
그래서 "이 값이 숫자인지 글자인지" 를 아는 게 중요합니다.
헷갈릴 때 type() 으로 확인하는 습관을 들이면, 나중에 "왜 계산이 이상하지?" 하는 실수를 줄일 수 있어요.
Step 4: "묻고 답하기 — print 와 input"
지금까지는 우리가 값을 미리 정해서 코드에 적어 넣었어요. 이번에는 사용자에게 직접 물어보고, 그 답을 받아 쓰는 프로그램을 만들어 봅시다.
print 와 input
두 도구를 만납니다.
print()는 괄호 안의 내용을 화면에 출력해요. (이미 여러 번 써봤죠?)input()은 사용자에게 입력을 받아요. 괄호 안에 질문을 적으면, 사용자가 키보드로 친 글자를 돌려줍니다.
f-string 으로 값 끼워넣기
받은 이름을 인사말에 넣으려면, 글자 사이에 변수 값을 끼워야 합니다.
이때 쓰는 게 f-string 이에요.
큰따옴표 앞에 f 를 붙이고, 값을 넣고 싶은 곳에 {변수이름} 을 적으면 됩니다.
아래 코드를 a1_hello.py 로 저장해 봅시다.
(코드베이스에서는 src/a_intro/a1_hello.py 에 있어요.)
# src/a_intro/a1_hello.py
name = input("사용자 이름: ")
print(f"안녕하세요 @{name}")
흐름을 그림으로 보면 이래요.
input("사용자 이름: ")
└─ 사용자가 jaehoon 을 입력하면, 그 글자가 name 에 담겨요
print(f"안녕하세요 @{name}")
└─ {name} 가 "jaehoon" 으로 바뀌어 → 안녕하세요 @jaehoon
이제 실행해 봅시다.
실행하면 "사용자 이름: " 까지 출력하고 멈춰서 여러분의 입력을 기다려요.
jaehoon 을 치고 Enter 를 누르면 인사말이 나옵니다.
사용자 이름: jaehoon
안녕하세요 @jaehoon
첫 줄의 jaehoon 은 여러분이 직접 친 글자예요.
그 값이 name 에 담기고, f-string 의 {name} 이 값으로 바뀌어 안녕하세요 @jaehoon 이 완성된 거죠.
여기서 본 f 와 중괄호 {}, 그리고 글자를 더 자유롭게 다루는 법은 다음 시간에 자세히 배워요.
지금은 "f 를 붙이면 {변수} 가 값으로 바뀐다" 만 기억하면 충분합니다.
💡 한 줄 정리
input() 으로 사용자에게 묻고, print() 로 답하며, f-string 의 {변수} 로 값을 글자 사이에 끼워넣을 수 있어요.
🙋 학생 질문 — "input 으로 받은 숫자로 바로 계산이 되나요?"
여기에 초보자가 자주 걸려 넘어지는 함정이 하나 있어요.
input() 으로 받은 값은 무조건 글자(str)예요.
사용자가 25 를 입력해도, 파이썬은 그걸 숫자 25가 아니라 글자 "25" 로 받아들입니다.
그래서 바로 더하거나 빼려고 하면 생각과 다르게 동작해요.
글자를 숫자로 바꾸려면 형 변환이라는 걸 해줘야 하는데, 이건 다음 시간에 배웁니다. 지금은 "input 으로 받으면 일단 글자다" 만 알아두면 돼요.
Step 5: "빨간 글씨가 무섭지 않아요"
코딩을 하다 보면 빨간 글씨, 즉 에러(error) 메시지를 정말 자주 만납니다. 처음엔 덜컥 겁이 나죠. 그런데 한 가지 약속할게요. 에러가 나도 컴퓨터는 절대 고장 나지 않습니다.
에러 메시지는 적이 아니라 안내문이에요. "여기가 이렇게 잘못됐어요" 하고 알려주는 친절한 쪽지죠. 게다가 파이썬 3.14는 종종 정답까지 제안해 줍니다. 직접 만들어 보면서 읽는 법을 익혀봅시다.
실험 1: 변수 이름 오타
username 을 usernmae 라고 잘못 친 코드를 실행하면 이런 빨간 글씨가 나옵니다.
Traceback (most recent call last):
File "a1_errors_demo.py", line 2, in <module>
print(usernmae)
^^^^^^^^
NameError: name 'usernmae' is not defined. Did you mean: 'username'?
겁먹지 말고 한 부분씩 읽어볼까요?
| 부분 | 뜻 |
|---|---|
NameError |
에러의 종류 — "이름을 못 찾겠어요" |
^^^^^^^^ |
문제가 생긴 위치를 정확히 가리킴 |
name 'usernmae' is not defined |
usernmae 라는 이름은 정의된 적이 없어요 |
Did you mean: 'username'? |
"혹시 username 아니에요?" 하고 제안 |
맨 아랫줄을 보세요.
파이썬이 "혹시 username 을 쓰려던 거 아니에요?" 하고 정답을 콕 집어 알려줍니다.
정말 친절하죠?
실험 2: 함수 이름 오타
이번엔 print 를 prnt 로 잘못 쳐봅니다.
Traceback (most recent call last):
File "a1_errors_demo.py", line 1, in <module>
prnt("안녕하세요")
^^^^
NameError: name 'prnt' is not defined. Did you mean: 'print'?
마찬가지로 Did you mean: 'print'? 하고 우리가 원한 print 를 제안해 줍니다.
오타 하나쯤은 파이썬이 눈치껏 잡아주는 셈이에요.
실험 3: 괄호를 안 닫음
이번엔 여는 괄호만 쓰고 닫는 괄호를 깜빡한 경우예요.
File "a1_errors_demo.py", line 1
print("안녕하세요"
^
SyntaxError: '(' was never closed
SyntaxError 는 문법이 어긋났다는 뜻이고, '(' was never closed 는 "여는 괄호를 열고 닫지 않았어요" 라는 뜻이에요.
^ 표시가 문제의 괄호를 정확히 가리키고 있죠.
에러 읽는 세 단계
앞으로 에러를 만나면 당황하지 말고 이 순서로 읽어보세요.
- 종류를 본다: 맨 아랫줄의
NameError,SyntaxError같은 이름이 어떤 종류인지 알려줘요 - 메시지를 읽는다: 그 뒤의 영어 문장이 무엇이 잘못됐는지 설명해요
- 위치와 제안을 본다:
^표시가 가리키는 곳을 확인하고,Did you mean?제안이 있으면 따라가요
프로 개발자도 하루에 수십 번씩 에러를 봅니다. 에러 없이 코딩하는 사람은 없어요. 에러와 친해지는 것이야말로 빠르게 느는 지름길이랍니다.
💡 한 줄 정리
에러는 무엇이 틀렸는지 알려주는 친절한 안내문이고, 파이썬 3.14는 Did you mean? 으로 정답까지 제안해 줘요.
🙋 학생 질문 — "에러가 영어로 나오는데, 영어를 못하면 어떡하죠?"
전혀 걱정 마세요! 에러 메시지의 영어는 늘 비슷한 단어가 반복돼요.
오늘 본 NameError, SyntaxError, not defined, Did you mean 만 알아도 대부분의 상황이 풀립니다.
처음엔 낯설어도, 같은 에러를 몇 번 만나다 보면 "아, 이건 이름 오타구나" 하고 한눈에 알게 돼요. 영어 실력이 아니라 익숙함의 문제예요.
그래도 모르는 메시지를 만나면, 그 문장을 그대로 복사해서 검색해 보세요. 같은 고민을 한 사람들의 답이 잔뜩 나온답니다. 이건 프로들도 매일 하는 일이에요.
마무리
오늘 파이썬 언어와의 첫 대화, 정말 고생 많으셨어요. 오늘 우리가 한 일을 돌아봅시다.
오늘 배운 핵심 세 가지
💡 하나: REPL 로 파이썬에게 한 줄씩 말을 걸어 즉시 답을 받았어요. 2 + 2 같은 계산부터 변수 맛보기까지요.
💡 둘: 변수는 값을 담는 이름표이고, 담긴 값에는 종류(int·float·str·bool)가 있어요. type() 으로 종류를 직접 확인했습니다.
💡 셋: input() 으로 묻고 print() 로 답하며, 빨간 에러 메시지는 무엇이 틀렸는지 알려주는 친구라는 걸 배웠어요.
"화면에 글자 몇 개 띄운 게 전부 아닌가?" 싶을 수 있어요. 하지만 그 안에는 값을 담고, 종류를 다루고, 사용자와 주고받고, 에러를 읽는 프로그래밍의 기본 흐름이 모두 들어 있었습니다. 여러분은 오늘 그 한 바퀴를 직접 돌아본 거예요.
다음 시간 예고
다음 시간에는 "연산과 문자열" 을 배웁니다.
오늘 REPL에서 2 + 2 를 살짝 맛봤죠?
다음 시간엔 더하기·빼기를 넘어 다양한 연산자로 본격적인 계산을 해봅니다.
그리고 오늘 인사말에 쓴 f-string 의 정체도 제대로 파헤쳐요.
글자를 자르고(split), 다듬고(strip), 바꾸는(replace) 문자열 도구들로 인스타그램 캡션과 해시태그를 가지고 놀아볼 거예요.
기대해 주세요!
과제
오늘 배운 변수·자료형·입출력·에러 읽기를 직접 손으로 익혀봅시다. 눈으로 읽는 것과 손으로 치는 것은 완전히 다르답니다.
[기초] 나를 변수에 담아보기
여러분 자신의 정보를 변수에 담고, 값과 종류를 출력하는 프로그램을 만들어 보세요.
- 이름(글자, str), 나이(정수, int), 키(소수, float — 예:
175.5), 학생인지 여부(참/거짓, bool)를 각각 변수에 담습니다 - 각 변수를
print()로 값을,type()으로 종류를 출력합니다 - 변수 이름은 snake_case 로 의미 있게 짓습니다
출력 예시:
홍길동
<class 'str'>
20
<class 'int'>
175.5
<class 'float'>
True
<class 'bool'>
[응용] 인사 프로그램 만들기
input() 으로 사용자에게 두 가지를 물어보고, f-string 으로 인사말을 완성하는 프로그램을 만들어 보세요.
- 사용자에게 이름과 좋아하는 음식을 각각 물어봅니다 (
input()두 번) - 받은 값을 f-string 에 끼워 한 문장으로 출력합니다
실행 예시:
이름을 알려주세요: 민지
좋아하는 음식은? 떡볶이
안녕하세요 @민지님! 떡볶이 좋아하시는군요.
[심화] 에러 탐험가 되기
일부러 에러를 세 가지 만들어 보고, 각 에러 메시지를 노트에 기록해 보세요. 에러와 친해지는 가장 빠른 길입니다.
- 시도해볼 에러: (1) 변수 이름 오타 내기 (2)
print를prnt처럼 오타 내기 (3) 닫는 괄호나 따옴표 빼기 - 각 에러마다 아래 형식으로 기록합니다
[에러 1]
- 뭘 바꿨나: username 을 usernmae 로 오타
- 에러 종류: NameError
- 메시지: name 'usernmae' is not defined. Did you mean: 'username'?
- 파이썬의 제안: username 아니냐고 물어봄
- 내 느낌: 정답까지 알려주다니 생각보다 친절하다!
생각해볼 주제
정답이 하나로 정해진 질문이 아니에요. 혼자 곰곰이 생각해 보거나, 함께 공부하는 동료와 이야기 나눠 보면 좋습니다.
1. = 는 왜 "같다"가 아니라 "담는다"일까?
수학에서 = 는 양쪽이 같다는 뜻이지만, 파이썬에서는 "오른쪽 값을 왼쪽 이름표에 담아라" 라는 뜻이었어요.
같은 기호를 다른 의미로 쓰는 게 처음엔 헷갈릴 수 있는데, 왜 프로그래밍 언어들은 이렇게 약속했을까요?
2. 값의 종류(자료형)를 굳이 나누는 이유는?
파이썬은 숫자, 글자, 참/거짓을 서로 다른 종류로 구분했어요.
사람은 "3"이 숫자인지 글자인지 보면 대충 아는데, 컴퓨터에게는 왜 이 구분을 분명히 해줘야 할까요?
숫자 3 과 글자 "3" 을 다르게 다루면 어떤 점이 좋을까요?
3. 에러 메시지가 "Did you mean?"처럼 똑똑해진 게 왜 입문자에게 중요할까?
예전 프로그래밍 언어들은 에러 메시지가 훨씬 불친절했습니다. 파이썬 3.14처럼 정답을 제안해 주는 친절한 에러는 처음 배우는 사람에게 어떤 차이를 만들까요? 반대로, 너무 친절하면 스스로 생각하는 힘이 약해지는 면도 있을까요?
✅ 예시 답안정답 보기
과제 예시답안
🎯 [기초] 나를 변수에 담아보기 — 예시답안
채점 포인트
| 항목 | 배점 | 기준 |
|---|---|---|
| 네 가지 자료형을 변수에 담음 | 40% | str·int·float·bool 을 각각 담았는가 |
print() 로 값, type() 으로 종류 출력 |
40% | 값과 종류가 모두 나오는가 |
| 변수 이름을 snake_case 로 의미 있게 | 20% | x 가 아니라 뜻이 보이는 이름인가 |
풀이 예시
# src/a_intro/a1_types_solution.py
name = "홍길동"
print(name)
print(type(name))
age = 20
print(age)
print(type(age))
height = 175.5
print(height)
print(type(height))
is_student = True
print(is_student)
print(type(is_student))
실행하면 값과 종류가 번갈아 나옵니다.
홍길동
<class 'str'>
20
<class 'int'>
175.5
<class 'float'>
True
<class 'bool'>
💡 튜터의 한마디
값을 큰따옴표로 감싸면 글자(str), 그냥 숫자면 정수(int), 점이 있으면 소수(float), True/False 면 참거짓(bool) 이에요.
type() 으로 직접 확인하는 습관을 들이면, 나중에 "이게 숫자였나 글자였나?" 헷갈릴 때 큰 도움이 됩니다.
자주 하는 실수
| 실수 | 무슨 일이 생기나 | 해결법 |
|---|---|---|
글자에 따옴표를 안 씀 (name = 홍길동) |
NameError 가 남 |
글자는 "홍길동" 처럼 큰따옴표로 감쌈 |
True 를 true 로 씀 |
NameError: ... Did you mean: 'True'? |
첫 글자를 대문자로 (True) |
변수 이름에 띄어쓰기 (is student) |
SyntaxError 가 남 |
밑줄로 이음 (is_student) |
🎯 [응용] 인사 프로그램 만들기 — 예시답안
채점 포인트
| 항목 | 배점 | 기준 |
|---|---|---|
input() 두 번으로 이름·음식 받음 |
40% | 두 가지를 모두 물어보는가 |
| f-string 으로 한 문장 출력 | 40% | {변수} 로 값을 끼워 넣었는가 |
| 실행 성공 | 20% | 입력한 값이 인사말에 반영되는가 |
풀이 예시
# src/a_intro/a1_hello_solution.py
name = input("이름을 알려주세요: ")
food = input("좋아하는 음식은? ")
print(f"안녕하세요 @{name}님! {food} 좋아하시는군요.")
실행하면 질문이 하나씩 뜨고, 답을 입력하면 인사말이 완성됩니다.
이름을 알려주세요: 민지
좋아하는 음식은? 떡볶이
안녕하세요 @민지님! 떡볶이 좋아하시는군요.
💡 튜터의 한마디
input() 한 번에 질문 하나씩 받아 각각 다른 변수에 담는 게 핵심이에요.
그리고 f-string 의 {name} 과 {food} 자리에 받은 값이 쏙 들어가죠.
@ 나 님! 같은 글자는 중괄호 바깥에 그대로 두면 글자 그대로 출력됩니다.
자주 하는 실수
| 실수 | 무슨 일이 생기나 | 해결법 |
|---|---|---|
큰따옴표 앞에 f 를 빼먹음 |
{name} 이 값으로 안 바뀌고 글자 그대로 나옴 |
따옴표 앞에 f 를 붙임 |
| 두 입력을 같은 변수에 담음 | 먼저 받은 값이 덮어쓰여 사라짐 | 변수 이름을 서로 다르게 |
🎯 [심화] 에러 탐험가 되기 — 예시답안
채점 포인트
| 항목 | 배점 | 기준 |
|---|---|---|
| 세 가지 에러를 실제로 만들어봄 | 40% | 직접 코드를 고치고 실행한 흔적 |
| 에러 메시지를 기록함 | 30% | 메시지 원문을 적었는가 |
| 에러 종류·의미를 추측함 | 20% | 나름대로 해석을 시도했는가 |
| 느낀 점을 적음 | 10% | 에러에 대한 태도 변화가 보이는가 |
풀이 예시
에러 1 — 변수 이름 오타
username 을 usernmae 로 잘못 쳐서 실행하면 이렇게 나옵니다.
NameError: name 'usernmae' is not defined. Did you mean: 'username'?
[에러 1]
- 뭘 바꿨나: username 을 usernmae 로 오타
- 에러 종류: NameError
- 메시지: name 'usernmae' is not defined. Did you mean: 'username'?
- 파이썬의 제안: username 아니냐고 물어봄
- 내 느낌: 정답까지 알려주다니 생각보다 친절하다!
에러 2 — 함수 이름 오타
print 를 prnt 로 잘못 쳐서 실행하면 이렇게 나옵니다.
NameError: name 'prnt' is not defined. Did you mean: 'print'?
[에러 2]
- 뭘 바꿨나: print 를 prnt 로 오타
- 에러 종류: NameError
- 메시지: name 'prnt' is not defined. Did you mean: 'print'?
- 파이썬의 제안: print 아니냐고 물어봄
- 내 느낌: 오타 하나도 눈치껏 잡아줘서 든든하다
에러 3 — 괄호를 안 닫음
여는 괄호만 쓰고 닫는 괄호를 빼면 이렇게 나옵니다.
SyntaxError: '(' was never closed
[에러 3]
- 뭘 바꿨나: print( 뒤의 닫는 괄호 ) 를 지웠다
- 에러 종류: SyntaxError
- 메시지: '(' was never closed
- 파이썬의 제안: ^ 표시로 안 닫힌 괄호 위치를 가리킴
- 내 느낌: 괄호도 짝이 맞아야 한다는 걸 알았다
💡 튜터의 한마디 에러를 일부러 만들어 보고 메시지를 읽는 연습을 한 것만으로 충분해요. 앞으로 코딩하면서 같은 에러를 만나면 "아, 이건 예전에 봤던 그거네!" 하는 순간이 옵니다. 에러는 무서운 게 아니라, 코드를 고치는 힌트예요.
생각해볼 주제 예시답안
🤔 [생각해볼 주제 1] = 는 왜 "같다"가 아니라 "담는다"일까?
문제 상황 요약
수학에서 = 는 양쪽이 같다는 뜻이지만, 파이썬에서는 "오른쪽 값을 왼쪽 이름표에 담아라" 라는 뜻이었어요.
같은 기호를 다른 의미로 쓰는 게 처음엔 헷갈리는데, 왜 프로그래밍 언어들은 이렇게 약속했을까요?
튜터의 가이드 및 해설
먼저 두 가지가 정말 다른 일이라는 걸 짚어볼게요.
수학의 = 는 "상태를 설명"합니다.
x = 3 은 "x 는 3 이다" 라는 사실을 말하는 거죠.
반면 프로그래밍의 = 는 "동작을 명령"합니다.
x = 3 은 "3 이라는 값을 x 라는 이름표에 담아라" 라는 지시예요.
그래서 프로그래밍에서는 이런 일도 가능합니다.
>>> count = 1
>>> count = count + 1
>>> count
2
수학으로 보면 count = count + 1 은 "count 가 count+1 과 같다" 라서 말이 안 되죠.
하지만 프로그래밍으로 읽으면 "지금 count 에 담긴 값(1)에 1 을 더해, 그 결과(2)를 다시 count 에 담아라" 라는 자연스러운 명령이 됩니다.
값이 시간에 따라 바뀌는 걸 다루는 게 프로그래밍이라, "담는다"는 의미의 = 가 꼭 필요했던 거예요.
💡 핵심을 한마디로
"프로그래밍의
=는 '같다'가 아니라 '담아라' 예요. 그래서count = count + 1처럼, 값을 꺼내 바꾼 뒤 같은 이름표에 다시 담는 일이 자연스럽습니다."
🤔 [생각해볼 주제 2] 값의 종류(자료형)를 굳이 나누는 이유는?
문제 상황 요약
파이썬은 숫자, 글자, 참/거짓을 서로 다른 종류로 구분했어요. 사람은 "3"이 숫자인지 글자인지 보면 대충 아는데, 컴퓨터에게는 왜 이 구분을 분명히 해줘야 할까요?
튜터의 가이드 및 해설
종류에 따라 할 수 있는 일이 다르기 때문이에요.
같은 3, 4 처럼 보여도, 숫자인지 글자인지에 따라 결과가 완전히 달라집니다.
>>> 3 + 4
7
>>> "3" + "4"
'34'
숫자 3 과 4 를 더하면 계산이 돼서 7 이 나오죠.
하지만 글자 "3" 과 "4" 를 더하면 그냥 옆으로 붙어서 "34" 가 됩니다.
만약 컴퓨터가 종류를 구분하지 않는다면, "3" + "4" 가 7 인지 "34" 인지 알 수 없어 매번 헷갈릴 거예요.
종류를 분명히 해두면 파이썬이 "숫자니까 더하고, 글자니까 붙인다" 를 정확히 판단할 수 있습니다.
이게 바로 오늘 Step 4에서 봤듯 input() 으로 받은 값이 항상 글자였던 이유와도 연결돼요.
사용자가 친 25 가 글자 "25" 라서, 숫자로 계산하려면 종류를 바꿔줘야 했죠.
그 "종류를 바꾸는 법(형 변환)"은 다음 시간에 배웁니다.
💡 핵심을 한마디로
"숫자
3과 글자"3"은 겉모습만 같을 뿐 종류가 달라요. 종류가 다르면 할 수 있는 일도 달라서, 컴퓨터에게는 이 구분이 꼭 필요합니다."
🤔 [생각해볼 주제 3] 에러 메시지가 "Did you mean?"처럼 똑똑해진 게 왜 입문자에게 중요할까?
문제 상황 요약
예전 프로그래밍 언어들은 에러 메시지가 훨씬 불친절했습니다. 파이썬 3.14처럼 정답을 제안해 주는 친절한 에러는 처음 배우는 사람에게 어떤 차이를 만들까요? 반대로, 너무 친절하면 스스로 생각하는 힘이 약해지는 면도 있을까요?
튜터의 가이드 및 해설
입문자에게 친절한 에러는 "막힘"을 "배움"으로 바꿔 줍니다.
처음 코딩을 배울 때 가장 무서운 순간은 빨간 글씨가 잔뜩 떴는데 뭐가 문제인지 모를 때예요. 예전 언어들은 "에러가 났다" 정도만 알려줘서, 초보자는 어디부터 봐야 할지 막막했습니다.
파이썬 3.14는 "혹시 username 아니에요?" 하고 정답까지 제안해 줘요.
이러면 초보자가 막혀서 포기하는 대신, 제안을 따라 고치면서 "아, 오타였구나" 를 스스로 배우게 됩니다.
실패가 좌절이 아니라 학습의 한 걸음이 되는 거죠.
다만 질문처럼, 너무 의존하면 약점이 될 수도 있어요. 제안만 기계적으로 따라 고치고 "왜 틀렸는지" 를 안 보면, 비슷한 실수를 반복하게 됩니다. 그래서 제안을 받아들이되, "이번엔 변수 이름 철자를 틀렸구나" 하고 원인을 한 번 더 새겨보는 습관이 좋아요.
💡 핵심을 한마디로
"친절한 에러는 초보자가 막혀서 포기하지 않게 도와주는 안전망이에요. 제안을 따라 고치되 '왜 틀렸는지'를 함께 보면, 같은 실수를 줄여갈 수 있습니다."