지난 장에서는 값, 변수, 자료형을 배웠습니다. 이제 재료는 준비됐습니다. 그런데 재료만 있고 손님이 없다면 조금 심심하겠지요. 이번 장에서는 프로그램이 사람의 말을 듣고, 다시 대답하게 만들어 봅니다.
파이썬을 처음 배울 때 정말 재미가 붙는 순간이 있습니다. 내가 코드를 실행했더니 화면에 무언가가 나오고, 내가 이름이나 숫자를 입력하자 프로그램이 바로 반응하는 순간입니다. 그때부터 코드는 단순한 글자가 아니라, 나와 대화하는 작은 기계처럼 느껴집니다.
이번 장의 주인공은 아주 유명한 두 함수입니다. 바로 print()와 input()입니다. 이름도 귀엽고, 하는 일도 분명합니다. print()는 보여 주고, input()은 받아 옵니다.12
출력부터 시작하자: print()는 프로그램의 목소리다
print()는 화면에 내용을 보여 주는 함수입니다. 파이썬이 사용자에게 말을 걸 때 가장 자주 쓰는 방법이라고 생각하면 쉽습니다.23
print("안녕하세요!")
print("파이썬과 대화해 봅시다.")실행하면 이렇게 보입니다.
안녕하세요!
파이썬과 대화해 봅시다.print() 안에는 문자열만 넣는 것이 아닙니다. 숫자, 변수, 계산 결과도 넣을 수 있습니다.
print(10)
print(3.14)
print(10 + 20)변수와 함께 써도 잘 작동합니다.
name = "민지"
age = 14
print(name)
print(age)여기서 중요한 점 하나가 있습니다. 파이썬 파일에서 계산만 해 두고 print()를 쓰지 않으면, 우리가 기대한 결과가 화면에 보이지 않을 수 있습니다. 그래서 사용자에게 무언가 보여 주고 싶다면 print()를 직접 써 주는 습관이 중요합니다.2
print()는 여러 개를 한 번에 말할 수 있다
print()는 쉼표로 여러 값을 나란히 넣을 수 있습니다.
name = "지우"
age = 13
print("이름:", name)
print("나이:", age)결과는 이렇게 나옵니다.
이름: 지우
나이: 13파이썬은 여러 값을 출력할 때 기본적으로 사이에 공백 한 칸을 넣어 줍니다.24
print("안녕", "파이썬", "세상")결과:
안녕 파이썬 세상이 자동 공백은 꽤 친절합니다. 초보자 입장에서는 문자열을 일일이 이어 붙이지 않아도 되니까요.
출력 모양을 조금 바꿔 보자: sep와 end
print()는 기본값도 좋지만, 조금 꾸밀 수도 있습니다. 이때 자주 쓰는 것이 sep와 end입니다.34
먼저 sep는 여러 값을 출력할 때 그 사이를 무엇으로 구분할지 정합니다.
print("2026", "03", "30", sep="-")결과:
2026-03-30이번에는 end를 봅시다. 보통 print()는 출력이 끝나면 줄을 바꿉니다. 그래서 다음 print()는 다음 줄에 나옵니다. 그런데 end를 바꾸면 줄을 바꾸지 않게 만들 수 있습니다.
print("안녕", end=" ")
print("반가워")결과:
안녕 반가워이 기능은 간단하지만 꽤 쓸모가 많습니다. 예를 들어 진행 상황을 한 줄에 이어서 보여 주거나, 문장을 부드럽게 이어 출력할 때 편합니다.
사람이 입력하면 프로그램이 기다린다: input()
이제 프로그램이 말만 하지 말고, 사용자의 말을 들어 보게 합시다. 그때 쓰는 함수가 input()입니다.23
input()이 코드를 실행하면 프로그램은 잠시 멈춘 것처럼 보입니다. 사실 멈춘 것이 아니라, 사용자가 키보드로 무언가 입력하고 엔터를 누르기를 기다리는 중입니다.25
보통은 이렇게 씁니다.
name = input("이름을 입력하세요: ")
print("안녕하세요,", name)사용자가 하늘이라고 입력하면 결과는 다음과 비슷합니다.
이름을 입력하세요: 하늘
안녕하세요, 하늘괄호 안의 문장은 프롬프트라고 부릅니다. 쉽게 말해 "무엇을 입력하면 되는지 알려 주는 안내문"입니다.35 프롬프트가 없으면 사용자는 갑자기 빈칸만 보고 당황할 수 있습니다. 그래서 초보 단계일수록 input() 안에 친절한 설명을 넣는 습관이 좋습니다.
아주 중요하다: input()의 결과는 항상 문자열이다
이 부분은 이번 장의 핵심 중 핵심입니다. input()은 사용자가 무엇을 입력하든 문자열 str로 받아옵니다.235
num = input("숫자를 입력하세요: ")
print(num)
print(type(num))사용자가 10을 입력해도 결과는 이렇게 됩니다.
10
<class 'str'>겉모습은 숫자 10 같지만, 파이썬 입장에서는 글자 "10"입니다. 그래서 여기서 바로 계산을 하려고 하면 문제가 생길 수 있습니다.
num = input("숫자를 입력하세요: ")
print(num + 100)이 코드는 오류가 납니다. 문자열과 정수는 그냥 더할 수 없기 때문입니다.
처음 배우는 사람은 여기서 "분명 10을 넣었는데 왜 숫자가 아니지?" 하고 놀랍니다. 하지만 이건 아주 정상입니다. input()은 입력을 먼저 글자로 받아 두고, 그다음에 우리가 필요에 따라 바꾸는 방식으로 동작합니다.
숫자로 계산하고 싶다면 형 변환을 하자
사용자에게 숫자를 입력받아 계산하려면 문자열을 숫자로 바꿔야 합니다. 이때 int()나 float()를 사용합니다.23
정수로 바꾸려면 이렇게 씁니다.
age = int(input("나이를 입력하세요: "))
print(age + 1)사용자가 15를 입력하면 결과는 다음과 같습니다.
16실수로 바꾸고 싶다면 float()를 씁니다.
height = float(input("키를 입력하세요(cm): "))
print(height)이렇게 보면 규칙은 아주 단순합니다.
그냥 입력받으면 문자열이다.
정수 계산을 하려면
int()로 바꾼다.소수점이 있는 수를 다루려면
float()로 바꾼다.
여기서 한 가지 더 기억해 두면 좋습니다. 숫자가 아닌 글자를 int()나 float()로 바꾸려 하면 오류가 납니다.5
num = int(input("숫자를 입력하세요: "))이 코드에서 사용자가 열이나 hello를 입력하면 파이썬은 "이건 숫자로 바꿀 수 없어요"라고 말하며 에러를 냅니다. 지금 단계에서는 완벽히 처리하지 못해도 괜찮습니다. 중요한 것은 왜 오류가 나는지 이해하는 것입니다.
입력과 출력을 합치면 프로그램이 살아난다
이제 진짜 재미있는 순간입니다. input()으로 받고, print()로 답하면 프로그램이 대화처럼 보이기 시작합니다.
name = input("이름이 뭐예요? ")
print("반가워요,", name)아주 짧지만 느낌이 확 달라집니다. 누가 실행하느냐에 따라 결과가 달라지니까요.
이런 식으로 질문을 두 개로 늘릴 수도 있습니다.
name = input("이름을 입력하세요: ")
food = input("좋아하는 음식을 입력하세요: ")
print(name, "님은", food, "을(를) 좋아하는군요!")이 코드는 작은 인터뷰처럼 동작합니다. 코드는 그대로인데, 사람에 따라 결과가 달라지는 것. 바로 이것이 상호작용의 재미입니다.
문자열 이어 붙이기보다 더 편한 방법: f문자열
출력할 때 변수와 글자를 섞어 쓰는 일은 아주 많습니다. 그럴 때 초보자에게 가장 편한 방법이 f문자열입니다.1
name = "소연"
age = 16
print(f"안녕하세요, {name}님!")
print(f"내년이면 {age + 1}살이 되겠네요.")중괄호 {} 안에 변수나 간단한 식을 넣으면 그 값이 문자열 안에 자연스럽게 들어갑니다. 읽기도 편하고, 쓰기도 편합니다.
앞에서 배운 코드를 f문자열로 바꾸면 이렇게 됩니다.
name = input("이름을 입력하세요: ")
print(f"반가워요, {name}님!")처음엔 쉼표를 써도 괜찮고, 익숙해지면 f문자열도 적극적으로 써 보세요. 둘 다 자주 쓰이는 좋은 방법입니다.
첫 번째 미니 프로그램: 인사하는 프로그램
이제 정말 책다운 예제를 하나 만들어 봅시다. 가장 유명하고, 가장 기분 좋은 프로그램입니다.
name = input("당신의 이름은 무엇인가요? ")
print(f"안녕하세요, {name}님! 파이썬 세계에 오신 것을 환영합니다.")이 프로그램의 흐름은 아주 간단합니다.
먼저 input()이 이름을 받습니다. 그다음 그 이름을 name 변수에 저장합니다. 마지막으로 print()가 그 이름을 포함한 인사말을 출력합니다.
짧지만 이 안에 이미 중요한 개념이 다 들어 있습니다. 입력, 저장, 출력. 프로그램의 기본 호흡이라고 해도 좋습니다.
두 번째 미니 프로그램: 두 수의 합 구하기
이번에는 사용자에게 숫자 두 개를 받아서 더해 봅시다.
num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
result = num1 + num2
print(f"두 수의 합은 {result}입니다.")이 프로그램이 중요한 이유는 input()만으로는 계산이 안 되고, int()로 바꿔야 한다는 사실을 몸으로 익히게 해 주기 때문입니다.
만약 이렇게 썼다면 어떻게 될까요?
num1 = input("첫 번째 숫자를 입력하세요: ")
num2 = input("두 번째 숫자를 입력하세요: ")
print(num1 + num2)사용자가 10과 20을 입력하면 결과는 30이 아니라 1020이 됩니다. 숫자 계산이 아니라 문자열 이어 붙이기가 일어났기 때문입니다.
이 장에서 가장 많이 만날 실수가 바로 이것입니다. 하지만 걱정할 필요는 없습니다. 거의 모든 초보자가 한 번쯤 꼭 겪습니다. 오히려 이 실수를 겪고 나면 형 변환의 중요성을 오래 기억하게 됩니다.
세 번째 미니 프로그램: 간단한 계산기 느낌 내기
이번에는 조금 더 생활에 가까운 예제를 만들어 보겠습니다.
price = int(input("물건 가격을 입력하세요: "))
count = int(input("개수를 입력하세요: "))
total = price * count
print(f"총 금액은 {total}원입니다.")이제 프로그램이 조금 현실감 있어졌습니다. 숫자를 입력하면 바로 결과가 나오니까요. 공부할 때는 이런 예제가 특히 좋습니다. 왜냐하면 "이걸 왜 배우지?"라는 질문에 직접 답해 주기 때문입니다.
출력은 예쁘게 보여 줄수록 읽기 쉽다
같은 내용도 어떻게 보여 주느냐에 따라 훨씬 읽기 쉬워집니다. 예를 들어 이런 코드를 봅시다.
name = input("이름: ")
age = int(input("나이: "))
print("----- 자기소개 -----")
print("이름:", name)
print("나이:", age)
print("-------------------")조금 꾸며 주기만 해도 훨씬 보기 좋아집니다. 사용자는 프로그램이 정리되어 있다고 느끼고, 작성한 사람도 결과를 확인하기 편해집니다.
숫자를 소수점 자리까지 다루고 싶을 때는 f문자열 안에서 모양을 정리할 수도 있습니다.1
score = 87.456
print(f"평균 점수: {score:.2f}")결과:
평균 점수: 87.46.2f는 소수점 둘째 자리까지 보여 달라는 뜻입니다. 지금은 이런 것도 가능하구나 정도만 익혀 두면 충분합니다. 나중에 점수, 평균, 가격을 출력할 때 아주 자주 만나게 됩니다.
print()와 input()를 쓸 때 자주 하는 실수
초보자가 특히 자주 겪는 실수를 미리 보고 가면 덜 당황합니다.
input()으로 받은 값을 숫자인 줄 알고 바로 계산하는 실수문자열과 숫자를
+로 바로 이어 붙이려는 실수안내 문구 없이
input()만 써서 사용자를 당황하게 만드는 실수print()를 빼먹어서 계산은 했지만 결과를 못 보는 실수int()로 바꿔야 할 값을 깜빡하는 실수
예를 들어 이 코드는 오류가 납니다.
age = input("나이를 입력하세요: ")
print("당신의 나이는 " + age + 1)왜 그럴까요? age는 문자열이고, 1은 숫자이기 때문입니다. 이럴 때는 이렇게 써야 합니다.
age = int(input("나이를 입력하세요: "))
print(f"내년에는 {age + 1}살입니다.")코드를 잘 쓰는 사람은 실수를 안 하는 사람이 아니라, 실수를 보고 이유를 알아차리는 사람입니다.
작은 대화형 프로그램 하나를 끝까지 만들어 보자
이번 장의 내용을 모아 간단한 "학생 정보 확인 프로그램"을 만들어 보겠습니다.
print("학생 정보 확인 프로그램")
print("----------------------")
name = input("이름을 입력하세요: ")
age = int(input("나이를 입력하세요: "))
height = float(input("키를 입력하세요(cm): "))
print()
print("입력한 정보는 다음과 같습니다.")
print(f"이름: {name}")
print(f"나이: {age}세")
print(f"키: {height:.1f}cm")
print(f"내년 나이: {age + 1}세")이 프로그램에는 이번 장의 핵심이 모두 들어 있습니다.
먼저 print()로 제목을 보여 줍니다. 그리고 input()으로 이름, 나이, 키를 받습니다. 나이는 정수로, 키는 실수로 바꿉니다. 마지막에는 다시 보기 좋게 정리해서 출력합니다.
이 정도만 직접 작성할 수 있어도, 여러분은 이미 "입력받고 결과를 보여 주는 프로그램"을 만들 수 있는 상태입니다. 이제 코드는 더 이상 일방통행이 아닙니다.
연습해 보면 훨씬 빨리 익는다
이번 장은 손으로 직접 쳐 볼수록 빨리 익습니다. 아래 같은 연습을 추천합니다.
이름을 입력받아 환영 메시지를 출력하는 프로그램 만들기
두 수를 입력받아 합, 차, 곱을 출력하기
좋아하는 색과 음식을 입력받아 한 줄 소개 문장 만들기
가격과 수량을 입력받아 총액 계산하기
시험 점수를 입력받아 소수점 둘째 자리까지 출력해 보기
연습할 때는 "정답 프로그램"을 만드는 것보다, 입력한 값이 정말 원하는 자료형으로 바뀌었는지 확인하는 습관이 더 중요합니다. 헷갈리면 type()을 잠깐 써 보는 것도 좋은 방법입니다.
score = input("점수를 입력하세요: ")
print(type(score))이렇게 확인하면서 공부하면 실수를 훨씬 빨리 줄일 수 있습니다.
마무리
이번 장에서 우리는 프로그램이 사용자와 대화하는 가장 기본적인 방법을 배웠습니다. print()는 프로그램의 입이고, input()은 프로그램의 귀입니다. 여기에 변수와 형 변환이 더해지면, 프로그램은 사람의 입력에 따라 다른 결과를 보여 줄 수 있게 됩니다.
정리하면 이렇습니다.
print()는 화면에 내용을 출력한다.input()은 사용자의 입력을 받는다.input()의 결과는 항상 문자열이다.숫자 계산을 하려면
int()나float()로 바꿔야 한다.f문자열을 쓰면 출력 문장을 훨씬 읽기 쉽게 만들 수 있다.
sep와end를 이용하면 출력 모양도 조절할 수 있다.
이제 여러분의 코드는 조금 더 살아 있습니다. 사용자가 말을 걸면 대답할 수 있으니까요. 다음 장에서는 한 걸음 더 나아가, 프로그램이 스스로 판단하게 만들어 볼 것입니다. 즉, "입력받은 값에 따라 다른 행동을 하는 법"을 배우게 됩니다. 그때부터 프로그램은 단순한 대화 상대를 넘어, 생각하는 것처럼 보이기 시작합니다.
참고
17. Input and Output — Python 3.14.3 documentation
2Basic Input and Output in Python
3Python Basic Input and Output
41.2 Input/output - Introduction to Python Programming | OpenStax
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.