HOWTO · Python
파이썬에서 사용자 입력을 정수로 읽는 방법
Python 3에서 사용자 입력을 정수로 읽는 방법: int(input())으로 단일 값을 변환하고, split()과 map()으로 한 줄에서 여러 정수를 읽으며, try-except로 잘못된 입력을 처리합니다.
이 페이지의 내용
Python 3에서 input() 함수는 항상 문자열을 반환합니다. 입력된 값을 숫자로 다루려면 그 문자열을 int()로 변환해야 합니다. 이 글에서는 정수 하나를 읽는 방법, 유효한 정수가 아닌 입력을 처리하는 방법, 그리고 한 줄에서 여러 정수를 읽는 방법을 설명합니다.
이 글은 Python 3을 다룹니다. Python 2는 같은 작업에 raw_input()을 사용했으며 2020년에 지원이 종료되었으므로, 아래 예제에서는 내내 input()을 사용합니다.
int(input())으로 정수 하나 읽기
먼저 입력을 문자열로 읽은 다음 변환합니다.
user_input = input("Please enter an integer: ")
integer_value = int(user_input)
print("You entered:", integer_value)
print(type(integer_value))
Output:
Please enter an integer: 42
You entered: 42
<class 'int'>
변환과 읽기를 한 줄로 합치는 경우도 많으며, 동작은 완전히 같습니다.
integer_value = int(input("Please enter an integer: "))
사용자가 hello나 3.5처럼 정수가 아닌 값을 입력하면 int()는 ValueError를 발생시키고 프로그램이 중단됩니다. 다음 섹션에서 그 경우를 처리하는 방법을 설명합니다.
try-except로 잘못된 입력 처리하기
변환을 try-except 블록으로 감싸면 ValueError를 잡아 프로그램이 충돌하는 대신 다시 묻도록 할 수 있습니다.
while True:
user_input = input("Please enter an integer: ")
try:
integer_value = int(user_input)
print("You entered:", integer_value)
break
except ValueError:
print("That's not a valid integer. Please try again.")
변환이 성공할 때까지 루프가 계속 프롬프트를 표시합니다. 변환이 성공한 뒤에야 break가 루프를 종료합니다.
Output:
Please enter an integer: hello
That's not a valid integer. Please try again.
Please enter an integer: 10
You entered: 10
이런 방식으로 입력을 검증하는 것은 대화형 프로그램의 모범 사례입니다. 오타 하나로 전체 실행이 날아가는 것이 아니라 프롬프트 한 번이면 충분해야 합니다.
한 줄에서 여러 정수 읽기
프로그램이 한 번에 여러 숫자를 필요로 할 때는 사용자에게 공백으로 구분하여 한 줄에 입력하게 합니다. split()은 줄을 문자열 조각들로 나누고, map()은 각 조각을 int()로 변환합니다.
numbers = list(map(int, input("Enter numbers separated by spaces: ").split()))
print(numbers)
print("Sum:", sum(numbers))
Output:
Enter numbers separated by spaces: 4 8 15 16 23 42
[4, 8, 15, 16, 23, 42]
Sum: 108
리스트 컴프리헨션도 같은 일을 하며, 그에 못지않게 흔히 쓰입니다.
numbers = [int(piece) for piece in input("Enter numbers separated by spaces: ").split()]
필요한 값의 개수가 고정되어 있다면 결과를 바로 언패킹합니다. 아래에서는 사용자가 정확히 두 개의 정수를 입력해야 합니다.
a, b = map(int, input("Enter two numbers: ").split())
print("a =", a)
print("b =", b)
Output:
Enter two numbers: 3 17
a = 3
b = 17
예상보다 많거나 적은 값을 입력하면 ValueError가 발생하므로, 개수가 중요할 때는 이 패턴을 이전 섹션의 try-except 루프와 함께 사용하십시오.
int()가 받아들이는 것과 거부하는 것
int()는 많은 사람이 생각하는 것보다 관대합니다. 앞뒤 공백을 무시하고, 선택적인 + 또는 - 부호를 허용하며, 숫자 사이에 밑줄을 넣을 수 있습니다.
print(int(" 42 "))
print(int("+7"))
print(int("1_000"))
Output:
42
7
1000
반면 문자열 형태의 정수 리터럴이 아닌 것은 모두 거부합니다. "3.5", "12a", 빈 문자열 ""가 여기에 해당하며, 모두 ValueError를 발생시킵니다. 입력에 소수 값이 포함될 수 있다면 대신 float()로 변환하거나, 소수 부분을 버려도 괜찮을 때 int(float(text))를 사용하십시오.
결론
Python 3에서 정수를 읽는 것은 하나의 패턴으로 귀결됩니다. input()은 문자열을 주고, int()가 그것을 정수로 바꿉니다. 잘못된 입력이 프로그램을 중단시키는 대신 다시 묻도록 try-except 루프를 사용하고, 한 줄에서 여러 정수가 필요할 때는 split()과 함께 map()이나 리스트 컴프리헨션을 활용하십시오.
FAQ
-
Python 3에서 사용자 입력을 정수로 읽으려면 어떻게 해야 하나요?
int(input())을 사용합니다.input()은 한 줄을 문자열로 읽고,int()가 그것을 정수로 변환합니다. -
한 줄에서 여러 정수를 읽으려면 어떻게 해야 하나요?
줄을 나눈 뒤 각 조각을 변환합니다. 예를 들어list(map(int, input().split()))또는[int(x) for x in input().split()]처럼 합니다. -
사용자가 정수가 아닌 값을 입력하면 어떻게 되나요?
int()가ValueError를 발생시킵니다.try-except블록으로 잡아서 다시 입력받으십시오. -
input()의 결과로 바로 산술 연산을 할 수 없는 이유는 무엇인가요?
input()은 숫자가 아니라 문자열을 반환하기 때문입니다. 문자열에int()로 변환하기 전까지는 문자열과 정수를 더하면TypeError가 발생합니다. -
입력을 읽을 때 Python 2와 Python 3의 차이점은 무엇인가요?
Python 2는 텍스트 입력에raw_input()을 사용했고, Python 3는input()을 사용합니다.int()변환은 두 버전에서 동일하게 동작하지만, Python 2는 더 이상 유지 관리되지 않으므로 새 코드는 Python 3를 사용해야 합니다.