지난 글에서 사용자에게 자료를 입력 받는 input 명령어에 대해 살펴보았습니다. 이번 글에서는 split 명령어와 map 명령어를 사용하여 동시에 여러 값을 입력 받아 처리하는 방법을 알아보겠습니다.
여러 값을 입력 받기
복잡한 프로그래밍을 하다보면 한 번에 여러 값을 입력 받아야 할 때가 있습니다. 그러나 기본 입력 명령어인 input 명령어만 사용한다면 여러 줄의 코드가 필요하거나 사용자 경험이 떨어지는 코드를 작성하게 될 수도 있습니다. 여러 값을 동시에 입력 받을 수 있는 명령어가 필요한데, split 명령어와 map 명령어가 있습니다.
split 명령어 활용하기
split 명령어는 문자열을 특정 기준(기본은 공백)으로 분리해 리스트로 반환합니다. 이를 통해 사용자는 한 줄에 여러 값을 입력할 수 있게 됩니다. 기본적인 문법은 아래와 같습니다.
변수1, 변수2 = input().split()
다음과 같은 코드를 작성해 보겠습니다.
num1, num2 = input("두 숫자를 공백으로 구분하여 입력하세요: ").split()
print(f"첫 번째 숫자: {num1}, 두 번째 숫자: {num2}")
split 함수를 사용한 결과 공백으로 구분된 두 개의 숫자가 각각의 변수에 대응되는 것을 알 수 있습니다. 출력 결과의 예는 아래와 같습니다.
두 숫자를 공백으로 구분하여 입력하세요: 5 3
첫 번째 숫자: 5, 두 번째 숫자: 3
문제점
그런데, input 명령어와 마찬가지로, split 명령어로 분리한 값은 기본적으로 문자열 자료형으로 처리됩니다. 숫자 연산을 위해서는 형변환이 필요합니다.
split 명령어와 정수형 변환
입력된 값을 정수형으로 변환하기 위해 int 명령어를 사용합니다. 그러나 input 명령어만 사용할 때와 달리 단순히 int(input().split()) 이와 같은 형태로 사용할 경우 에러가 발생합니다. 그 이유는 split 명령어의 반환값이 리스트 자료형이기 때문에 그렇습니다. int 명령어는 리스트 전체를 변환할 수 없기 때문에 오류가 발생합니다.
map 명령어를 활용한 정수형 변환
map 명령어는 리스트와 같은 반복 가능한 객체의 각 요소에 지정된 함수를 적용하는 함수입니다. 말이 다소 어렵지만, 리스트 자료형이라고 하더라도 정수형으로 변환할 수 있다는 의미입니다. map 명령어를 사용하면 split 명령어로 입력 받은 여러 개의 값을 정수형으로 변환할 수 있어요. 기본 문법은 아래와 같습니다.
변수1, 변수2 = map(변환함수, 입력값)
다음과 같은 코드로 조금 더 이해해 보겠습니다.
num1, num2 = map(int, input("두 숫자를 공백으로 구분하여 입력하세요: ").split())
print(f"두 숫자의 합: {num1 + num2}")
출력 결과의 예는 아래와 같아요.
두 숫자를 공백으로 구분하여 입력하세요: 5 3
두 숫자의 합: 8
작성된 코드의 작동 원리는 다음과 같습니다.
- 사용자가 입력한 5 3은 split 명령어에 의해 공백으로 구분되어 ['5', '3']의 리스트가 됩니다.
- 이 리스트의 각 요소를 map 명령어가 int 명령어를 반복 활용하여 정수형 자료인 5와 3으로 변환합니다.
- 그리고, 변환된 정수형 자료들이 각 변수에 반복되어 할당됩니다.
복수의 값 입력 받기 예제
여러 개의 숫자를 한 번에 입력 받아 합산하기
numbers = map(int, input("숫자들을 공백으로 구분하여 입력하세요: ").split())
print(f"입력된 숫자의 합: {sum(numbers)}")
2번 줄에 사용된 sum이라는 함수는 자료를 합산하는 함수입니다. 리스트나 튜플, map 함수의 결과로 생성되는 반복가능한 객체도 처리할 수 있어요. 1번 줄의 결과 사용자가 입력한 값이 정수형 자료의 map 객체를 만듭니다. sum함수에서 이 값을 모두 더해 합산 결과를 돌려주는 것입니다. 출력 결과의 예는 아래와 같습니다.
숫자들을 공백으로 구분하여 입력하세요: 10 20 30
입력된 숫자의 합: 60
실수형 값 입력 받기
map 명령어를 활용하여 정수형 뿐만 아니라 실수형 자료도 입력 받을 수 있습니다.
num1, num2 = map(float, input("두 실수를 공백으로 구분하여 입력하세요: ").split())
print(f"두 숫자의 곱: {num1 * num2}")
출력 결과의 예는 아래와 같습니다.
두 실수를 공백으로 구분하여 입력하세요: 3.5 2.1
두 숫자의 곱: 7.35
응용 프로그램 - 평균 계산기 만들기
사용자가 입력한 숫자들의 평균을 계산하는 프로그램을 작성해 보겠습니다. 평균의 결괏값은 소수점 이하의 값을 포함하는 경우가 많기 때문에, 실수형 변환을 하는 것이 좋습니다. 또한, 자료의 평균을 내기 위해서는 자료의 수를 세야 하는데, len 함수를 이용해 리스트의 자료의 수를 세는 것이 간단합니다. 다만, map 함수의 실행 결과로 리스트가 만들어지는 것은 아니기 때문에 리스트 자료형으로 형변환을 해 주는 list 함수를 사용할 것입니다. 다음과 같은 코드를 작성해 보세요.
numbers = list(map(float, input("숫자들을 공백으로 구분하여 입력하세요: ").split()))
average = sum(numbers) / len(numbers)
print(f"입력된 숫자의 평균: {average}")
출력된 결과의 예는 아래와 같습니다.
숫자들을 공백으로 구분하여 입력하세요: 10 20 30
입력된 숫자의 평균: 20.0
마치며
이번 포스팅에서는 split 명령어와 map 명령어의 활용에 대해 살펴보았습니다. 두 명령어의 독특한 특성 때문에 sum 함수나 list 함수 등에 대해서도 다뤄 보았는데, 직접 코드를 작성해 보며 다양한 명령어의 활용방법에 익숙해 지면 좋을 것 같습니다.