brunch

You can make anything
by writing

C.S.Lewis

by 미래지기 Sep 05. 2024

문자와 숫자를 입력해 보자

` | 그레이브 | Grave


  자, 지금까지 배운 파이썬 명령어는 출력을 담당하는 print 명령어입니다. 이제 입력을 담당하는 명령어를 배울 시간이 되었습니다. 파이썬은 어떤 명령어를 통해 정보를 입력받을까요?


그것은 바로, 'input'이라는 명령어입니다.


원래는 파이썬이라는 언어는 컴퓨터에 설치해 놓고 사용하는 것이 정석입니다. 하지만 간편하게 배우기 위해 온라인 파이썬에 접속하겠습니다. 컴퓨터에는 나중에 설치해도 됩니다. PC(컴퓨터)에서 아래 사이트에 접속합니다.


https://www.online-ide.com/online_python_ide


'온라인 파이썬 IDE'라는 사이트에 접속하면 아래와 같은 화면이 나옵니다.



큰 네모칸이 두 개 나오는데, 위의 네모칸은 코드를 입력하는 '코드창'이고, 아래의 네모칸은 코드를 실행한 결과를 출력하는 '출력창'입니다.


코드창에는 아래와 같은 내용이 미리 입력되어 있습니다.


# Online IDE - Code Editor, Compiler, Interpreter


print('Welcome to Online IDE!! Happy Coding :)')


이 내용을 선택해서 지우고, 아래 명령어를 입력합니다.


input()


그리고 코드창 밑 부분에 있는 [Run] 버튼울 눌러서 코드를 실행합니다. 그러면 아래와 같은 화면이 보일 것입니다.



이제 커서(cursor)가 깜박이는 출력창에 마우스를 클릭합니다. 출력창에 마우스를 클릭하는 이유는 코드창에서 출력창으로 넘어오기 위해서입니다.


출력창의 커서가 깜박이는 이유는 컴퓨터의 사용자가 무엇을 입력해 줄 때까지 기다리고 있기 때문입니다. input 명령을 실행했기 때문에 컴퓨터는 키보드에서 무엇인가가 입력되길 기다리고 있는 것입니다.


키보드의 {Enter] 또는 [Return] 키를 칩니다. (앞으로는 '엔터키'라고 부르겠습니다)


엔터키는 입력이 끝났다고 컴퓨터에게 알려주는 신호입니다. 엔터키를 치면 프로그램이 종료되고, 종료되었음을 알리는 아래와 같은 메시지를 출력창에 출력해 줍니다. (설치된 파이썬 환경에 따라서 이런 메시지는 표시되지 않을 수도 있습니다.)



이 input 명령어를 실행했을 때 [Run] 버튼이 [Stop]으로 바뀌었다가 프로그램을 종료하니까 다시 [Run]으로 표기가 바뀌는 것을 보셨나요? 파이썬은 프로그래머가 실행한 프로그램이 종료되기까지 또는 [Stop] 버튼을 누를 때까지 기다리고 있었던 것입니다. 즉, 실행 중이었던 것입니다.




input 명령어는 키보드를 통해 정보를 입력받는 파이썬 명령어입니다.


그럼, 입력받은 정보는 어디에 저장되나요?


아주 좋은 질문입니다.

input 명령어로 입력받은 정보는 메모리에 저장됩니다.


메모리에 저장된다는 말은... 어떤 변수에 저장된다는 뜻인가요?


맞습니다!

자료를 입력받는 이유는 그것을 사용하기 위해서입니다. 자료를 사용하기 위해서는 먼저 자료를 저장해 놓아야 합니다. 그래서 일차적으로 자료를 메모리에 저장하는 것이고, 메모리에 저장된 정보를 쉽게 파악하기 위해 정보에 '이름'을 붙이는 것입니다. 그게 바로 변수입니다.


이제 키보드로부터 무엇인가를 입력받아 fruit (과일)라는 이름의 변수에 저장해 보겠습니다. 코드는 아래와 같습니다.


fruit = input()


'온라인 파이썬 IDE' 사이트의 코드창에 위의 코드를 입력하고 실행합니다. ([Run] 버튼을 누릅니다)


그런 다음, 출력창을 클릭하고 아무 과일 이름이나 하나를 입력한 뒤 엔터키를 칩니다.


프로그램이 정상적으로 종료되었죠?


그런데 정보를 입력만 받고, 입력 받은 정보가 무엇인지 화면에 표시하지 않으니까 답답합니다. 코드를 아래와 같이 작성하고 실행합니다.


fruit = input()

print(fruit)


입력한 과일 이름 바로 밑에 같은 내용이 출력되었죠?


잘하셨습니다.




그런데 입력을 받을 때 보면, 아무 내용도 없이 커서가 깜박이니까 무엇을 어떻게 해야 하는지 사용자는 알 수 없습니다. 프로그램을 쓰는 사용자를 위해서 메시지를 하나 표시해 볼까요?


메시지는 input 명령어의 괄호 안에 씁니다. 아래와 같이 코드를 다시 써서 프로그램을 실행해 보세요.


fruit = input("과일 이름을 하나 입력하고 Enter를 치세요 : ")

print("----------")

print(fruit)





이번에는 과일 이름 같은 문자열 말고 숫자를 입력해 보겠습니다. 숫자를 입력받아 num이라는 변수에 저장한 뒤 이 정보를 다시 출력하는 코드입니다. 아래와 같이 짜면 되겠죠?


num = input("숫자를 입력하세요 : ")

print(num)


3이라는 숫자를 입력했다면 아래와 같이 출력되겠죠?


3

3


자, 이제는 입력받은 숫자만큼 '@' 문자(골뱅이)를 반복해서 출력하는 코드를 짜 보겠습니다. 코드는 아래와 같겠죠?


num = input("숫자를 입력하세요 : ")

print('@' * num)


코드를 실행하고 회심의 미소를 지으면서 숫자 5를 입력한 뒤 엔터키를 칩니다.


그런데...

어라? 아래와 같은 에러가 났지요?



에러가 나오는 게 당연합니다.

그런데, 왜 오류가 발생했을까요?


input 명령어를 통해 입력되는 정보는 무조건 텍스트, 즉 문자열로 변수에 저장됩니다. 문자열을 입력해도 문자열로 저장하고 숫자를 입력해도 문자열로 저장합니다.  


아니, 키보드 숫자키로 3을 입력했는데도 숫자가 아니라고요?


예, 그렇습니다. 자동적으로 문자로 저장됩니다.



a = 3

b = '3'

print( a )

print( b )


위의 코드에서 변수 a에는 숫자 3이 저장되어 있고, 변수 b에는 문자 '3'이 저장되어 있습니다. 출력 해보면 둘 다 똑같은 "3"으로 보입니다. 하지만, a는 사직연산이 가능하지만, b는 사칙연산을 할 수 없습니다. 결과만 봐서는 과정을 알 수 없으니까요.


num = input("숫자를 입력하세요 : ")


위의 코드에서 입력받은 '숫자'는 무조건 문자로 변환되어 num이라는 변수에 저장되기 때문에, 변수 num은 사칙연산을 할 수 없습니다. 따라서, 그 밑의 코드 print('@' * num)에서 문자 '@'와 변수 num은 문자열이기 때문에 당연히 서로 곱할 수 (*) 없는 것입니다. 그래서 그런 오류가 난 것입니다.


그럼, 입력받은 숫자는 어떻게 해야 제대로 계산할 수 있을까요?


문자를 숫자로 바꿔주면 됩니다. 문자를 숫자로 바꿔주는 명령어가 있습니다. 그것은 바로 'int' 명령어입니다. int 명령어의 괄호 안에 '숫자로 구성된' 문자를 넣으면 숫자로 바꿔서 돌려주는 명령어입니다.


a = int('5')


위의 코드는 숫자처럼 보이지만 사실은 문자인 '5'를 숫자 5로 변환해 줍니다. 그래서 변수 a에는 숫자가 저장되기 때문에 변수 a는 사칙연산을 할 수 있습니다.


그럼 아래와 같은 코드도 문제없이 숫자로 바꿔줄까요?


b = int('y')


아닙니다. 문자 'y'는 '숫자로 이루어진 문자열'이 아니기 때문에 숫자로 바꿀 수 없습니다. 그래서 코드를 실행하면 오류 메시지가 표시될 것입니다.


자, 아래 코드를 한 번 보세요.


a = '5'

n = int(a)

print( n * 9 )


위의 코드를 실행하면 45가 출력될 것입니다. 이 코드는 아래와 같이 짧게 쓸 수도 있습니다. 그러면 변수 n을 쓰지 않아도 됩니다.


a = '5'

print( int(a) * 9 )


어느 것이 더 쉬워 보이나요? 코드는 이게도 짤 수 있고, 저렇게도 짤 수 있습니다. 프로그래머의 취향을 반영하는 것이지요.




Quiz


퀴즈를 하나 내겠습니다. 풀어보세요.


나이를 입력하면 그 나이에 365를 곱해서 지금까지 살아온 날을 계산하는 프로그램을 아래와 같이 만들었습니다. 그런데 이 코드에는 오류가 있습니다. 어떻게 고쳐야 제대로 계산될까요?


age = input('나이를 입력하세요 : ')

days = age * 365

print("지금까지 살아온 날은 모두 ", days, '일입니다.')


▨ 미래지기

이전 12화 두 값을 맞바꾸기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari