[바로바로 파이썬 09] 입력이란 무엇일까?
지금까지는 프로그램이 만든 결과를 화면에 보여주거나 파일에 저장하면서 출력이 무엇인지 알아봤습니다. 그렇다면 반대로 프로그램이 값을 받아들이는 입력은 무엇일까요?
외부에서 들어오는 값, 입력
입력은 프로그램 바깥에서 프로그램 안으로 값이 들어오는 것을 말합니다. 키보드로 이름을 입력하거나 로그인 화면에서 아이디와 비밀번호를 입력하거나, 검색창에 검색어를 입력하는 것이 대표적인 예입니다. 첨부 파일과 같이 파일을 프로그램에 불러와 처리하는 것도 입력의 한 형태입니다. 이처럼 외부에서 받은 값을 처리하는 많은 프로그램은 다음과 같은 흐름으로 동작합니다. • 입력 → 처리 → 출력입력은 프로그램이 처리할 재료이고, 출력은 그 재료를 처리한 결과라고 생각하면 이해하기 쉽습니다. 따라서 입력과 출력은 서로 따로 떨어져 있기보다 하나의 흐름으로 연결되어 있습니다. 지금까지 작성한 코드에서는 대부분 값을 코드 안에 직접 넣어 사용했습니다. 예를 들어 다음과 같이 변수에 값을 저장해두고 이를 print( )로 출력합니다.
name, message에는 프로그램에서 사용할 값이 미리 저장되어 있습니다. 하지만 실제 프로그램에서는 프로그램을 실행할 때 사용자가 직접 값을 입력해야 하는 경우가 많습니다. 어떤 사용자는 이름으로 "바로"를 입력하고, 다른 사용자는 "요즘"을 입력할 수 있어야 더 자연스러운 프로그램이 되는 것이죠. 그렇다면 프로그램을 실행하는 도중에 사용자가 직접 값을 입력하게 하려면 어떻게 해야 할까요?
입력을 처리하는 input( )
이럴 때 사용하는 함수가 input( )입니다. input( ) 함수를 사용하면 프로그램을 실행하는 도중에 사용자에게 직접 값을 입력받을 수 있습니다. 그럼 바로 input( ) 함수를 사용해보겠습니다.
➊ input("이름을 입력하세요: ")는 사용자에게 값을 입력받는 코드입니다. 인수로 전달한 "이름을 입력하세요: "는 사용자가 무엇을 입력해야 하는지 알려주는 안내 문구입니다. 이 문구가 먼저 화면에 나타난 뒤, 프로그램은 사용자가 값을 입력하고 Enter 를 누를 때까지 기다립니다.
➋ 사용자가 '바로'라고 입력하고 Enter 를 누르면 input( )이 입력받은 값을 반환하고, 그 값이 name 변수에 저장됩니다. 따라서 message = f"{name}님, 환영합니다."에서 name 자리에 "바로"가 들어가고, "바로님, 환영합니다."라는 문장이 만들어집니다.
➌ print(message)는 만들어진 문장을 화면에 출력합니다.
이처럼 input( )을 사용하면 코드 안에 name = "바로"처럼 값을 미리 정해두지 않아도 됩니다. 프로그램을 실행할 때마다 사용자가 직접 다른 값을 입력할 수 있습니다.
앞에서 작성한 코드를 다시 실행해서 이번에는 '요즘'이라고 입력해보세요. 같은 코드인데도 실행 결과가 달라지는 것을 확인할 수 있습니다.
코드는 그대로지만 사용자가 입력한 값이 달라졌기 때문에 결과도 달라졌습니다. 이처럼 input( )을 사용하면 프로그램을 실행할 때마다 서로 다른 값을 받아 처리할 수 있습니다. 그런데 input( )으로 받은 값을 사용할 때는 꼭 알아두어야 할 특징이 하나 있습니다.
input( )으로 입력한 값은 어떻게 처리될까?
input( )으로 입력받은 값은 언제나 문자열입니다. 사용자가 12처럼 숫자로 보이는 값을 입력해도 파이썬은 이를 정수 12가 아니라 문자열 "12"로 받아들입니다. 글로만 보면 조금 낯설 수 있으니 코드로 확인해봅시다.
➊ 사용자에게 나이를 입력받는 코드입니다. 실행 결과에서는 20을 입력했습니다.
➋ 입력받은 값을 그대로 출력합니다. 화면에는 20이 출력되므로 숫자처럼 보입니다.
➌ type(age)는 age 변수에 저장된 값의 자료형을 확인합니다. 실행 결과에 <class 'str'>이라고 나왔습니다. str은 문자열을 뜻합니다. 즉, 우리는 20이라고 입력했지만 input( )이 돌려준 값은 숫자 20이 아니라 문자열 "20"입니다.
이 차이는 계산할 때 중요해집니다. 만약 input( )으로 입력한 값을 ‘숫자’라고 생각하고 코드를 작성하면 어떻게 될까요? 다음 코드를 작성해봅시다.
➊ 사용자가 20을 입력하면 age 변수에 숫자 20이 아니라 문자열 "20"이 저장됩니다.
➋ print(age + 1)은 age에 정수 1을 더하는 코드입니다. 하지만 age는 문자열이고 1은 정수입니다. 파이썬은 문자열과 정수를 + 연산자로 바로 더할 수 없으므로 오류가 발생합니다. 그렇다면 입력받은 값으로 실제 계산을 하려면 어떻게 해야 할까요?
input( )으로 입력받은 값은 문자열이므로 숫자로 계산하고 싶다면 문자열을 숫자로 바꾸는 과정이 필요합니다. 이때 사용하는 함수가 int( )입니다. 앞에서 공부한 자료형 변환 내용이 연결되는 부분입니다.
➊ input( )으로 나이를 입력받습니다.
➋ age = int(age)를 실행해 age에 저장된 문자열 "20"을 정수 20으로 바꿉니다.
➌ 이제 age에는 문자열이 아니라 정수가 저장되어 있으므로 age + 1을 계산할 수 있고, 실행 결과로 21이 출력됩니다.
한 번 더 연습해봅시다. 이번에는 두 수를 입력받아 더해보겠습니다.
➊ 첫 번째 숫자를 입력받아 num1에 저장합니다.
➋ 두 번째 숫자를 입력받아 num2에 저장합니다.
➌ 그런 다음 int(num1)로 num1에 저장된 문자열을 정수로 변환합니다.
➍ int(num2)로 num2에 저장된 문자열도 정수로 변환합니다.
➎ 이제 숫자처럼 계산할 수 있습니다. total = num1 + num2로 두 수를 더해 결과를 total 변수에 저장합니다.
➏ print( )로 계산 결과를 출력합니다.
만약 10과 20을 입력하고 int( )로 변환하지 않은 채 "10" + "20"처럼 문자열끼리 + 연산을 했다면 결과는 30이 아니라 "1020"이 됩니다. 이처럼 프로그램을 만들 때는 입력받은 값을 어떤 용도로 사용할지 생각하고 필요한 자료형으로 변환해야 합니다.
이것으로 키보드에서 값을 입력받는 기본적인 방법을 알아봤습니다. 그런데 입력은 사용자가 직접 키보드로 입력하는 것만 있는 것은 아닙니다. 앞에서 프로그램의 결과를 파일에 저장했듯이, 이미 저장되어 있는 파일의 내용을 프로그램 안으로 읽어들일 수도 있습니다. 다음에는 파일의 내용을 읽어오는 파일 입력을 알아보겠습니다.
