夏休み自由研究のためのPythonプログラミング講座

# イントロダクション
この投稿は「夏休みが残り10日になっても、まだ自由研究のテーマが決まらなくてどうしよう」と悩んでいる君のために、プログラミングが大好きな大人が趣味の一環で書いたものだ。
今の時点では、小学生なら4年生以上、中学生や高校生でも楽しみながらプログラミングを学べる内容にしたいと思っている。でも、コンピュータの基本的な扱い方に関しては説明を省略するから、その辺りについて困った時は、君の周りにいる「いつもキーボードとマウスを弄って暇潰しをしている人」を探して聞いてみよう。

この講座の内容に疑問や質問、困ってしまったことなどがあれば[市原こどもプログラミング教室のツイッター](https://twitter.com/startyourcode)まで気軽に報告してほしい。返信できるかどうかは約束できないけど。

###この講座で何を学べるのか？
プログラミングのことを知っていて「どんな種類があるのか？、どうやって始めるのか？、どんなふうに書くのか？、どうやって書いたものを実行するのか？何が面白いのか？算数や数学が嫌いな自分にも楽しめるのか？」という疑問に答えられるなら、この講座を体験する理由はない。

###用意するもの
この講座を体験しながら学ぶには、__Windows PC__あるいは__Mac__と呼ばれるコンピュータが必要だ。それも、できるだけ新しいものが望ましい。お父さんやお母さん、お兄さんやお姉さんでもいいから協力してもらおう。
もしかすると、学校からiPadやChromebookが与えられているかもしれないけど、この講座では使えない。でも、調べ物をする場合にはきっと役立つと思う。

###終わりまでにかかる時間
「少なくとも1時間以上」とだけ言っておこう。プログラミングの学習に終わりはない。もし、この講座を終えてプログラミングが楽しいと感じたなら、君はこれから先も死ぬまでプログラミングを学び続けることができるはずだから。


# プログラミングって？
プログラミングはもともと英語で`program-ing`（正確には、`programming`）と表記する。
つまり、「プログラムすること」を意味する言葉だ。なるほど、疑問が「プログラムって？」に変わっただけだ。
プログラムは、「手順や物事の順番」のことだ。
例えば、小学校で行われる運動会などにも「プログラム」は存在するね。運動会では「教員が作成したプログラム」に従って、生徒らがそれを実行する。プログラム通りに実行できれば、みんなはクタクタになり、お父さんとお母さんは君たちの成長に感動するはずだ。
でも、この講座で学ぶのは、コンピュータ上で実行される__コンピュータ・プログラミング__だ。一般的に、プログラミングといえば、コンピュータ・プログラムを作ることだ思って差し支えないだろう。
そして、コンピュータを正しく動作させるために命令を記述する人のことを__プログラマー__と呼ぶ。

###プログラミング言語とコンパイラ
コンピュータへの命令は、プログラミング言語で記述しなくちゃいけない。ただし、コンピュータは機械なので、機械語しか理解できない。機械語とは、0と1だけで構成されるデジタルな情報そのものだ。プログラマーである人間は日頃、英語や日本語などの人間語（自然言語）を話すけど、機械語は読むことも話すこともできないね。
プログラミング言語は、人間語と機械語を橋渡しする中間的な存在だ。__コンパイラ__によって、プログラミング言語は機械語に翻訳される。つまり、プログラムを実行するにはコンパイラが必要なんだ。

###Python
プログラミング言語は、いろんな種類がある。それぞれの言語には得意・不得意な分野がある。また、時代と分野において、流行り・廃りもある。2, 30年ほど以前は、CやJavaと呼ばれるプログラミング言語が流行だった。ここ数年にわたって、Pythonというプログラミング言語が流行している。Pythonが流行している理由は、人工知能を開発するために便利な機能がたくさん用意されているからだ。
今回の講座で学ぶのは、そのPythonだ。
公式のWebサイトで、Pythonの最新版をチェックしてみよう。
https://www.python.org/downloads/

![スクリーンショット 2021-08-18 17.18.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70476/66f96785-499c-7e11-23b4-7234e76c74f8.png)

今日（2021年の8月下旬）において、Pythonは`3.9.6`が最新バージョンということを確認できた。

#実行環境を構築する
前書きが長ったらしくなってしまったけど、ここからいよいよ手を動かしていく。
運動会の場合、プログラムを実行するためには「グラウンドと生徒たち」が必要だ。プログラムがあっても、広いグラウンドがなければ競技できない。グラウンドがあっても、生徒たちがいなければ同じことだ。コンピュータ・プログラミングも同じで、プログラムとコンピュータがあっても、それを実行する「生徒たちのような存在」が必要なんだ。
まずは、ターミナルの説明から始めることにしよう。

###ターミナル
ターミナルは「コンピュータの素顔」だ。その一方で普段、我々が利用しているコンピュータのデスクトップ画面や「ファイルやアプリのアイコン」は、見栄えや操作性を向上させるために仕立てたお面のようなものと言える。最新のMacには、zsh（ゼッシュ、ゼットシェル）と呼ばれるターミナルが組み込まれている。Windows PCのターミナルは、昔からコマンドプロンプトと呼ばれている。

ターミナルは秘密の司令塔のようなもので、さまざまな命令を実行してコンピュータを直接操作できる。だから、命令文を書いて操作するターミナルはCLI（Command Line Interface）、ボタンやアイコンをクリックして操作する画面はGUI（Graphical User Interface）と呼んで区別することもある。
コンピュータが発明されたばかりの頃はCLIしかなかったので、初心者には操作が難しかったんだ。でも、GUIのおかげ誰でも（比較的）簡単にコンピュータを利用できるようになった。

それじゃあ、ターミナルを使って「自分のコンピュータで最新のPythonが実行できるか」確認してみよう。
Macのターミナルは、通常のアプリケーションと同じように起動できる。見つからない場合はスポットライト機能（commandキー + spaceキー）を使って検索してみるといい。PCの場合は、コマンドプロンプトだったね。
起動した直後のターミナルはこんな感じだと思う。

![スクリーンショット 2021-08-18 17.10.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70476/101b84f5-7135-9625-a2aa-dc8036d4a09a.png)

点滅するカーソルは「ここに命令を書いてください」と主張しているけど、他にも英語でいろんなことが書いてあるね。でも、今は全く気にしなくていい。
大文字と小文字、空白スペースの位置に注意して、次のように書いてみよう。

```zsh:ターミナル
python3 --version
```

:::note alert
ターミナルに命令を書くときは、必ず半角文字で入力すること。
:::

命令を正確に入力できたら、returnキーを押して実行する。すると、こんな実行結果が表示されるかもしれない。

![スクリーンショット 2021-08-18 17.17.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70476/846404fc-e294-854c-e25a-fc4754c8bd37.png)

`Python 3.9.6`と表示されていることから、このコンピュータには最新版のPythonが組み込まれていることがわかる。

結果が最新版と一致しなかった場合、以下の状況が考えられる。

1. コンピュータに組み込まれているPythonが古い
2. コンピュータにPythonが組み込まれていない
3. 入力した命令文が間違っている

1か2の場合は、冒頭で紹介した[PythonのWebサイト](https://www.python.org/downloads/)から最新版をダウンロードして、コンピュータにインストールしよう。その後、もう一度ターミナルでPythonのバージョンを確認しておこう。

#Pythonのコードを実行してみる
これで準備は整った。「コンピュータという広いグラウンド」と「プログラムを実行してくれるPython」を用意できたということだ。
あとは君たちが、Python向けに__コード__を書いてあげるだけだ。
コードは、プログラムを構成する命令の単位のこと。素敵な物語を構成する「1行の文」といってもいい。

まずは、ターミナルを「Pythonモード」にする必要がある。
`python3`と入力してreturnキーを押すと、Pythonコードの実行環境を起動できる。

![スクリーンショット 2021-08-18 17.41.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70476/d1113540-4d0f-9f16-0b27-4e3880c37682.png)

ズラズラっとした表記の後に注目しよう。
入力カーソルの待機状態が`>>>`となって、先ほどとは変化しているのがわかるはずだ。
これは、ターミナルコマンドではなく、Pythonコードの入力を実行できる状態になった証拠だ。

とりあえず、簡単な計算として`1+1`を実行してみよう。

```zsh:ターミナル
>>> 1+1
2
```

ターミナルで実行したPythonコードの結果は、すぐした行に表示されることがわかるはずだ。
引き算や掛け算、割り算も実行してみよう。

```zsh:ターミナル
>>> 2-2
0
>>> 3*3
9
>>> 9/2
4.5
```

もしかすると、「Pythonプログラミングって、電卓と対して変わらないジャン」と思ったかもしれない。そう思った君は鋭いし、騙されにくく警戒心が強い性格かもしれない。では、もう少しだけ「プログラミングっぽいコード」を書いてみよう。

### 値に名前をつけて呼び出す
プログラミングの基本は「名前をつけて呼び出す」ことだ。とにかく、なんでもかんでも名前をつけては、呼び出しまくる。

ここでは「円の面積」を計算することにしよう。その公式は「半径x半径x円周率」だね。円の面積を計算するために必要な円周率を知っているかな？円周率は`3.141592...`と永遠に続く数だ。ちょうど先日、[スイスの研究チームが62兆8000億桁まで算出することに成功した](https://www.afpbb.com/articles/-/3361996)そうだ。
でも、実際にその数を使うと計算が大変なことになってしまうので、円周率（およそ`3.14`）はπ（パイ）という記号で示すことが多い。つまり、`3.14`という値にパイという名前をつけるということだ。

これは、Pythonコードで以下のように記述できる。

```zsh:ターミナル
>>> pi = 3.14
```

プログラミングの世界では、イコール記号`=`を使って値に名前をつけることが多いんだ。算数で使うイコール記号`=`とは全く異なる役割を果たすから注意しよう。

:::note info
プログラミングの世界では、このイコール記号`=`のことを代入演算子と呼ぶんだ。代入演算子の前後に空白スペースを入れておくと、コードがスッキリして読みやすくなる。
:::

名前をつけたら呼び出さずにはいられないのがプログラマーだ。さっそく、`pi`を呼び出してみよう。`pi`と入力して実行すると、Pythonは`3.14`という数を返してくれる。

```zsh:ターミナル
>>> pi
3.14
```

いい感じだ。続けて、円の半径を示す数にも名前をつけてみよう。
半径は英語でradiusと書くね。ここはひとつ、頭文字を取って`r`という名前にすることとしよう。

```zsh:ターミナル
>>> r = 2
>>> r
2
```

半径の大きさは適当に`2`にしてみた。`r`を呼び出すと、その数値が返ってくるはずだ。

:::note info
このように具体的な値に対してつけた名前のことを変数というんだ。いま、君はふたつの変数`pi`と`r`を定義したんだよ！すごい！
:::

円の面積を計算するために必要な変数は揃った。Pythonコードを記述して計算してみよう。
わかっていると思うけど、公式通りに変数を並べて掛け算するだけだ。

```zsh:ターミナル
>>> r * r * pi
28.26
```

勘が鋭く、警戒心が強い君は「別に変数を使わなくたって、`2*2*3.14`と書けばいいジャン」と思ったかもしれない。確かに。でも、値に名前をつけて呼び出すとすごく良いことがあるんだ。
`2 * 2 * 3.14`という計算式をみると、「`2`を2倍して、さらに3.14倍する」ことしか伝わらない。だけど、`r * r * pi`というコード式なら「半径x半径x円周率ってことは、円の面積を計算している」ことが読み取れるだろう。プログラミングの世界では、コードを書いた本人以外のに人たちに「何をしたいのか」を伝えることが大切なのだ。

それではここらで一旦、Pythonプログラミングを終了することにしよう。
`exit()`を実行すると、ターミナルは「Pythonモードを終了」して再びターミナルコマンドを受け付けるようになる。

```zsh:ターミナル
>>> exit()
```

トイレに行って手を洗った後、アイスクリームでも食べてくるといい🍦

#テキストファイルに書いたPythonコードを実行する

ターミナルでコードを実行することは、いくつかの難点がある。

- プログラムが1行ずつ実行されるので、コードを記述し辛い
- 書き間違えたコードは、遡って修正できない

実行したいコードをテキストファイルに記述すれば、これらの問題を解決できる。

###ディレクトリを作成する

まずは、準備から始めよう。ターミナルを使って「書類フォルダにHelloディレクトリを作成」する。「ディレクトリ」とは、コンピュータ上におけるデータの場所を示す名前のこと。実際のところ、フォルダと同じ意味と思って構わない。

この操作をGUI上で行う様子を想像してみよう。書類フォルダを開いて、そこに「Helloという名前のフォルダ」を新規作成するはずだ。
ターミナルからこれと同じ操作を行う場合も同様に、まずは「操作対象となる書類ディレクトリ」に移動する必要がある。

ターミナルを起動して、現在のディレクトリを確認してみよう。
`pwd`（print working directory）というコマンドを実行しよう。

```zsh:ターミナル
pwd
```

結果は`Users/xxx`と表示されたはずだ。（`xxx`は、コンピュータのユーザ名と置き換えて読んでね）
これが、現在の操作対象となるディレクトリだ。MacのFinderアプリを開いた時に表示される新規ウィンドウと同じ場所だ。
信じられないなら、`ls`コマンドを実行してみよう。（コマンドプロンプトの場合、`cd`）
現在のディレクトリに含まれるディレクトリのリストを確認することができる。

```zsh:ターミナル
ls
```

英語表記ではあるものの、Finderアプリの新規ウィンドウと同じ内容になっているはずだ。

そのまま、ターミナルを使って書類フォルダにHelloフォルダを作成しよう。
まずは、Documentsディレクトリに移動するために、`cd`（change directory）コマンドを入力する。半角スペースを開けた後に、移動先となるディレクトリ名を記述してから実行しよう。

```zsh:ターミナル
cd Documents
```

これで現在の作業ディレクトリを移動することができた。嘘だと思うなら、`pwd`コマンドで確認したっていい。

```zsh:ターミナル
pwd
```

実行結果は`Users/xxx/Documents`になっているはずだ。
ここにHelloフォルダを作成する。ディレクトリを作成するには`mkdir`コマンドを使う。
`mkdir`コマンドの後に半角スペースを空けた後、フォルダ名の`Hello`を記述してから実行しよう。

```zsh:ターミナル
mkdir Hello
```

忘れないうちに、作成したHelloディレクトリに移動しておこう。

```zsh:ターミナル
cd Hello
```

Finderから確認すると、書類の中にHelloフォルダが作成されているはずだ。
この後、Helloフォルダの中に`my_first_code`という名前のテキストファイルを作成する。

###テキストファイルにPythonコードを記述する

テキストファイルにコードを記述するために、Macに標準インストールされている「テキストエディット」アプリを起動しよう。（Windowsの場合は、「メモ帳」アプリだったかな）

:::note warn
ここで、注意しておくことがひとつある。テキストファイルにはリッチテキストと標準テキストの2種類があるということだ。リッチテキストには文字以外の余計な情報がファイルに含まれてしまうので、テキストがPythonコードとして正しく認識されないことがある。以下の手順に従って、テキストエディットアプリのファイルが標準テキストとして保存されるように設定しておこう。

1. メニューバー > 環境設定 > 新規書類タブ > 「標準テキスト」をチェックする
2. メニューバー > 環境設定 > 開く保存タブ > 「標準テキストファイルに拡張子txtを追加」をチェックする
:::


テキストファイルに「半径が2である円の円周を計算するpythonプログラム」を書いてみよう。

```Python:my_first_code.txt
pi = 3.14
r = 2
circumference = (r + r) * pi
```

Helloフォルダの中に`.txt`形式で保存しよう。
そして、以下の通りにコマンドを入力して、ターミナルからこのテキストファイルを実行する。

```zsh:ターミナル
python3 my_first_code.txt
```

ところが、実行しても、何も起こらない。
ファイルに書かれたプログラムの結果を知るには、Pythonの`print`機能を呼び出すといい。

```Python:my_first_code.txt
pi = 3.14
r = 2
circumference = (r + r) * pi
print(circumference)	# 追記
```

上のコードに書いてある`# 保存`の部分は__コメント__だ。コメントはプログラムに含めることができる「覚え書き」のようなもので、Pythonの場合はシャープ記号`#`を使って記すことができる。
ファイルを保存して、再度実行しよう。

```zsh:ターミナル
python3 my_first_code.txt
```

`my_first_code.txt`のコードを編集すれば、いろんな計算ができそうな気がしてきたんじゃないかな。まだ終わっていない計算ドリルも、Pythonコードを上手に書けば一瞬で計算してくれるに違いない。数学の教科書にある問題だって、コード式として表現できれば左うちわというやつだ。

この講座はここで終わりだけど、まだPythonプログラミングの世界に一歩踏み入っただけだし、序の口もいいところだ。それでも、君がプログラミングの世界に入ったことに違いはない。これは本当にすごいことだ。慌てず一歩ずつ、つまづいたり転んだりしながら、歩き出した赤ちゃんのように進んでいけば、きっと将来、君の人生に役立つ大きな力になってくれるだろう。そして、計算ドリルをもっと簡単に終わらせる方法もわかるはずだ。

感想や要望などがあれば、[市原こどもプログラミング教室のツイッター](https://twitter.com/startyourcode)まで報告してくれると嬉しい。この講座をどんどんわかりやすくしていきたいと思っている。
それから、最後までこの投稿を読んでくれて、本当にありがとう。

#調べてみよう
Pythonの他にはどんなプログラミング言語があるだろう？
それらのプログラミング言語は、誰が作ったのだろう？
それらのプログラミング言語の得意なことはなんだろう？
それらのプログラミング言語を古い順に並べてみよう

# Amazon Kindle Book
こちらの投稿を加筆・修正したものを[Amazon Kindle本としてリリース](https://www.amazon.co.jp/s?i=digital-text&rh=p_27%3A新井進鎬&s=relevancerank&text=新井進鎬&ref=dp_byline_sr_ebooks_1)しました。
スマートフォンでも読みやすいリフロー版、固定レイアウトのプリントレプリカ版はともに同じ内容ですが、Visual Studio CodeでPythonコーディングを行う方法を解説する章を追加しました。
今後も定期的に改訂・増補していく予定なので、よろしくお願いします。