Python / input() / 사용자가 입력한 값을 변수에 저장하는 함수

Python의 input()은 표준 입력에서 한 줄을 읽어 문자열로 반환합니다. name = input()처럼 대입하면 그 문자열을 변수로 사용할 수 있으며, 숫자를 입력해도 계산하려면 int()나 float()로 변환해야 합니다. 마지막 줄바꿈은 제거하지만 입력 내용의 앞뒤 공백까지 자동으로 지우지는 않습니다.

한 줄을 입력받아 변수로 사용하기

아래 예제는 Python 3와 표준 기능만 사용하며, Python 3.12.14에서 표준 입력을 제공해 결과를 확인했습니다. UTF-8로 input_demo.py에 저장한 뒤 터미널에서 python input_demo.py로 실행합니다. 환경에 따라 실행기는 python3일 수 있습니다. 각 예제는 파일 내용을 교체해 독립적으로 실행합니다.

실행 후 JB를 입력하고 Enter를 누릅니다. 예제에는 입력 안내를 넣지 않았으므로, 처음에는 아무 출력 없이 입력을 기다리는 것이 정상입니다.

name = input()
print(f"Hello, {name}!")
print(type(name).__name__)

프로그램의 출력은 다음과 같습니다. 이후 결과 블록도 사용자가 친 글자의 터미널 표시를 제외하고 프로그램이 출력한 내용만 보여 줍니다.

Hello, JB!
str

input() 공식 문서의 선택 인수 prompt를 쓰면 input("Name: ")처럼 입력 전에 안내를 표시할 수 있습니다. 이 안내 자체는 반환값에 포함되지 않습니다. input()은 키보드 전용 함수라기보다 표준 입력을 읽는 함수이므로, 파일이나 다른 프로그램이 전달한 입력도 읽을 수 있습니다.

숫자 문자열을 정수·실수로 변환하기

다음 코드 실행 후 첫 줄에 0012, 둘째 줄에 1.25를 입력합니다. input() 호출 두 번은 각각 한 줄을 읽으므로 같은 줄에 한꺼번에 입력하지 않습니다.

text = input()
print(repr(text))
print(text + "1")
number = int(text)
print(number + 1)
price = float(input())
print(price * 2)
'0012'
00121
13
2.5

repr()은 따옴표를 포함한 표현으로 문자열임을 드러냅니다. 문자열 "0012"에 "1"을 더하면 연결되어 00121이 되고, 정수로 변환한 뒤 1을 더하면 13이 됩니다. 정수 변환 후에는 앞자리 0이 유지되지 않으므로 우편번호·상품 코드처럼 자릿수가 의미 있는 값은 문자열로 보관합니다.

int("1.25")나 int("hello")는 ValueError를 발생시킵니다. 소수 입력은 목적에 맞게 float로 변환하며 이 예제는 소수점으로 점을 사용합니다. 통화 기호나 쉼표가 포함된 값을 알아서 정리하지는 않습니다. float는 이진 부동소수점이므로 정확한 십진 금액 계산을 위한 자료형 선택은 별도로 검토합니다.

잘못된 입력을 다시 받는 전체 예제

변환 가능 여부와 값의 허용 범위는 별개입니다. 다음은 음수가 아닌 나이를 받는 예제입니다. hello, -1, 20을 한 줄씩 차례로 입력하면 재시도와 성공을 확인할 수 있습니다.

while True:
    try:
        text = input()
    except EOFError:
        print("Input ended.")
        break
    try:
        age = int(text)
    except ValueError:
        print("Enter a whole number.")
        continue
    if age < 0:
        print("Enter 0 or greater.")
        continue
    print(f"Accepted: {age}")
    break
Enter a whole number.
Enter 0 or greater.
Accepted: 20

ValueError는 정수로 변환할 수 없는 문자열을 처리하고, 별도의 age < 0 조건은 변환에 성공한 음수를 거릅니다. 빈 줄도 정수로 변환되지 않아 다시 입력받습니다. 성공하면 break로 반복을 끝냅니다. 예외 처리 안내처럼 예상한 오류를 좁게 처리하고, 입력 종료인 EOF는 다시 묻지 않고 반복을 종료합니다.

공백과 빈 입력을 구분하기

첫 줄에는 공백 두 개, JB, 공백 두 개를 입력하고, 둘째 줄에는 아무 글자 없이 Enter만 누릅니다.

text = input()
print(repr(text))
print(repr(text.strip()))
empty = input()
print(repr(empty))
print(empty == "")
'  JB  '
'JB'
''
True

input()은 줄바꿈만 제거하므로 첫 문자열의 양쪽 공백이 남습니다. str.strip()은 양쪽 공백을 제거한 새 문자열을 반환하며 원래 문자열을 수정하지 않습니다. 사용자가 입력한 내용의 공백이 중요한 경우에는 무조건 적용하지 않습니다. 빈 줄은 빈 문자열 ""이며 None이 아닙니다. 공백만 입력한 줄까지 비어 있다고 취급하려면 strip 적용 후 판단할지 정책을 정합니다.

한 줄에서 두 값을 읽기

한 번의 input()으로 두 정수를 받으려면 문자열을 나누고 각각 변환합니다. 다음 예제에 10 20을 한 줄로 입력합니다.

parts = input().split()
if len(parts) != 2:
    print("Enter exactly two integers.")
else:
    try:
        left, right = map(int, parts)
    except ValueError:
        print("Use whole numbers.")
    else:
        print(left + right)
30

구분자 없는 split()은 연속된 공백을 하나의 구분으로 취급합니다. 항목 수가 정확히 두 개인지 먼저 확인한 뒤 map으로 각 항목을 int에 전달합니다. 10만 입력하거나 세 값을 입력하면 개수 안내가 나오고, 10 hello는 정수 안내가 나옵니다. 이 간단한 예제는 잘못된 입력 후 종료하며, 반복해서 받으려면 앞 예제처럼 반복문을 구성합니다.

EOFError와 입력이 안 되는 환경 확인

EOF(End of File)는 입력 스트림의 끝입니다. 빈 줄과 달리 더 읽을 데이터가 없는 상태에서 input()을 호출하면 EOFError가 발생합니다. 아래 코드는 입력을 두 번 시도합니다. 입력 스트림에 줄바꿈 하나만 제공한 경우의 출력은 다음과 같습니다.

for index in range(2):
    try:
        text = input()
    except EOFError:
        print("EOF")
        break
    print(repr(text))
''
EOF

첫 호출은 빈 문자열을 읽고 둘째 호출은 EOF를 만납니다. 터미널에서 재현하려면 첫 번째는 Enter만 누르고 다음 입력에서 입력 종료를 보냅니다. 일반적으로 Windows 콘솔은 Ctrl+Z 후 Enter, macOS·Linux 터미널은 빈 입력 줄에서 Ctrl+D를 사용하지만 터미널·IDE가 키를 처리하는 방식에 따라 달라질 수 있습니다.

IDE의 실행 결과 창이 입력을 지원하지 않으면 터미널 또는 표준 입력을 지원하는 실행 콘솔에서 실행합니다. 온라인 채점이나 파일 입력에서는 필요한 줄 수가 실제로 제공되는지도 확인합니다. 입력이 없어 기다리는 상태와 EOF로 종료된 상태를 구분해야 하며, 사용자 문자열을 숫자로 바꾸기 위해 eval()로 실행할 필요는 없습니다.