input()
python에서 사용자로부터 입력을 받고자 할 때는 input()을 사용합니다.
anything = input("아무거나 입력하시오\n")
print(anything)
여러 개의 숫자를 입력받아 더한 결과를 출력해 주는 프로그램을 만들어 보겠습니다.
a, b, c = input("").split()
print(a + b + c)
split()
split() 함수는 문자열을 구분자 기준으로 쪼개줍니다. 기본값은 공백이며 split(',') 와 같이 구분자를 넣어줄 수도 있습니다.
위의 코드에서는 a, b, c 세 변수에 입력받은 문자열 전체를 공백을 기준으로 나눠서 넣어줍니다. 이렇게 입력받은 세 숫자를 더한 결과는 다음과 같습니다.
뭔가 이상하죠?
input()은 입력한 값을 문자열로 반환하기 때문에 숫자로 활용하려는 경우 형 변환을 해주어야 합니다.
문자열을 int로 형 변환하는 것은 매우 간단합니다. int() 함수로 감싸주면 끝입니다.
print(int(a) + int(b) + int(c))
원하던 결과가 나온 것을 확인할 수 있습니다.
그런데, 만약 입력받을 숫자가 100개라면? 1000개라면? 일일이 int()로 감싸주는 것은 매우 힘들고 비효율적이겠죠?
num = int(input("숫자를 입력하시오\n"))
하나만 입력받을 때는 위와 같이 input을 int()로 감싸면 됩니다.
이걸 반복문으로 돌리면 여러 번 입력을 받을 수는 있습니다.
nlist = list(0 for i in range(5))
nsum = 0
for i in range(5):
nlist[i] = int(input())
for n in nlist:
nsum += n
print(nsum)
그럼 앞서 본 것처럼 한 번에 입력받은 문자열을 split()한 다음 int로 바꾸려면 어떻게 해야 할까요?
map()
이럴 때는 map()을 사용하면 됩니다.
map()은 첫 번째 인자로 받은 함수를 두 번째 인자로 받은 데이터(iterable)에 적용시킨 다음, 그 결과를 map 객체로 반환합니다.
iterable, 반복 가능하다는 것은 해당 객체의 요소를 하나씩 꺼낼 수 있다는 의미입니다. 대표적인 예로 list를 들 수 있습니다.
우리가 위에서 input().split()을 하면 그 결과는 문자열 리스트가 됩니다.
즉 1 2 3을 입력했을 때 input().split()는 ["1", "2", "3"] 을 반환합니다.
이 ["1", "2", "3"] 은 iterable한 list 이므로,
map(int, input().split())
이렇게 map 함수에 int()와 input().split()을 차례로 넣어주면
문자열 리스트 안에 있는 요소들에 int() 함수를 적용하여 숫자로 바꾼 결과를 map 객체로 반환합니다.
이것을 다시 list로 형 변환해주면 입력받은 문자열을 숫자로 변환한 리스트를 얻을 수 있습니다.
result = list(map(int, input().split()))
print(result)
replace()
한편, 문자열 치환 함수인 replace()를 통해 재밌는 결과를 얻을 수 있습니다.
input().replace(' ', '+')
이렇게 하면 입력받은 문자열 1 2 3 에서 공백을 +연산자로 바꿔줄 수 있습니다.
입력받은 숫자를 변수에 담지 않고 바로 계산할 수 있는 '식'으로 변환하는 겁니다.
이 식은 eval()함수로 연산할 수 있습니다.
print(eval(input().replace(' ', '+')))
이렇게 하면 단 한 문장으로 입력받은 숫자들을 모두 더한 결과를 바로 출력할 수 있습니다.
'Python & Data' 카테고리의 다른 글
Python 여러 개의 변수를 한꺼번에 선언, 초기화, 할당하기 feat.swap (0) | 2023.06.01 |
---|---|
Python string을 char로 바꾸는 법 feat. 대소문자 변환 (0) | 2023.05.31 |
Django 시작하기 (0) | 2021.06.16 |
python 매개변수의 기본값 (0) | 2021.06.07 |
Python Decorator (0) | 2021.05.24 |
댓글