파이썬 input 함수 | 파이썬 독학 2-4

지난 포스팅에서 파이썬 print 함수의 사용법을 알아봤습니다.

print 함수가 출력을 담당하는 함수라면 입력은 파이썬 input 함수가 담당합니다.

파이썬 input 함수 사용법

1. 파이썬 input 함수로 입력받기

입력과 출력은 무엇인가요?

컴퓨터에서 입력(Input)은 데이타를 넣는 것이고,
출력(Output)은 컴퓨터로부터 데이타가 나오는 것입니다.

입력과 출력을 위해 입출력장치(I/O device)가 있습니다.

대표적인 입력장치는 키보드, 마우스가 있고,
출력장치는 모니터, 프린터 등이 있습니다.

하드디스크의 파일(File)은 입력이 될 수도 있고 출력이 될 수도 있는데요.
이는 입출력은 특정 장치가 아니라 데이터가 흐르는 방향을 의미하기 때문입니다.

한글로는 들어가는게 입력(Input) 나오는게 출력(Output)입니다.
입출력(入出力) 뜻에서 볼 수 있듯이 들어가는 힘/나오는 힘으로
입출력은 방향을 가진 힘입니다.

컴퓨터에서는 입출력을 스트림(stream 시냇물)에 빗대기도 합니다.

이 포스팅에서 배울 내용

1. 파이썬 input 함수를 사용하여 키보드에서 입력을 받습니다.

2. 입력받은 값을 print 함수를 사용하여 화면에 출력합니다.

input 함수로 입력을 받아보겠습니다. 파이썬 IDLE를 실행시키고 아래의 코드를 입력합니다.

>>> temp = input("숫자를 하나 고르세요.\n")
숫자를 하나 고르세요.
10
>>> temp
'10'

코드를 실행하면 input 함수 안에 있는 문자열이 출력되면서 입력모드로 바뀝니다. ‘\n’ 은 개행문자로 한줄 밑으로 가서 입력을 받습니다.

숫자를 입력하면 변수 temp 안에 10이 저장됩니다. 그런데 이 10은 문자열의 10이라서 ’10’ 이렇게 따옴표가 둘러싸여 있습니다.

input 함수로 입력받은 값은 문자열로 저장됩니다.

그렇다면 이번에는 문자열의 입력을 받아 보겠습니다.

>>> name = input("이름이 무엇입니까?\n")
이름이 무엇입니까?
master kay
>>> name
'master kay'
>>> print("안녕하세요!", name, "님!")
안녕하세요! master kay 님!

입력받은 내용이 문자열로 저장되었습니다. 중간의 공백도 저장이 잘 되는데 눈에 보이지 않지만 컴퓨터는 공백을 하나의 문자 데이터로써 저장합니다. 키보드에서는 space 를 입력하면 공백문자가 되죠? space 키와 공백문자가 대응이 됩니다.

문자열을 변수 name에 저장했으니 print 함수에서 그대로 불러오면 됩니다. 지난 포스팅 2-3의 내용에서 print 함수에서 문자열을 연결하는 법을 배웠습니다. 쉼표를 사용하여 연결하면 문자열을 한칸씩 띄어서 연결합니다.

2. 입력받은 값의 처리

— 파이썬 int 함수 / 파이썬 eval 함수

파이썬의 함수는 한 가지의 기능을 처리하도록 설계되어 있습니다. print 함수가 출력을 위한 기능이라면 input 함수는 입력을 위한 기능을 처리하죠.

좀 더 복잡한 프로그램을 만들어야 한다면 서로 상성이 맞는 함수를 조합해서 사용할 수 있습니다. 프로그램을 만들기 위해서 매번 어려운 알고리즘을 새로 개발해야 하는 것은 아닙니다. 많은 경우 이미 만들어진 기능들을 조합하는 능력이 더 중요합니다.

프로그래머들이 좋아하는 구절이 있습니다.

Don’t reinvent the wheel, just realign it.

수레바퀴를 재발명 하지말라. 그냥 재조정하라.

수레바퀴란 파이썬 input, print 함수 같이 이미 잘 만들어진 도구를 말합니다. 이런 파이썬의 내장함수는 언어를 설계한 사람들이 이미 최상의 컨디션으로 구현한 상태입니다.

각각 프로그래머들이 비슷한 함수를 만들더라도 그보다 성능과 안정성을 향상시키기 어렵습니다. 특히 많은 내장함수(built-in function)들은 파이썬이 아니라 C언어로 작성되어 있어서 파이썬으로 만든 프로그램보다 성능이 뛰어납니다.

좋은 파이썬 프로그래머가 되고 싶다면 자신만의 알고리즘 공부도 중요하지만, 그보다 먼저 선배들이 물려준 수레바퀴들을 더 잘 사용하는 것이 우선입니다. 예를 들어 print 와 input 함수를 잘 사용하는 나만의 방법을 개발하는 것입니다.

발명왕 에디슨도 자신은 남이 만들다 만 곳에서 부터 시작한다는 어록을 남겼습니다. 초보 여러분들도 이제 내장함수를 사용하기 시작했다면 Don’t reinvent the wheel 개념을 잘 기억하시길 바랍니다. 현대의 많은 프로그래머들이 즐기는 Google 검색의 Meme은 Don’t reinvent the wheel의 현재 버전입니다 (¬‿¬)

그럼 이번에는 input 과 조합하는 함수를 알아보겠습니다.

1) eval함수

eval 함수는 파이썬 input 함수로 입력을 받은 수식을 계산합니다. 숫자가 아니라 수식을 계산합니다.

>>> temp = input("수식을 입력하세요 : ")
수식을 입력하세요 : 5+20
>>> temp
'5+20'
>>> eval(temp)
25

eval 은 evaluation 의 약자로 수식을 평가한다는 뜻입니다. 파이썬에서 사용하는 수식의 정확한 단어는 표현식 (‘expression’) 입니다. 수식을 계산하여 어떤 내용을 표현한다는 뜻으로 보면 됩니다.

eval을 사용하면 input에서 받은 문자열을 유연하게 사용할 수 있습니다.

>>> PI = 3.14
>>> radius = input("원의 반지름을 입력하시오 : ")
원의 반지름을 입력하시오 : 5
>>> expression = radius + '*2*' + str(PI)
>>> expression
'5*2*3.14'
>>> eval(expression)
31.400000000000002
>>> result = eval(expression)
>>> print("반지름이", radius, "인 원의 둘레는", round(result, 2), "입니다")
반지름이 5 인 원의 둘레는 31.4 입니다

위의 코드는 사용자로부터 반지름을 입력 받아서 원의 둘레를 구합니다.

eval 함수의 원리를 보여주기 위해서 약간 식을 번거롭게 만들었습니다. 문자열로 받던 수로 받던간에 일단 수식을 세우고 eval 함수에 넣으면 계산이 됩니다.

중간의 str 함수는 PI가 부동소수점 자료형이기 때문에 문자열로 변환하는 것입니다. eval 함수에 입력하는 값은 문자열입니다. 어떤 수식이라도 조각내서 모아도 eval 함수가 처리할 수 있습니다.

eval 함수 하나만 보더라도 파이썬이 사용자들을 얼마나 배려하고 있는지 보이시죠? 다른 프로그래밍 언어에서는 이렇게 유연한 처리방식을 잘 사용하지 않습니다. 각각의 자료형에 대한 엄격한 검사와 수동변환을 하는 것이 기계적인 사고와 닮아있습니다.

이 이상의 내용은 중급단계에서 다뤄야 할 내용으로 추후에 난이도에 맞는 문서에 포스팅하겠습니다.

2) int 함수, str 함수

input 함수가 입력받은 값을 문자열로 돌려주기 때문에 이것을 가지고 숫자 계산은 안됩니다.

eval 함수를 사용할 수도 있겠지만 수식을 계산하는 무거운 함수를 사용하는 것 보다 간단한 형변환 함수를 사용하는 것이 유리합니다. 예를 들어 ’10’ 이라도 input 함수가 입력을 받았습니다. 단순히 ’10’에서 ” 따옴표를 삭제하여 10으로 만들어 준다면 좋을 텐데요. int 함수가 그 일을 합니다.

>>> number = int(input('숫자를 입력하시오: '))
숫자를 입력하시오: 10
>>> number
10
>>> number - 3
7
>>> number = input('숫자를 입력하시오: ')
숫자를 입력하시오: 10
>>> number
'10'
>>> number - 3
Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    number - 3
TypeError: unsupported operand type(s) for -: 'str' and 'int'

위의 코드에서 int 함수가 input 함수를 감싸고 있습니다. 이는 input 함수가 끝나고 나오는 값(반환 값이라 합니다)이 그대로 int 함수로 들어가는 것을 의미합니다.

문자열 10은 숫자 10으로 바뀝니다. 문자열 10과 숫자 10이 다르다는 것은 지난 포스트 2-3에서 아스키 코드의 예로 설명을 했습니다. 혹시 의문점이 있다면 이전 포스트를 참고하시길 바랍니다.

숫자로 바뀐 다음에는 연산이 잘 됩니다.

그 다음에는 int 함수 없이 실행해봤습니다. 그랬더니 계산을 하려고 하니까 오류가 납니다. 에러 메시지를 잘 읽어보면 str 고 int 는 계산이 안된다고 합니다. str 은 문자열 ’10’을 의미하고 int 는 숫자 리터럴 3을 의미합니다. 이렇든 계산을 하기 위해서는 int 형으로 바꿔서 하는 것이 파이썬의 규칙입니다.

str 함수는 int와 반대로 숫자형을 문자열로 변형합니다. 문자열과 숫자형을 + 연산자로 연결시킬 때 사용합니다. 파이썬은 동적타입으로 데이터를 유연하게 사용할 수 있지만 이렇게 엄격하게 자료형을 검사할 때가 있으니 주의합니다.

>>> bigNumber = 2504131412541
>>> str(bigNumber)
'2504131412541'

요약

이번 포스팅에서는 파이썬 input 함수에 대하여 알아봤습니다.

학습을 마친 후 다음의 사항을 점검하세요.
  • 파이썬 input 함수를 사용하여 사용자로부터 입력받을 수 있습니다.
  • eval 함수를 사용하여 표현식을 만들 수 있습니다.
  • int 함수, str 함수를 사용하여 문자열과 숫자형으로 변환할 수 있습니다.

참고 외부문서

04-2 사용자 입력과 출력 – 점프 투 파이썬 (wikidocs.net)

파이썬 내장함수 print와 input 함수 [built in function]

Leave a Comment