Introduction

Why Python?

菊池研究室は,メインで教えるプログラムは python です.

この言語は (大体は) オブジェクト指向プログラミング言語で, かつ,高水準言語です. だたし実用面に特化し,便利なものは何でも使うところがあるので, アカデミックな意味での定義付けはしにくいです.

この言語の(というよりもこの言語のコミュニティの)特徴は, PEP と呼ばれる種々規約をが存在する点にあると思います. つまり,速さや上手さより,読み易さ,美しさを重視する側面があり, 筆者はそれをとても気に入っています.

python は現在(でも)色々なサービスに利用されている言語です.

実例を挙げるなら,以下のサービスは python で書かれていることで有名です(AGFA の内,A 以外というのが面白いです).

  • google
  • mozila
  • facebook
  • instagram
  • dropbox

python という言語に関して,とくに dropbox の開発者が 2013 年に, 面白いことを言っていたので少し紹介します.

C makes me feel competent (C を使っているときには全能感を感じる)
Haskell makes me feel smart (Haskell を使っているときには 天才じゃないかと思える)
Python makes me feel good (しかし python が丁度いい)

これは python という言語を使える人間の感想をうまく表していると思います. おそらくは,このチュートリアルのみでは, この丁度よさを感じてもらうことは難しいと思うのですが, 皆様は卒業をする頃には,雑談をするような気軽さで(雑談が気軽かどうかは置いておき), Python を使えるようになるとうれしいなと思います.

What is programming?

ではプログラミングとは何でしょうか?

哲学的な問いにも見えますが, ここは行動学的に考えて見ましょう.

プログラミングとは結局, スクリプトを書いて,実行することです. 結局はそれだけ.

別の言い方をするのなら, 台本を書いて,演じて貰うんです.

もう少し,細かく書くとこの作業は以下の手順が必要です.

  1. 筆箱を開く
  2. 鉛筆を出す
  3. 鉛筆で書く
  4. 役者に渡す

これを今からやってもらいます. そのために必要な道具は,3 つです.

筆箱と鉛筆と,それから役者です.

皆様は,Mac をお使いだと思いますから, この 3つ は既に用意済みです.

警告

ただし,Mac に最初から用意されている道具は基本的に安物ですし, ちょっと古くさすぎる気がします.

本当はもっと便利な道具はいっぱいありますが, それは,その内,機会があれば教えます.

  • 別途環境設定用ページを記述するのでそちらを利用してください.

では早速,台本を書いて,演じてもらいましょう.

筆箱を開く

まずは筆箱を開きましょう. これは, Finder > アプリケーション > ユーティリティ > ターミナル で開けます.

ターミナルと呼ばれる筆箱は, 言ってみれば,ドラえもんの四次元ポケットみたいなものです. ここから,貴方のPCで使える全てのものを取り出すことができます.

そう,なんでもできるのです (筆者は,ターミナルと chrome 以外のアプリケーションを開くことは滅多にありません).

鉛筆も取り出せますし,役者も取り出すことができます.

鉛筆を用意する

では,ターミナルから鉛筆を取り出してみましょう. 今回使用する鉛筆の名前は vim といいます.

取り出し方は簡単です. ただ,ターミナルに vim と入力してください.

注釈

emacs 派の方はどうぞそれで. 戦争をする気はありません.

台本を書く

では台本を書いてみましょう. ここでは,プログラムは,こうやって使うのだということを 試してみるだけなので,以下の内容をそのまま写していいですよ.

hello.py
print("hello world")

書けましたか? 多分書けないと思います(書けたかたは偉い).

初めて文字を書くときには,鉛筆の持ち方を練習するように vim も,使い方を練習しないといけません.

注釈

考えてみればモノを書くって面白いですよね. まずは道具を練習し,文字を覚えて,文にする.

その内,文は書けるようになるのだけれど, そこから相手にうまく伝わる文章を書こうと思うと, 長い練習が必要になる.

その意味ではやっぱり,プログラミングって, "国語" の世界なのですよ.

vim という鉛筆はキャップ付きです (ボールペンみたいなものと思ってくれてもいいです).

最初はキャップがついたままなので,書けません. キャップを外すには i を押します で書き終わったら ctrl + [ もしくは etc です. これでもう一度,キャップが付きます.

なんで,キャップがついているのかといいますと, そっちの方が色々できるからです. 例えば,キャップをつけた状態(これのことをノーマルモードといいます)で, / を押すと検索ができたり, x を押すと削除ができたりします.

これは本当に多機能で dd を押すと一行まるまるを消せたり, u を押すと作業を元に戻せたりします.

注釈

vim に関しては,それだけで, 筆者的には一ヶ月以上は話続けることができる自信があるのですが, 説明はこの程度にしておきましょう.

代わりにオススメの書籍を二冊紹介しておきます. どちらも菊池先生におねだりすればきっと,購入してくれます.

なお,どちらがより役にたつかと言われれば, 間違いなく前者です.

さて,そろそろ書けたでしょうか? 書けたかたは,これを紙に印刷する必要があります.

そのためには,ノーマルモードにして, :w ./hello.py と入力してください. で,一旦 vim を筆箱にしまいます. これは :q と入力します.

  • もう一度,スクリプトを開くには vim ./hello.py とすればよいですよ.

役者に渡す

では最後に台本を役者に渡します. ここで,台本の名前は ./hello.py です. それを python という名前の役者に渡せばよいのです.

$ python ./hello.py
hello

警告

先頭の $ は書いてはいけません.

  • これは,ターミナルで実行してくださいという意味です.
  • $ の無い部分は出力です.
わーすげー.かっこいい(棒読み)
うん,わかっている.
すぐに本当にかっこいい例が出てくるから,今はちょっと我慢してね.

- すごい Haskell たのしく学ぼう より抜粋

感動してくれたかどうかは別にして, プログラミングとはどういうものなのかは分かっていただけたと思います.

ただ,やりたいことを書いて,それを役者に渡すだけなのですよ.

役者と話す

先程,最後に と書きましたがあれはウソです.

しっかりとしたやり取りをする場合には, 上記のように,一度文章を書いてあげる必要がありますが, 実は,役者と直接話をすることもできます.

まずは,ターミナルから,python を呼び出します. 機嫌がいい時には(基本,いつも機嫌がよいはずなのですが), 以下のような表示になります.

$ python
Python 2.7.15 (default, Oct 15 2018, 15:26:09)
[GCC 8.2.1 20180801 (Red Hat 8.2.1-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

警告

version はきちんと確認をしてください.

ヘビが大きくなっていませんか? つまり, ANACONDA とか書いていませんか? なっている場合今は良いですが後で困るかもです

上記のようになれば,python が話を聞いてくれます.

>>> 3 + 1
4
>>> 6 - 1
5
>>> 3 * 1
3
>>> 21 / 3
7

結構色々なことができます.

>>> len("this is a pen".split())            # 単語数を数える簡単な例
4
>>> "".join([x for x in reversed("rats")])  # ねずみを星に
'star'

ちょっとこむずかしい例を書きます. どんな結果になるのか少し考えてみてください.

>>> # 星と言えばクリスマス
>>> def mk_tree(n):
>>>     for i in range(n):
>>>         print(' ' * (n - (i + 1)) + '+' * (2 * i + 1))
>>>     for i in range(n - 2):
>>>         print(' ' * (n - 2) + '|' + ' ' + '|' + ' ' * (n - 2))
>>> mk_tree(5)
>>> # クリスマスに隠された本当の意味とは
>>> import itertools
>>> words = "christmas"
>>> ["".join(x) for x in itertools.permutations(words, len(words))]
  • ちょっと最後のはわかりずらかったかも
    • これは christmas という単語の並び換えをすべて表示している例で trims cash (現金をすり減らすという文が含まれています)
    • なお,パスワードの突破などによく使います.

まとめ

このページでは python に関しての一寸した自慢から始まります. これは皆様がこれから学ぶものが,なんだかスゴイものであると思って貰うことが 主目的です(だって折角やるならスゴイものの方がいいじゃないですか).

で,プログラミングとは何かという話をしました. ここの本質はプログラミングを行うための手順を理解して貰うことが目的です. コミニュケーションの基本としてまずは python に挨拶をし, それから,簡単な実例を数点示しました. そうそう,実は python と直接やり取りができることも示したのでした.

実は,この実習で試していきたいことの殆どは,上の例で示されています. そのため,今後の座学では,上の例でやっていたことを理解することが主な目的になるでしょう.

課題

これは実習中にやる必要はありません. もっと言えばそもそもやる必要はありません(義務教育じゃないのです).

ただし,実際にやってみて見せたい方は筆者まで連絡をください. あるいはやろうとして躓いていたら,連絡をくれたら対応します.

課題1

例題中,"単語数を数える簡単な例" は英語にしか使えません. これを日本語の文章数を数える簡単な例に変えてみてください.

課題2

例題中,"ねずみを星に" の例があります. 似たようなものとして,回文という文をご存知でしょうか(前から読んでも後ろから読ん でも同じ文になるやつです).

その例題を探し,実際に python 上で検証してみてください. もし, "星と言えばクリスマス" の例を上手く使い関数化することができれば, そうしてください.その場合には True or False で結果を返すことができるとよいですね.

課題3

"星と言えばクリスマス" の例では単純に, 木を表示するだけでした.

これをよりクリスマスツリーに近づけるために 飾り付けをしましょう.

まずは,木のなかの内 偶数カ所に関しては O に変えてみましょう. また,木の一番上は "☆"にして見ましょう.

課題4

"クリスマスに隠された本当の意味とは" の例では, import itertools を行い, python でできることを増やしました.

同じように import sys とすると 以下のようなことができます.

args.py
import sys
args = sys.argv
print(args)
$ python args.py 1
1
$ python args.py 2
2

これをうまく使って,好きな大きさのクリスマスツリーを書く python スクリプトを作成してみてください.