본문 바로가기
Python & Django

python에서 숫자를 입력받는 방법

by softserve 2023. 4. 11.
반응형

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(' ', '+')))

이렇게 하면 단 한 문장으로 입력받은 숫자들을 모두 더한 결과를 바로 출력할 수 있습니다.

반응형

댓글