스크립트

초콜릿을 좀 더 본격적으로 만드려면, 레시피를 어딘가에 적어두는 것이 편하다. 매 번 초콜릿을 만들 때 마다 다음과 같이 인터프리터에 레시피를 붙여 넣는 것은 너무 번거롭다. 매번 이렇게 하다간 시간이 너무 오래 걸려서 납품 기한도 못 맞추지 않을까?

>>> sugar = 120
>>> milk_choco = 60 + sugar + 200

그래서 이제부터는 확장자 명이 .py 인 파일 안에 레시피를 미리 적어두고 필요할 때 마다 한 번에 실행되도록 해 보자! .py 로 끝나는 파일을 파이썬 스크립트 라고 부른다.

파이참 왼쪽의 Project 패널을 열어서, 폴더를 우클릭 -> New -> Python File 선택 -> 이름을 factory.py 라고 지어주자.

image-center

그리고 파일의 내용을 다음과 같이 적어보자.

# 이곳은 초코 공장입니다.

sugar = 120 # 설탕량을 저장합니다.

choco = 60 + sugar + 100
milk_choco = 60 + sugar + 200
dark_choco = 90 + sugar + 100

스크립트를 작성하는 방법과, 인터프리터에서 파이썬을 실행하는 방법은 조금 다르다.

우선, 파이썬 스크립트 안에서는 >>> 기호는 필요가 없다!

그리고, 단순히 변수 이름을 입력하고 엔터를 눌러서는 변수의 내용이 출력되지 않는다. print() 문을 사용해야 한다.

또한, 작성이 완료된 파이썬 스크립트를 실행하려면 파이참에서 Ctrl + Shift + F10 을 누르면 실행 된다. (버전에 따라 Alt + Shift + F10 인 경우도 있다.)

스크립트의 실행결과

실행 결과로는? 아래와 같은 메세지 하나가 나올 것이다.

Process finished with exit code 0

위 문구는 파이썬 스크립트의 실행이 에러 없이 잘 끝났음을 의미한다!

exit code 는 프로그램이 종료할 때 내보내는 숫자 값인데, 0 이라면 ‘이상 없음’ 임을 참고하자.

에러가 났을 때의 실행 결과

내친 김에 파이썬 에러가 났을 경우에는 어떤 일이 생기는지도 알아보자.

새로운 파일을 하나 만들어 이름은 error.py 라고 하자.

# error.py
3 / 0

숫자를 0 으로 나누는 계산은 수학적으로 불가능 하다. 이 스크립트를 실행하면 어떻게 될까?

Traceback (most recent call last):
  File "C:/Users/유저이름/PycharmProjects/ChocoPy/error.py", line 1, in <module>
    3 / 0
ZeroDivisionError: division by zero

Process finished with exit code 1

파이참 하단의 Run 패널에 빨간 글씨와 함께 메세지가 나왔을 것이다.

아직 Traceback 이 무엇인지, 메세지가 정확히 무엇을 의미하는지는 모르겠지만 다음 사실은 유추해 볼 수 있다.

  • 에러가 발생했다는 것
  • 에러가 발생하면 빨간 메세지로 경고가 나온다는 것

그리고 조금 눈치가 빠르다면 다음 사실들도 알았을 것이다.

  • 에러의 이름은 ZeroDivisionError 라는 것
  • 에러가 발생하면 어떤 파일 (C:/Users/유저이름/PycharmProjects/ChocoPy/error.py) 에서, 어느 부분에서 에러가 발생했는지를 보여준다.

이처럼 에러가 발생하면 빨간 글씨로 경고가 나올 것이다. 그러면 여러분은 에러 메세지를 단서로 마치 사건을 해결하는 탐정처럼, 문제가 무엇인지를 추리해 나가는 것이다.

출력

이제 다시 factory.py 로 돌아가자.

스크립트를 실행 할 때에는 단순히 변수의 이름을 적어주는 것 만으로는 그 안의 값이 출력되지 않는다고 했다. 출력을 위해서는 print() 라는 것을 사용해야 한다. 다음과 같이 factory.py 를 새로 작성해 보자.

# 이곳은 초코 공장입니다.

sugar = 120

choco = 60 + sugar + 100
milk_choco = 60 + sugar + 200
dark_choco = 90 + sugar + 100

print(choco)
print(milk_choco)
print(dark_choco)

원하는 대로 각 초코의 무게가 출력되었다! 그 출력 결과는 다음과 같다.

280
380
310

입력

출력과는 반대로 여러분이 입력한 값을 파이썬 프로그램 안으로 집어넣는 방법도 있다. 입력 을 소개한다.

입력을 위해서는 input() 을 사용한다.

다음과 같이 sugar 를 정하는 부분을 수정해 보자. 그리고 실행하자.

... 초략
sugar = int(input()) # sugar = 120
... 후략

실행을 해보면 전처럼 바로 초콜릿의 무게가 출력되는 대신, 빈 화면에서 멈춰 있을 것이다. 이는 파이썬이 여러분의 입력을 기다리고 있는 것이다.

빈 화면에 마우스를 클릭한 후 100 이라는 숫자를 적어주자. 그리고 엔터를 친다. 그러면 화면에 다음과 같이 출력될 것이다.

100 # 입력
260 # 설탕의 무게가 100이 되어서 초콜릿의 무게가 바뀌었다.
360
290

int(input()) 의 의미

int(input()) 을 실행할 때 무슨 일이 벌어진 것일까?

입력을 받았다.
input() 은 사용자로부터 입력을 받아, input() 이 있던 자리가 사용자가 입력한 값으로 치환되는 것과 같은 효과이다. 즉, input() 을 실행하고 여러분이 100 을 입력했으므로

sugar = int("100")

을 한 것과 마찬가지다.

입력한 값의 자료형은 ‘문자열’ 이다.
문자열은 프로그래밍에서 1개의 ‘문자’(예: a)와 그 문자들의 나열인 ‘문자열’(예: aaa)을 구분하기 위해 사용하는 용어다. 다만 파이썬은 이 둘을 구분하지 않고 모두 문자열(str, String의 약자)라고 한다.

input() 은 받은 모든 입력을 ‘문자열’ 자료형으로 만든다. 여러분이 100 이라는 숫자를 입력했어도, 자료형이 문자열 이기 때문에 이를 숫자 자료형, 그 중에서도 정수로 바꾸어야 한다.

int() 는 문자를 정수로 바꾼다.
int(“100”) 은 문자열 100을 정수로 바꿔라! 라는 뜻이다. 즉 그 결과는 정수 100 이 되고 결과적으로 정수 100 이 sugar 변수에 할당된다.

input() 이 모든 값을 문자열로 해석하는 건, 파이썬을 만들 때 그렇게 ‘약속’ 을 해서 그렇다. 이는 이해의 대상이 아니라, ‘암기’의 대상이다.

인터프리터를 열어서 type(input()) 을 실행해 보고 아무 값이나 마구 넣어보자. 그 결과는 항상 ‘str’ 일 것이다.

Updated:

Comments