프로그램의 길

이 책의 목적은 여러분이 마치 컴퓨터 과학자처럼 생각할 수 있도록 가르치는 것입니다. 이 사고방식은 수학, 공학, 자연과학의 장점들을 결합합니다. 수학자처럼, 형식 언어를 사용하여 (구체적으로는 계산에 대한) 생각을 표현합니다. 공학자처럼, 어떤 것들을 설계하고, 부분들을 조립하여 시스템을 만들며, 여러 대안들의 절충안을 저울질 합니다. 과학자처럼, 복잡한 시스템을 관찰하고, 가설을 세우며, 예측을 실험으로 검증합니다.

컴퓨터 과학자의 가장 중요한 기술은 문제해결입니다. 문제해결이란, 문제를 기술하고, 창의적으로 해결책을 고안하며, 분명하고 정확하게 해결책을 표현하는 능력을 뜻합니다. 앞으로 드러나겠지만, 프로그래밍하는 법을 배우는 과정은 문제해결 기술을 연마할 수 있는 훌륭한 기회를 제공합니다. 이 것이 이 장을 “프로그램의 길” 이라 이름 붙인 이유입니다.

한 단계에서, 앞으로 여러분은 프로그래밍하는 법을 배우게 되고, 이 자체만으로도 쓸모 있는 기술을 익히게 됩니다. 그러나 또 다른 단계에서, 여러분은 프로그래밍을 어떤 목표에 도달하기 위한 수단으로 사용하게 됩니다. 우리가 함께 가는 동안 그 목표는 점차 분명해 질 것입니다.

파이썬 프로그래밍 언어

여러분이 배울 프로그래밍 언어는 파이썬(Python)입니다. 파이썬은 고수준 언어로 분류됩니다. 여러분들이 들어보았을 만한 다른 고수준 언어들에는 C, C++, 펄, 자바 같은 것들이 있습니다.

저수준 언어도 있는데, 때로는 “기계어”나 “어셈블리어”라고도 불립니다. 대충 말하자면, 컴퓨터는 저수준 언어로 씌어진 프로그램들만 실행할 수 있습니다. 그래서 고수준 언어로 씌어진 프로그램들은 실행되기 전에 처리과정을 거쳐야만 합니다. 이런 처리과정에는 어느 정도의 시간이 걸리게 되는데, 고수준 언어의 작은 단점입니다.

장점은 막대합니다. 첫째로, 고수준 언어로 프로그래밍하는 것이 훨씬 쉽습니다. 고수준 언어로 씌어진 프로그램은 쓰는데 시간이 덜 걸리고, 짧고 읽기 쉬울 뿐만 아니라, 올바를 가능성이 더 높습니다. 둘째로, 고수준 언어는 이식성이 있습니다. 없거나 약간의 수정만으로도 다른 종류의 컴퓨터에서 실행할 수 있다는 뜻입니다. 저수준 언어는 한가지 종류의 컴퓨터에서만 실행되며, 다른 종류에서 실행하려면 다시 작성해야 합니다.

이런 장점들 때문에, 거의 모든 프로그램들은 고수준 언어로 씌어집니다. 저수준 언어는 몇몇 특별한 용도로만 사용됩니다.

인터프리터컴파일러라는 두 종류의 프로그램으로 고수준 언어를 저수준 언어로 변환합니다. 인터프리터는 고수준 언어를 읽은 후에 실행, 즉 프로그램이 뜻하는 바를 수행합니다. 프로그램을 한 줄씩 읽어 들이는 것과 계산 하는 것을 번갈아 반복하면서, 한 번에 조금씩 처리합니다. 그림 [fig.interpret]는 인터프리터의 구조를 보여줍니다.

interpret

[fig.interpret]

컴파일러는 프로그램을 읽어 들인 후에, 프로그램을 실행하기 전에 전체를 한꺼번에 번역합니다. 이런 상황에서 고수준 프로그램을 원시코드, 번역된 프로그램을 목적코드실행파일이라고 부릅니다. 프로그램이 한번 컴파일 되면 다시 번역하는 과정 없이 반복적으로 실행할 수 있습니다. 그림 [fig.compile]은 컴파일러의 구조를 보여줍니다.

compile

[fig.compile]

파이썬 프로그램이 인터프리터에 의해 실행되기 때문에, 파이썬은 인터프리터 언어로 취급됩니다. 인터프리터를 사용하는 방법에는 대화형 모드스크립트 모드가 있습니다. 대화형 모드에서는 파이썬 프로그램을 입력할 때마다 인터프리터가 결과를 보여줍니다:

>>> 1 + 1
2

갈매기표식, >>>, 은 인터프리터가 준비되었음을 나타내는데 사용하는 프롬프트입니다. 1 + 1를 입력하면, 인터프리터는 2로 대답합니다.

대신에, 코드를 파일에 저장한 후 인터프리터가 파일의 내용을 실행하도록 할 수 있는데, 이를 스크립트라고 합니다. 관례적으로 파이썬 스크립트들은 .py 로 끝나는 이름을 갖습니다.

스크립트를 실행하려면 인터프리터에게 파일의 이름을 알려줘야 합니다. dinsdale.py 이라는 이름의 스크립트가 있고 유닉스 명령창에서 작업 중이라면, python dinsdale.py라고 입력합니다. 개발 환경마다 스크립트를 실행하는 방법은 다릅니다. 여러분이 사용하는 환경에 대한 지침을 파이썬 웹사이트 http://python.org에서 안내하고 있습니다.

대화형 모드는 입력하는 즉시 실행하기 때문에, 조그만 조각의 코드들을 실험하는데 편리합니다. 하지만 몇 줄을 넘어가면 코드를 스크립트로 저장해서, 나중에 수정하고 실행할 수 있도록 해야 합니다.

프로그램이란 무엇인가?

프로그램은 계산을 수행하는 방법을 지정하는 일련의 지시들입니다. 계산은 연립방정식을 푼다거나, 다항식의 근을 구하는 것 같이 수학적일 수 있습니다. 하지만 문서에서 글을 검색하고 치환하는 것이나, (충분히 괴상하게도) 프로그램을 컴파일 하는 것과 같이 기호를 처리하는 것일 수도 있습니다.

세부 사항은 언어마다 다르게 보일 수 있습니다만, 몇 가지 기초적인 지시들은 모든 언어들에서 나타납니다:

입력:
키보드와 파일을 포함하는 외부 장치로부터 데이터를 얻습니다.
출력:
화면에 데이터를 표시하거나 파일과 외부 장치로 데이터를 보냅니다.
수학:
덧셈이나 곱셈 같은 기본적인 수학 연산을 수행합니다.
조건부 실행:
어떤 조건들을 검사한 후에 적절한 코드를 실행합니다.
반복:
어떤 행동을 (변화를 주면서) 반복적으로 수행합니다.

믿기지 않겠지만, 이 것이 거의 전부 입니다. 여러분이 사용해온 모든 프로그램들은 얼마나 복잡한지와 관계없이 이런 지시들로 구성되어 있습니다. 그래서 프로그래밍을, 복잡한 작업을 작은 하위작업들로 분해하는 절차로 볼 수 있는데, 각각의 하위작업들을 이런 기본적인 지시들로 수행할 수 있을 만큼 충분히 작아질 때까지 나눕니다.

지금은 약간 모호하게 들릴 수 있습니다. 알고리즘을 다룰 때 이 주제로 다시 돌아오겠습니다.

디버깅이란 무엇인가?

프로그래밍은 실수하기 쉬운 작업입니다. 기이한 이유로, 프로그래밍 오류를 버그라고 부르고, 이를 추적해서 없애는 작업을 디버깅이라고 합니다.

프로그램에서는 세가지 종류의 오류가 발생할 수 있습니다: 문법 오류, 실행시간 오류, 의미 오류. 더 빨리 제거하기 위해 이 들을 구별하는 것이 도움이 됩니다.

문법 오류

파이썬은 문법이 정확할 때만 프로그램을 실행할 수 있습니다. 그렇지 않으면, 인터프리터는 오류를 설명하는 글을 보여주고 맙니다. 문법은 프로그램의 구조와 그 구조에 관한 규칙들을 뜻합니다. 예를 들어, 괄호는 쌍으로 사용되어야 합니다. 그래서 (1 + 2) 는 허락되지만, 8) 는 문법 오류입니다.

영어에서 독자들은 대부분의 문법 오류를 견뎌낼 수 있습니다. 우리가 오류 메시지를 토해내지 않고도 e. e. cummings 의 시를 읽을 수 있는 이유입니다. 파이썬은 그리 너그럽지 않습니다. 프로그램의 어느 곳에든 하나의 문법 오류가 있다면, 파이썬은 오류 메시지를 출력하고 종료할 것입니다. 여러분이 프로그래밍 경험을 쌓는 첫 몇 주간은, 아마도 문법 오류를 찾는데 많은 시간을 허비할 것입니다. 경험이 쌓임에 따라, 더 적은 오류를 범하게 될 뿐만 아니라, 더 빨리 찾아내게 될 것입니다.

실행시간 오류

[runtime]

두 번째 종류의 오류는 실행시간 오류입니다. 이렇게 불리는 이유는 프로그램의 실행이 시작되기 전에는 나타나지 않기 때문입니다. 이 오류들은 예외라고도 불리는데, 보통 예외적인 (그리고 나쁜) 것이 발생한 것을 나타내기 때문입니다.

이 책의 처음 몇 장에서 여러분이 보게 될 간단한 프로그램들에서는 실행시간 오류가 거의 없기 때문에, 좀 시간이 흐른 후에야 만나게 될 것입니다.

의미 오류

세 번째 종류의 오류는 의미 오류입니다. 여러분의 프로그램에 의미 오류가 있어도, 컴퓨터가 아무런 에러 메시지를 출력하지 않는다는 점에서, 성공적으로 실행될 것입니다. 하지만 해야 할 일을 올바로 하지는 않습니다. 뭔가 다른 것을 수행한 것이지요. 그렇다고는 해도 여러분이 지시한 일을 하는 것은 맞습니다.

문제는 여러분이 작성한 프로그램이 여러분이 작성하고자 한 프로그램이 아니라는 것입니다. 프로그램의 의미가 잘못된 것입니다. 의미 오류를 확인하는 것은 어려운데, 프로그램의 결과로부터 거꾸로 확인하여 어떤 일이 일어나고 있는지 추론해야 하기 때문입니다.

실험적 디버깅

여러분이 얻게 될 가장 중요한 기술들 중 하나는 디버깅입니다. 실망스럽기는 해도, 디버깅은 프로그래밍에서 가장 지적으로 풍부하고, 도전적이며 흥미로운 부분들 중 하나입니다.

어떤 면에서, 디버깅은 탐정 활동과 같습니다. 여러분은 실마리와 만나게 되고, 여러분이 본 결과를 유발한 과정과 사건들을 추론해야 합니다.

디버깅은 또한 실험 과학과 같습니다. 일단 무엇이 잘못되었는지에 대한 생각을 갖게 된다면, 프로그램을 수정해서 다시 시도합니다. 만약 가설이 옳다면, 수정의 결과를 예측한 데로 얻게 되고, 올바르게 동작하는 프로그램에 한걸음 더 가까이 가게 됩니다. 만약 가설이 틀렸다면 새로운 것을 만들어내야 합니다. 셜록 홈즈가 지적했듯이, “불가능한 것을 빼고 남는 것이 아무리 그럴듯하지 않아도 진실이어야만 합니다.” (코난 도일, 네 개의 서명)

어떤 사람들에게는 프로그래밍과 디버깅이 같은 것입니다. 즉, 프로그래밍은 원하는 것을 할 때까지 점진적으로 디버깅하는 과정입니다. 이런 방식에서는 무엇인가를 하는 프로그램으로 시작해서 작은 수정을 가하고, 항상 동작하는 프로그램이 될 수 있도록 디버깅해 나갑니다.

예를 들어, 리눅스는 수천 줄의 코드로 만들어진 운영체제입니다만, 리누스 토발즈가 인텔의 80386 칩을 탐구하기 위해 만든 간단한 프로그램으로 출발했습니다. 래리 그린필드에 따르면, “리누스의 초기 프로젝트들 중에는 AAAA 와 BBBB 중 하나를 인쇄하는 프로그램이 있습니다. 이 것이 후에 리눅스로 진화합니다.” (리눅스 사용자 지침서 베타 버전 1).

마지막 장에는 디버깅과 다른 프로그래밍 경험들에 관한 더 많은 제안을 담고 있습니다.

형식어와 자연어

자연어는 사람들이 말하는데 사용하는 한국어, 영어, 프랑스어 같은 언어들입니다. (사람들이 그 안에 질서를 넣으려고는 하지만) 사람들에 의해 설계되지 않고, 자연발생적으로 생겼습니다.

형식어는 특별한 용도를 위해 사람들이 설계한 언어입니다. 예를 들어, 수학자들이 사용하는 표기법은 숫자와 기호간의 관계를 특히 잘 표현하는 형식어입니다. 화학자들은 분자의 화학 구조를 표현하는 형식어를 사용합니다. 그리고 가장 중요하게도:

프로그래밍 언어는 계산을 표현하기 위해 설계된 형식어입니다.

형식어는 보통 문법적으로 엄격한 규칙을 갖습니다. 예를 들어, \(3 + 3 = 6\) 는 문법적으로 올바른 수학 문장입니다만, \(3 + = 3 \mbox{\$} 6\) 은 그렇지 않습니다. \(H_2O\) 는 문법적으로 올바른 화학식이지만, \(_2Zz\) 는 그렇지 않습니다.

문법 규칙은 토큰에 관계된 것과 구조에 관한 것으로 구분할 수 있습니다. 토큰은 단어, 숫자, 화학 원소와 같은 언어의 기본 요소들입니다. \(3 + = 3 \mbox{\$} 6\) 의 한 가지 문제는 \(\$\) 이 (제가 아는 범위 내에서) 수학에서 허락된 토근이 아니라는 것입니다. 마찬가지로, \(Zz\) 라는 약어로 표현되는 원소가 없기 때문에 \(_2Zz\) 도 올바르지 않습니다.

두 번째 종류의 문법 규칙은 문장의 구조, 즉 토큰이 나열되는 방식에 관한 것입니다. 문장 \(3 + = 3\) 은 올바르지 않은데, \(+\)\(=\) 이 올바른 토근임에도 불구하고, 연이어 나올 수 없기 때문입니다. 마찬가지로, 화학식에서 첨자는 원소기호 앞이 아니라 뒤에 와야 합니다.

연습 1.1. 구조적으로 올바르지만 잘못된 토큰을 포함한 한국어구문을 써보세요. 그런 다음 올바른 토큰들로만 구성되었지만 잘못된 구조를 갖는 문장을 써보세요.

한국어 구문이나 형식어의 문장을 읽을 때, (비록 자연어에서는 무의식적으로 수행하고 있지만) 구문의 구조를 파악해야 합니다. 이 과정을 해석이라고 부릅니다.

예를 들어, “동전이 떨어졌다”라는 구문을 들을 때, “동전이” 가 주어이고, “떨어졌다”가 술어임을 이해하게 됩니다. 일단 구문을 해석하면, 구문의 의미를 파악할 수 있습니다. 동전이 무엇인지 와 떨어진다는 뜻을 안다면, 이 구문의 일반적인 의미를 이해하게 됩니다.

형식어와 자연어가 많은 공통점들—토큰, 구조, 문법과 의미—을 갖고 있지만, 몇 가지 차이점 또한 존재합니다:

모호성:
자연어는 사람들이 문맥상의 실마리들과 다른 정보들을 사용하여 다루는 모호함으로 가득 차 있습니다. 형식어는 거의 혹은 완전히 모호함 없도록 설계됩니다. 모든 문장이 문맥에 관계 없이 오직 한가지 뜻 만을 갖는다는 뜻입니다.
중복성:
모호함을 극복하고 오해를 줄이기 위해 자연어는 많은 중복을 사용합니다. 결과적으로, 종종 장황해집니다. 형식어는 중복을 덜 허용하고, 더 함축적입니다.
융통성:
자연어는 숙어와 은유로 가득 차있습니다. 만약 영어에서 “동전이 떨어졌다” 라고 말한다면, 아마도 동전도 떨어지는 것도 없을 가능성이 높습니다 (이 숙어는 혼란의 시간을 보낸 후에 마침내 어떤 것을 깨닫게 되었다는 뜻입니다). 형식어는 표현 그대로의 의미를 갖습니다.

자연어를 말하면서 자란 사람들—모든 사람들—은 종종 형식어에 적응하기 힘들어합니다. 어떤 면에서, 형식어와 자연어의 차이는 운문과 산문의 차이와 같지만, 좀 더 심합니다:

운문:
단어는 그 의미 외에도 소리 때문에 사용됩니다. 시 전체로 합쳐지면, 어떤 효과나 감정적인 반응을 만들어냅니다. 모호함은 흔할 뿐만 아니라 고의적입니다.
산문:
단어의 뜻이 더 중요하고, 구조도 의미에 더 많이 기여합니다. 산문은 운문보다 평이하게 분석되지만 아직도 종종 모호합니다.
프로그램:
컴퓨터 프로그램의 의미는 모호하지 않고, 융통성이 없으며, 토큰과 구조를 분석하는 것 만으로 완전히 이해될 수 있습니다.

프로그램(과 다른 형식어)을 읽을 때 기억해둘 만한 지침을 드립니다. 첫째로, 형식어는 자연어에 비해 압축적이기 때문에 읽는데 더 오래 걸린다는 것을 기억하십시오. 또, 구조가 매우 중요하기 때문에 위에서 아래로, 왼쪽에서 오른쪽으로 읽어 나가는 것은 좋은 생각이 아닙니다. 대신에, 토큰을 구별해내고 구조를 파악함으로써, 프로그램을 머릿속으로 해석하는 방법을 배우십시오. 마지막으로, 세부사항이 중요합니다. 자연어에서는 무시할 수 있는, 철자나 구두법의 사소한 오류가 형식어에서는 큰 차이를 만들 수 있습니다.

첫 프로그램

[hello]

관습적으로, 새 언어에서 처음으로 작성하는 프로그램은 “Hello, World!”라고 불리는데, 하는 일이 “Hello, World!” 라는 글을 출력하는 것이 전부이기 때문입니다. 파이썬에서는 이렇게 됩니다:

print 'Hello, World!'

이 것은 print 문장의 예인데, 종이에 인쇄하는 것과는 관계 없습니다. 화면에 어떤 값을 보여줍니다. 이 경우, 결과는 다음과 같은 글입니다.

Hello, World!

프로그램에 있는 따옴표는 출력할 글자들의 시작과 끝을 표시할 뿐, 결과에 나타나지는 않습니다.

파이썬 3에서 인쇄를 위한 문법은 좀 다릅니다:

print('Hello, World!')

괄호는 print가 함수임을 나타냅니다. 함수는 [funcchap] 장에서 다룹니다.

이 책의 남은 부분에서는 print 문장을 사용합니다. 만약 파이썬 3을 사용하신다면 변환이 필요합니다. 그러나 이 부분을 제외한다면, 신경 쓸 부분은 몇 가지 드문 차이점들 뿐입니다.

디버깅

예제들을 직접 입력해볼 수 있도록 컴퓨터 앞에서 책을 읽으면 좋습니다. 대부분의 예제들은 대화형 모드에서 실행할 수 있습니다만, 코드를 스크립트에 저장하면 바꿔보기가 쉽습니다.

새 기능을 실험할 때마다, 꼭 실수를 저지르도록 하십시오. 예를 들어, “Hello, world!” 프로그램에서 따옴표 하나를 지우면 어떤 일이 일어나나요? 둘 다 지우면 어떻데 될까요? print의 철자를 틀리면 어떨까요?

이런 종류의 실험은 읽은 것들을 기억하도록 돕습니다. 또한 디버깅을 돕기도 하는데, 오류 메시지의 뜻을 익힐 수 있기 때문입니다. 지금 의도적으로 실수하는 것이, 나중에 예기치 못하게 하는 것보다 좋습니다.

프로그래밍은, 그리고 특별히 디버깅은, 때로 강한 감정을 불러일으킵니다. 어려운 버그와 싸우다 보면 화가 나고, 실망하며, 창피할 수 있습니다.

사람들이 다른 사람을 대하듯 컴퓨터에 반응한다는 증거가 있습니다. 일을 잘 할 때는 동료처럼 생각하고, 완고하고 무례할 때는 무례하고 완고한 사람들에게 하듯이 반응합니다. (Reeves and Nass, The Media Equation: How People Treat Computers, Television, and New Media Like Real People and Places).

이런 반응에 미리 준비하면 그 것들을 받아들이는데 도움이 될 수 있습니다. 한가지 접근 방법은 컴퓨터를, 속도나 정확성과 같이 특정한 종류의 장점을 갖고 있지만, 감정 이입을 못하고 큰 그림을 보지 못하는 것과 같은 특별한 단점들을 갖고 있는 피고용인이라고 생각하는 것입니다.

여러분의 업무는 좋은 관리자가 되어, 장점을 취하고 단점을 희석할 수 있는 방법을 찾는 것입니다. 그리고, 여러분의 반응이 효율적으로 일할 수 있는 능력을 방해하도록 허락하지 말고, 문제에 집중할 수 있도록 감정을 활용하는 방법을 찾으십시오.

디버깅하는 법을 배우는 것은 실망스러울 수 있습니다만, 프로그래밍을 벗어나 여러 활동에서 유용하게 사용될 수 있는 값진 기술입니다. 각 장의 끝에는, 지금 이 것과 같은, 디버깅에 관한 제 생각을 담은 절이 있습니다. 도움이 되기 바랍니다.

용어

문제해결 problem solving:
문제를 기술하고, 해결책을 찾고, 표현하는 과정.
고수준 언어 high-level language:
사람이 읽고 쓰기 쉽도록 설계된 파이썬과 같은 종류의 프로그래밍 언어.
저수준 언어 low-level language:
컴퓨터가 실행하기 좋도록 설계된 프로그래밍 언어. “기계어 machine language”나 “어셈블리어 assembly language”라고도 불린다.
이식성 portability:
프로그램의 속성 중 하나로, 여러 가지 종류의 컴퓨터에서 실행할 수 있는 성질을 뜻한다.
인터프리트 interpret:
한 번에 한 줄씩 번역하면서 고수준 언어로 작성된 프로그램을 실행하는 것.
컴파일 compile:
나중에 실행하기 위해, 고수준 언어로 씌어진 프로그램을 저수준 언어로 일괄 번역하는 것.
원시 코드 source code:
고수준 언어로 씌어진 프로그램의 컴파일 전 상태.
목적 코드 object code:
컴파일러가 프로그램을 번역한 결과로 만들어내는 것.
실행파일 executable:
실행할 준비가 된 목적 코드를 부르는 다른 이름.
프롬프트 prompt:
사용자의 입력을 받을 준비가 됐다는 뜻으로 인터프리터가 출력하는 문자들.
스크립트 script:
파일에 저장된 프로그램 (보통 인터프리터로 전달됨).
대화형 모드 interactive mode:
프롬프트에 명령과 표현식을 입력하는 방식으로 파이썬 인터프리터를 사용하는 방식.
스크립트 모드 script mode:
스크립트에 저장된 문장들을 읽고 실행하는 방식으로 파이썬 인터프리터를 사용하는 방식.
프로그램 program:
계산을 지시하는 명령들의 집합.
알고리즘 algorithm:
어떤 부류의 문제를 푸는 법을 제공하는 일반적인 절차.
버그 bug:
프로그램에 포함된 오류.
디버깅 debugging:
(세 종류 중 어떤 것이라도) 프로그래밍 오류를 찾고 제거하는 과정.
문법 syntax:
프로그램의 구조.
문법 오류 syntax error:
프로그램을 해석할 수 없도록 만드는 오류(따라서 인터프리트할 수 없다).
예외 exception:
프로그램이 실행 중일 때 감지되는 오류.
의미 semantics:
프로그램의 의미.
의미 오류 semantic error:
프로그램이 프로그래머가 의도한 일과는 다른 일을 하도록 만드는 오류.
자연어 natural language:
자연적으로 발생하여 사람들이 말하는데 사용하는 언어.
형식어 formal language:
수학적인 생각이나 컴퓨터 프로그램을 표현하는 것처럼, 사람들이 특정한 용도를 위해 설계한 모든 언어. 모든 프로그래밍 언어는 형식어다.
토큰 token:
프로그램의 문법 구조를 이루는 기본 요소들, 자연어의 단어에 대비된다.
해석 parse:
프로그램을 조사하여 문법 구조를 분석하는 작업.
print 문장 print statement:
파이썬 인터프리터가 화면에 값을 인쇄하도록 하는 지시.

연습

연습 1.2. 웹 브라우저로 파이썬 웹사이트 http://python.org를 방문해 보세요. 이 곳에서는 파이썬에 관한 정보와 파이썬 관련 페이지들로 가는 링크들을 제공할 뿐만 아니라, 파이썬 설명서를 검색할 수도 있습니다.

예를 들어, 검색 창에서 print를 입력하면, 첫 번째 링크는 print 문장에 대한 설명서입니다. 이 시점에서, 이 모든 것들이 여러분에게 필요하지는 않을 것입니다만, 어느 곳에 있는지 알아두는 것은 좋습니다.

연습 1.3. 파이썬 인터프리터를 실행하고 help()를 입력하여 온라인 도움말 도구를 시작시키세요. print 문장에 관한 정보를 얻으려면, help('print')를 입력할 수도 있습니다.

만약 이 예제가 잘 되지 않는다면, 파이썬 설명서들을 추가로 설치하거나 환경 변수들을 설정해야 할 수도 있습니다. 세부 사항은 운영체제나 파이썬의 버전에 따라 다릅니다.

연습 1.4. 파이썬 인터프리터를 시작 시키고 계산기처럼 사용해보세요. 수학 계산에 관한 파이썬의 문법은 표준 수학 기호와 거의 동일합니다. 예를 들어, +, -, / 기호들은, 예상과 마찬가지로, 각각 덧셈, 뺄셈, 나눗셈을 뜻합니다. 곱셈 기호는 입니다.

만약 10 킬로미터를 43분 30초 만에 달렸다면, 마일당 소요 시간은 어떻게 됩니까? 시간당 마일로 계산한 평균 속도는 어떻게 됩니까? (힌트: 1마일은 1.61 킬로미터입니다).