Application/Python

[Python] 파이썬 input 함수, 사용자 입력 받는 법 완벽 정리

devsalix 2026. 4. 17. 08:29
728x90

파이썬 input 함수, 사용자 입력 받는 법 완벽 정리

지난 글에서 숫자, 문자열, 불리언 같은 자료형을 쭉 살펴봤잖아요. 이제 데이터를 다룰 줄은 아는데, 한 가지 아쉬운 게 있어요. 코드 안에서 값을 미리 정해놓고 쓰는 것 말고, 사용자가 직접 입력한 값을 받아서 처리하고 싶을 때가 있거든요.

예를 들어 이름을 물어보고 "OO님 반가워요!" 이렇게 인사해주는 프로그램, 만들어보고 싶지 않으세요?

이걸 가능하게 해주는 게 오늘 다룰 input() 함수예요.


파이썬 input 함수가 도대체 뭔가요?

맥도날드 키오스크 한번 떠올려 보세요. 화면에 "메뉴를 선택해주세요"라는 문구가 뜨고, 내가 터치할 때까지 가만히 기다리잖아요. 내가 뭘 누르면 그때서야 다음 화면으로 넘어가고요.

input()이 딱 이런 일을 해요.

한 줄로 말하면 "사용자가 키보드로 뭔가 입력할 때까지 프로그램을 멈추고 기다리는 함수" 예요. 엔터키를 치는 순간 입력한 내용을 가져옵니다.

name = input()  # 사용자가 뭔가 입력하고 엔터 치면 name에 저장됨
print(name)     # 받은 값을 출력

 

이 코드를 실행하면 화면이 멈춘 것처럼 보여요. 버그 아니에요. 사용자 입력을 기다리는 중이거든요. 뭐든 쳐보고 엔터를 눌러보세요. 그제야 print가 실행됩니다.


python 입력 기본 사용법

사실 위 코드처럼 쓰면 사용자 입장에선 "어? 뭘 입력하라는 거지?" 싶어요. 화면에 커서만 깜빡이니까요.

그래서 보통은 괄호 안에 안내 메시지(프롬프트) 를 넣어줘요.

# 괄호 안의 문자열이 화면에 먼저 표시됨
name = input("이름이 뭐예요? ")
print(f"반가워요, {name}님!")

 

실행하면 이런 식으로 진행돼요.

이름이 뭐예요? 민수
반가워요, 민수님!

 

프롬프트 문구 뒤에 칸을 한 칸 띄워주는 게 관례예요. 그래야 사용자가 입력할 때 글자가 안내 문구에 딱 붙지 않고 보기 좋거든요.


input 함수로 받은 값은 왜 문자열로 나올까요?

자, 여기서부터가 진짜 중요해요. 저도 처음 input을 배웠을 때 이 부분에서 엄청 헤맸거든요.

결론부터 말하면 이거예요.

input()으로 받은 값은 무조건 문자열(str)이에요.

숫자를 입력해도 문자열이에요. "25"라고 입력해도 파이썬은 그걸 숫자 25가 아니라, 글자 '2'와 '5'가 붙어 있는 문자열로 봐요.

비유를 하나 들어볼게요. 택배 상자에 매직으로 "25"라고 써놓은 것과, 상자 안에 진짜 숫자 25가 담긴 건 다르잖아요. input()이 받아오는 건 전자에 가까워요. 겉에 숫자처럼 보이는 글자가 쓰여 있을 뿐이지, 안에 계산 가능한 숫자가 든 건 아니거든요.

확인해볼까요?

age = input("나이가 몇이에요? ")  # 25 입력
print(type(age))  # 자료형 확인
나이가 몇이에요? 25
<class 'str'>

 

보세요. 25라고 숫자를 입력했는데도 str, 즉 문자열로 나오죠.

그럼 이게 왜 문제가 될까요? 한번 더해보면 알아요.

age = input("나이: ")  # 25 입력
print(age + 1)         # 1살 더하려고 시도
TypeError: can only concatenate str (not "int") to str

 

에러가 뿜어져 나와요. 문자열에는 문자열만 이어 붙일 수 있다는 뜻이에요. 숫자 1을 더하려고 하니까 파이썬이 "어... 이건 글자인데요?" 하고 거부하는 거죠.


input과 형변환: int, float 같이 쓰기

그럼 해결책이 뭐냐. 받은 문자열을 숫자로 바꿔서 쓰면 돼요.

숫자로 바꿔서 계산하기

지난 글에 나왔던 int()float() 기억하시죠? 이걸 input() 바깥에 씌우면 됩니다.

# int()로 감싸서 정수로 변환
age = int(input("나이가 몇이에요? "))
next_year = age + 1
print(f"내년엔 {next_year}살이 되시네요!")
나이가 몇이에요? 25
내년엔 26살이 되시네요!

 

코드가 약간 복잡해 보여도 동작은 단순해요. 안쪽부터 바깥쪽으로 실행된다고 생각하시면 돼요.

  1. 먼저 input("나이가 몇이에요? ")가 실행돼서 "25"라는 문자열을 받아요
  2. 그 다음 바깥의 int(...)가 그 문자열을 숫자 25로 바꿔줘요
  3. 최종적으로 age에는 진짜 숫자 25가 들어가요

소수점이 있는 값을 받고 싶으면 float()을 쓰세요.

# 실수(소수점 있는 숫자)로 받기
height = float(input("키가 몇이에요? (cm) "))
print(f"키가 {height}cm이시군요.")

 

두 수를 입력받아서 더하는 것도 해볼까요?

# 첫 번째 숫자 받기
a = int(input("첫 번째 숫자: "))
# 두 번째 숫자 받기
b = int(input("두 번째 숫자: "))
# 두 수의 합 출력
print(f"두 숫자의 합은 {a + b}예요.")
첫 번째 숫자: 10
두 번째 숫자: 20
두 숫자의 합은 30예요.

 

간단한 계산기가 하나 만들어졌네요.


자주 만나는 에러들

input을 쓰다 보면 꼭 한두 번은 만나게 되는 에러들이 있어요. 저도 처음엔 이 에러 뜨면 많이 당황했거든요. 미리 알아두시면 덜 놀라요.

TypeError가 뜰 때

아까 본 것처럼 문자열에 숫자를 더하려고 하면 이 에러가 나요.

age = input("나이: ")
print(age + 1)  # TypeError 발생

 

해결은 간단해요. int(age) + 1로 바꿔주면 됩니다.

ValueError가 뜰 때

int()로 바꾸려는데 내용이 숫자가 아니면 이 에러가 나요.

age = int(input("나이: "))  # "스물다섯"이라고 한글로 입력
# ValueError: invalid literal for int() with base 10: '스물다섯'

 

int()는 "25" 같은 숫자 모양의 문자열만 숫자로 바꿀 수 있거든요. 한글이나 영문은 못 바꿔요.

소수점이 들어간 문자열도 int()로는 못 바꿔요.

num = int(input("숫자: "))  # "3.14" 입력
# ValueError 발생

 

이런 경우엔 float()을 쓰셔야 해요.


직접 해보기

글만 읽고 넘어가면 금방 까먹어요. 파이썬을 켜서 직접 쳐보세요.

과제 1: 이름과 좋아하는 색을 각각 입력받아서 "OO님은 XX색을 좋아하시는군요"라고 출력해보세요.

과제 2: 태어난 연도를 입력받아서 10년 뒤가 몇 년인지 계산해서 출력해보세요. (힌트: 형변환 필요해요!)

막히시면 댓글로 남겨주세요. 같이 풀어봅시다.

 

이제 사용자한테 뭔가를 물어보고 답을 받을 수 있게 됐어요. 근데 받은 값에 따라서 프로그램이 다르게 반응하게 하려면 어떻게 해야 할까요? 예를 들어 나이가 19살 이상이면 "성인이시네요", 아니면 "미성년자네요" 이런 식으로요.

그걸 해주는 게 바로 다음 글에서 다룰 조건문(if/elif/else) 이에요. 오늘 배운 input이랑 합치면 꽤 그럴듯한 프로그램을 만들 수 있게 됩니다.


 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90