파이썬 첫 프로그램 — input·print·f-string
hello.py 세 줄 안에 들어있는 다섯 가지 명령. 한 줄씩 해부합니다.
1편 끝에서 만든 hello.py 세 줄. 짧은 코드지만 입문자가 평생 쓸 다섯 가지 — input·변수·print·f-string·내장 함수 — 가 압축돼 있습니다. 비유하자면 자전거 핸들·페달·체인·브레이크·안장이 한 번에 들어있는 셈. 이 다섯 가지를 못 떼면 3편(자료형) 부터 자꾸 막혀요.
2편은 그래서 코드를 한 줄씩 해부하고, 마지막에 초보자가 자주 빠지는 함정 4가지를 정리합니다. 다 읽으면 본인이 직접 입력받아 인사하는 프로그램·이름 글자 수에 따라 다른 메시지 내는 프로그램을 변형해 만들 수 있습니다.
# hello.py
name = input("이름을 입력하세요: ")
print(f"안녕하세요, {name}님!")
print(f"이름 글자 수: {len(name)}")
첫 줄 — input 으로 사용자에게 묻기
첫 줄을 왼쪽부터 오른쪽으로 읽어봅니다. name 은 변수 이름입니다. 빈 상자를 하나 만들고 "name" 이라는 이름표를 붙인다고 생각하세요. = 는 수학의 등호가 아니라 "오른쪽 결과를 왼쪽 상자에 넣어라" 라는 할당 연산자입니다. input(...) 은 내장 함수 호출 — 괄호 안 문자열을 화면에 보여주고, 사용자가 Enter 를 누를 때까지 기다린 다음, 입력한 문자열을 돌려줍니다.
그래서 첫 줄 전체의 의미는: "화면에 '이름을 입력하세요:' 를 띄우고, 사용자 입력을 받아, 그 값을 name 상자에 넣어라."
📌 변수 이름의 4가지 규칙
① 영문자·숫자·언더스코어(_)만 가능 — user_name ✓ / user-name ✗
② 숫자로 시작 금지 — name1 ✓ / 1name ✗
③ 예약어(if, for, class, print) 금지
④ 관례상 소문자+언더스코어 (snake_case). userName 보다 user_name.
한국어 변수명 이름 = "준성" 도 파이썬 3 에서는 동작은 합니다. 하지만 라이브러리·동료 코드와 섞이는 순간 깨지는 위험이 커서 실무에서 한글 변수명은 안 씁니다. 학습 때부터 영문 snake_case 습관을.
둘째 줄 — print 와 f-string 의 만남
print(f"안녕하세요, {name}님!"). 가장 자주 쓰는 패턴이라 여기서 두 가지를 동시에 배웁니다.
print(...) 는 화면에 값을 그대로 출력하고 줄바꿈합니다. 괄호 안에 무엇을 넣든 (숫자·문자열·계산식·다른 함수의 결과) 받아서 찍어요.
문자열 앞의 f 가 f-string(formatted string) 의 신호입니다. f 가 붙은 문자열 안에서는 { } 사이에 변수나 식을 넣을 수 있어요. 파이썬이 그 자리를 변수의 현재 값으로 자동 치환합니다.
name = "준성"
print(f"안녕, {name}!") # 안녕, 준성!
print(f"내년: {2026 + 1}년") # 내년: 2027년
print(f"3 곱하기 5 = {3*5}") # 3 곱하기 5 = 15
옛날 파이썬에는 "%s 님" % name 이나 "{}님".format(name) 같은 방법도 있었는데, f-string(3.6+) 이 나온 뒤로는 거의 모두 f-string 만 씁니다. 짧고 읽기 쉬워서요. 옛 코드를 봐야 할 때만 두 방법도 알아두면 됩니다.
셋째 줄 — 내장 함수 len 으로 글자 수 세기
print(f"이름 글자 수: {len(name)}"). 새로 등장한 게 len(...) 인데, 이건 내장 함수(built-in) 중 하나입니다. 별도 설치·import 없이 그냥 부르면 동작해요. 파이썬은 70여 개의 내장 함수를 기본 제공합니다 — print·input·len·range·sum·max·min·int·str·list 같은 것들. 이들이 입문 2주를 책임집니다.
len 은 "길이" 의 length. 문자열을 넣으면 글자 수, 리스트를 넣으면 항목 수, 딕셔너리를 넣으면 키 개수를 돌려줍니다.
len("Hello") # 5
len("안녕하세요") # 5 (한 글자 1로 계산)
len([1, 2, 3, 4]) # 4 (리스트 항목 수)
len("") # 0 (빈 문자열)
f-string 의 { } 안에는 변수뿐 아니라 식·함수 호출 결과도 들어갈 수 있다는 게 셋째 줄의 진짜 포인트. {len(name)} 처럼 함수 호출을 통째로 박을 수 있어 보조 변수를 매번 만들 필요가 없어요.
초보가 자주 빠지는 함정 4가지
| 함정 | 증상 | 원인·해결 |
|---|---|---|
| 들여쓰기 | IndentationError | 탭과 스페이스 섞임 또는 함수 안에서 어긋남. VS Code 에서 Ctrl+Shift+P → "Convert Indentation to Spaces" |
| 따옴표 짝 | SyntaxError | "안녕' 처럼 큰따옴표·작은따옴표 섞임. 한 문자열 안에서는 같은 종류로 통일 |
| 괄호 누락 | SyntaxError 또는 의도와 다른 동작 | print "hi" 가 아니라 print("hi"). 파이썬 2 시절 문법은 안 먹습니다 |
| input 결과 자동 문자열 | TypeError: can only concatenate str | input() 결과는 항상 문자열. 숫자로 쓰려면 int(input()) 또는 float(input()) 로 변환 |
특히 마지막 함정이 입문자 1번 함정입니다. age = input("나이: ") 다음에 age + 1 을 하면 TypeError. "30" + 1 은 안 되거든요. age = int(input("나이: ")) 처럼 변환을 같이 합니다.
NameError: name 'nmae' is not defined)가 적혀 있어요. 99% 의 답은 "에러 메시지를 검색창에 그대로 붙여넣기" 하면 5초 만에 나옵니다.
마무리 — 직접 변형해보기
책으로 읽기만 하면 손이 안 따라옵니다. hello.py 를 복사해 hello2.py 로 만들고, 직접 변형해보세요. 세 가지 미션:
- "이름" 말고 "좋아하는 음식" 을 묻고, 글자 수 대신 "{음식}을 좋아하시는군요!" 출력
- 이름과 나이를 둘 다 입력받아 "{name}님은 {age}살, 내년엔 {age+1}살" 출력 (힌트:
int()필요) - 이름 글자 수가 3 이상이면 "이름이 깁니다" 출력 (힌트: if 문은 3편에서, 일단 시도해보고 막혀도 OK)
막혔다면 에러 메시지를 그대로 메모해두세요. 3편 시작에서 풀이도 같이 다룹니다.
다음 편 미리보기
3편 — "파이썬 변수와 자료형": 문자열·정수·실수·불리언이 무엇이 다른지, type() 으로 어떻게 확인하는지, 변환은 어떻게 하는지.
← 1편 "파이썬이란 무엇인가" · 다음: 3편 "파이썬 변수와 자료형"