新しくプログラミング言語を学ぶ方法はいろいろある。全くプログラミング言語の経験がなければ、入門書を買ってきて最初から読みながら試していくのがよいかもしれないし、それこそプログラミングのコースを受講したほうがよいかもしれない。すでに1つ以上のプログラミング言語を習得しているのなら、違いを探しながら学んでいくほうが早いケースもある。
人によっては言語仕様を読んだり、インタプリタのコードを眺めたりしたほうが理解が早いということもあるだろう。実際に使われているPythonのソースコードを読むことで、全体像を理解していくというのも1つの方法だ。
どのやり方が良いのかは人によるのだが、今回は「ちょっとしたソースコードを書いたり、コマンドを実行したりといったことはできる」というレベルの方を想定して、チュートリアルを読んでいく方法を取り上げようと思う。
チュートリアルで学ぶ
ドキュメントが整っているプログラミング言語では、多くの場合でチュートリアルと呼ばれる、またはそれに分類される文章が用意されている。チュートリアルはそのプログラミング言語をざっと理解するために用意されたドキュメントで、読みながら試していくことである程度の基礎が身に付くというものだ。
Pythonにもそうしたドキュメントが用意されている。代表的なものとしては「The Python Tutorial」が挙げられるだろう。
基本的にはこのドキュメントを読みながら、掲載されているサンプルコードを実行して勉強していけばよい。ただし、最初からじっくり読む方法は、「技術文章を頭から読んで、すぐに理解できる」ようなある程度の”訓練”された方以外には、あまりお薦めできない。途中で疲れてきて読むのをやめてしまうと思う。
筆者のお薦めは、まずはあえてあまり説明を読まずに、とりあえずサンプルコードを最初から最後まで実行しながらPythonの動きをざっと把握する方法だ。その上で、このプログラミング言語が気に入ったのなら、チュートリアルをもう一度最初から追ってみてほしい。今度はもうちょっとしっかり説明も読み込んでみよう。初めはよくわからなかった部分が、何となくわかるようになっているんじゃないかと思う。
最初からガチガチに読み込まず、まずはざっと流して読む。サンプルコードを実行することを優先して、最初は説明は読み飛ばしてもよいと思う。嫌にならずに、まずは使えるようになること、これが大切だ。
Pythonのチュートリアルには日本語訳が用意されているので、「英語は苦手」という方は日本語のチュートリアルで試してみればよい。ただ、プログラミング言語系の情報は英語で提供されていることが多いので、長期的なことも考えるなら、たまには頑張って英語のドキュメントも読むようにしたほうが、最終的には仕事が楽になることが増えるんじゃないかとは思う。「習うより慣れろ」だ。
インデント
基本的には先ほど紹介したチュートリアルを実行しながら、使い方を覚えていけばよい。ここではチュートリアルのサンプルコードを取り上げ、押さえるポイントを紹介していこうと思う。チュートリアルの読み方は何回かに分けて取り上げるので、無理のない範囲でついてきていただきたい。
まず、シェルからpython3と実行してPython 3の実行環境を起動する。次のように「>>>」という文字列が表示されるのだが、これがプロンプトだ。ここにPython3のコードを入力していく。
daichi@ubuntu1804:~$ python3
Python 3.6.6 (default, Sep 12 2018, 18:26:19)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> ← ここにPythonコードを入力していく
Pythonのチュートリアルには、次のように論理値を変数に代入して、それをif制御構文で判定してから「print()」を呼ぶという処理が掲載されている。
>>> the_world_is_flat = True
>>> if the_world_is_flat:
... print("Be careful not to fall off!") ← インデントなしでコピペ
File "<stdin>", line 2
print("Be careful not to fall off!")
^
IndentationError: expected an indented block ← インデントしてないのでエラー
>>> the_world_is_flat = True
>>> if the_world_is_flat:
... print("Be careful not to fall off!") ← 空白4個のインデント
...
Be careful not to fall off!
>>> if the_world_is_flat:
... print("Be careful not to fall off!") ← 空白1個のインデント
...
Be careful not to fall off!
>>> if the_world_is_flat:
... print("Be careful not to fall off!") ← 空白2個のインデント
...
Be careful not to fall off!
>>> if the_world_is_flat:
... print("Be careful not to fall off!") ← タブ1つのインデント
...
Be careful not to fall off!
>>>
このサンプルはとても面白い。上記のコードは、あえて間違えた入力を行っているのだ。「if」の次の行をインデントなしでコピー&ペーストしたわけだが、これはエラーになる。Pythonでは、インデントは強制だ。C言語のようにインデントを使わなくてもエラーにならない言語と違い、Pythonではインデントを書かないとエラーになるのである。
インデントの「深さ」や「数」には自由度がある。上記の実行例では、インデントの深さを変えながら実行を行っており、それぞれ動作することがわかるだろう。
コメント
Pythonでは次のように「#」がコメントの開始を意味する。コマンドは、行頭でも行の途中でもかまわない。
>>> # this is the first comment
... spam = 1 # and this is the second comment
>>> # ... and now a third!
... text = "# This is not a comment because it's inside quotes."
>>>
ただし、文脈的にダブルクォーテーションで囲まれていて文字列として解釈される場合には、コメントの開始文字としては機能しない。このあたりはサンプルを見れば何となくおわかりいただけるだろう。
数字の基本演算
どのプログラミング言語もそうだが、数値演算目的のインタプリタとしてもPythonを使うことができる。チュートリアルには、次のような数値演算のサンプルが掲載されている。
>>> 2 + 2
4
>>> 50 - 5*6
20
>>> (50 - 5*6) / 4
5.0
>>> 8 / 5 # division always returns a floating point number
1.6
>>> 17 / 3 # classic division returns a float
5.666666666666667
>>> 17 // 3 # floor division discards the fractional part
5
>>> 17 % 3 # the % operator returns the remainder of the division
2
>>> 5 * 3 + 2 # result * divisor + remainder
17
>>> 5 ** 2 # 5 squared
25
>>> 2 ** 7 # 2 to the power of 7
128
>>> width = 20
>>> height = 5 * 9
>>> width * height
900
>>> n # try to access an undefined variable
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined
>>> 4 * 3.75 - 1
14.0
>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06
>>>
説明が欲しいのは「//」と「%」、それに「**」といったところだろうか。「//」はフロア除算(切り捨て除算、打ち切り除算)とされており、除算後の小数点以下を切り捨てた結果を得る演算となっている。「%」は剰余演算(モジュロ演算)を指しており、割り算の余りを計算する演算、「**」はべき演算で、「**」の前の数値が底、「**」のあとの数値がべき指数となっている。
また、変数として「_」という文字が使われているが、これはインタラクティブモードだと直近の式が代入されている。Pythonを電卓代わりに使うときは、この変数を使うと「ちょっと便利」ということだ。
こんな感じで、チュートリアルに掲載されているサンプルコードをコピー&ペーストし、実際に実行しながらPythonを学んでいくのが最初のステップとしては良いのではないかと思う。むしろ説明は一切読まないで、とりあえずサンプルコードのコピペだけを実践していってもよいだろう。
チュートリアルで楽しく学ぼう
チュートリアルを読みながら学んでいくときに重要なのは、何と言っても「楽しむ」ことだ。新しい経験を得る喜びや、「実施に目の前で動く」という楽しさを感じながら作業を行うことがポイントとなる。
逆に、最初から全部覚えてやろうと意気込んで取り組むと、途中で疲れて放棄するか、結局頭に入らないまま終わる可能性がある。チュートリアルを頭から読んで理解することに慣れていない方は、まずはサンプルで「動く楽しさ」を感じながらひととおり試していただきたい。自分で実際に手を動かして使ってみると、結構身に付いたような気分にもなる。そんな”ちょっとした自信”を積み重ねていくことが、技術を身に付けていく上で重要なポイントなのだ。