動かしながら学ぶPython入門~その１：ソースファイル作成から画面に表示まで~

# はじめに

筆者は、仕事の都合もあって独学でPythonを勉強してきた。
自分の復習も兼ねつつ、「Pythonくらい使えるようになりたいんだよね」みたいな同僚もチラホラいるので、布教活動しやすくするために入門書替わりの記事を書いてみる。

タイトルに`【コラム】`とついているセクションは、動作や書式に直接の関係はありません。
なので、ちゃっちゃと動かしてみたい人は読み飛ばしても問題ありません。
もちろん、せっかく書いたので読んでもらえたほうが嬉しいです。

## 対象
- `Python`の初歩中の初歩を学習したい人

## 執筆時の環境

- OS: Windows10
- Python: 3.7.3
- エディタ：VSCode

## 本文中の用語

| 用語 | 概略 |
|:--|:--|
|ターミナル|コマンドでコンピュータに命令を出すインターフェース<br>Windowsだと"コマンドプロンプト"や"PowerShell"が標準|
|Pythonインタプリタ|Pythonのソースコードの解釈と実行を行うアプリケーション<br>詳しくは[コラム][インタプリタとは]を参照|
|ソースファイル|アプリケーションの元となる、プログラム言語の決まった書式で書かれたファイル|
|パス|ファイルやディレクトリ(フォルダ)のコンピュータ上の場所を表す文字列|
|テキストエディタ|テキストファイルを編集するアプリケーション|

# Pythonを導入する

そもそもPythonの環境すら持ってない人は、まずインストールとセットアップをする。
拙著だが、[筆者が書いた記事](https://qiita.com/kira4845/items/cc6fcd1de2e7729595ac)もあるので、参考にセットアップする。

# Pythonを実行する

## 対話モードで実行

対話モードは、ユーザがターミナルにて直接命令を入力し、その応答をユーザが確認しながら処理を進めていくモード。
![対話モードイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/b47925d0-184e-87c4-f97f-741494373a84.png)

Pythonをインストールしたときに、`Add Python3.x to PATH`(xはバージョン番号)にチェックしていればパスが通っているはずなので、`Windowsキー`+`r`で"ファイル名を指定して実行"を開いて、`python`と入力して`Enter`で起動する。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/76e9f119-8126-2249-c4ae-1c126f4de326.gif width=700>
もし、起動しなかったらパスの設定が誤っている可能性がある。手で修正するか、よくわからないようであれば、一度アンインストールして`Add Python3.x to PATH`のチェックを入れて再インストールするといい。(今後ゴリゴリと使っていくようなら、PATHの設定くらいは覚えておいたほうがいいかも…)

また、ターミナルから`python`と実行しても起動できる。
この方法の場合は、別ウィンドウは立ち上がらず、ターミナルの画面がそのままPythonインタプリタへのインターフェースになる。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/e18158c8-b957-c1e5-9e27-a1edd4542c0b.gif width=700>
簡易的な実行ではあるが、日常業務でちょっと計算するときに"高機能な**電卓として**"使えて便利だったり、"ソースコードを書いていて**書式や仕様をど忘れしたときに、実際に入力して確認**してみる"という使い方ができるので、割と重宝する。

## ソースファイルから実行

命令をソースコードとして記述したファイルを用意して、ファイルの内容を一括で実行するモード。
プログラミング自体の実務としてはこのモードでの使用がメイン。
![ファイルから実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/a68e1eb0-e201-dab0-78b7-797af5428527.png)
Pythonのソースファイルは`.py`の拡張子で表され、デフォルトではPythonインタプリタに紐づいているので、ファイルのダブルクリックでも起動する。

ただし、ダブルクリックで起動すると、ソース内に明示的に停止処理を書いていない限り、スクリプトの実行が終わると画面ごと終了するので、**軽い処理だと画面表示が確認できない**。(よく見ると、一瞬だけウィンドウが立ち上がっているのが見えるはず）
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/bbdf0f05-e6bc-30d2-46b0-811a94f03415.gif width=600>
そのため、次のようにターミナルから起動することで、Pythonインタプリタが終了しても画面は終了しないようにして実行することが多い。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/4be1f067-5502-7fcf-b95d-d6dd428a1581.gif width=600>
`.py`ファイルの実行アプリを変更している(エディタに紐づけてるなど)場合は、`python ファイル名.py`として実行する。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/1a1a7ec3-377e-7e6e-406f-86b0c13a1353.gif width=600>

## 【コラム】インタプリタ型言語

[インタプリタとは]:#【コラム】インタプリタ型言語

<details><summary>読む</summary><div>

Pythonは**"インタプリタ"**型言語といわれる部類の言語で、"インタプリタ"とは

> インタプリタとは、人間に分かりやすい高水準プログラミング言語（高級言語）で書かれたコンピュータプログラムを、コンピュータが解釈・実行できる形式に変換しながら同時に少しずつ実行していくソフトウェア。英語の原義は「通訳者」

出典：[インタプリタとは - IT用語辞典 e-Words
](http://e-words.jp/w/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF.html)
とされている。

対義語？としては**"コンパイラ"**があり、どちらもプログラムを解釈するのは同じだが、"コンパイラ"は実行を伴わない。

"インタプリタ"は解釈と同時に実行されるため、プログラムが未完成だったりエラーがあっても途中までの実行結果が確認できる反面、冗長なコードも解釈した時点で実行されるために実行速度が遅い。

"コンパイラ"は実行を伴わないおかげで、全体を解釈した内容を"処理速度優先"や"省メモリ優先"などの目的に合わせて最適化したうえで実行できる反面、未完成やエラーがある状態のプログラムは途中まででも実行結果が確認できない。

このように、"インタプリタ"と"コンパイラ"はメリットとデメリットが相反関係にあり、「どちらが優れている」ということでもない。
作りたいアプリケーションの特性に合わせて、開発言語を選べるようになるのが一番いい。
</div></details>

# 動かしながら書き方を覚えよう

## ソースファイルを作る

まずは、Pythonのソースファイルを作ろう。
といっても、ただのテキストファイルなので、ソースファイルを置きたいところで`右クリック -> 新規作成 -> テキストドキュメント -> 任意のファイル名.py`で作るだけ。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/889d3275-3b00-2d9f-45ab-2eea207a8763.gif width=600>
ただ、ファイル拡張子の表示がOFFになっていると、拡張子を`.py`にできないので、ファイルエクスプローラー上で`表示 -> ファイル名拡張子`のチェックを入れる。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/937f30a9-3c79-8bb4-e67b-c47c8e637559.gif width=600>
もちろん、各種エディタの`新規作成`やコマンドラインから作ってもいい。

なお、ソースファイル自体や保存先のパスに日本語を含んでいるとトラブることもあるので、ソースファイルへのパスに日本語を含まないように作るのが無難。

## 文字コードを設定する

これは少し面倒なのだが、プログラム上で日本語を使う場合、**そのソースファイルが書かれている文字コード**を意識しないといけない。
英語が堪能でない限り、コメントなどに日本語を使うことは避けられないと思うので、覚えておく必要がある。

### 確認と設定方法

文字コードによってコンピュータ側の認識が異なる(詳しくは[コラム][文字コードとは]参照)ので、Pythonインタプリタに対しても「このファイルの文字コードは○○ですよ」と教えてあげないと、ソースファイルを正しく解読できずにエラーになってしまう。

ファイルの文字コードは、テキストエディタで開くと確認できる。
Windows標準でついてくるメモ帳ですら右下に表示される。
![文字コード確認.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/df56b9f3-4863-a631-9f2f-f4009547b513.gif)
もちろん、プログラミング向けのリッチなエディタでも確認可能で、筆者がメインで使っている"VSCode"では右下に表示されている。
![文字コード確認_vscode.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/a0193ebe-ab88-2996-5e5d-89eba490b684.gif)
ちなみに、一応他のインストールしているエディタも見てみたがどれも表示箇所は右下だった。

確認して表示された文字コードが意図していない設定だったら、エディタで文字コードを変換しておく。なんの文字コードがいいのかわからない場合は、とりあえず`utf-8`にするのをオススメする。

参考までに、VSCodeでは次のように`右下の文字コードをクリック -> エンコード付きで保存 -> "utf"と入力 -> utf-8を選択 -> 上書き保存`で変更できる。
![文字コード変更_vscode.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/baecb807-3e2f-1d18-5da8-4d970c75a4f0.gif)
次にPythonへの設定方法だが、ソースファイルの先頭行に次のように記述する。

```python:.py
# coding: 文字コード
```

又は、

```python:.py
# -*- coding: 文字コード -*-
```

2つ目の書き方は、[公式ドキュメント](https://docs.python.org/ja/3/tutorial/interpreter.html#source-code-encoding)に準拠した形だが、`-*-`はなくても問題ない。

先頭行にシバン(起動バージョン自動判定用のコメント)を書いている場合は2行目に書く。

```python:.py
#!/usr/bin/env python3
# coding: 文字コード
```

又は、

```python:.py
#!/usr/bin/env python3
# -*- coding: 文字コード -*-
```

`文字コード`の部分にファイルの文字コードを記述する。

基本的には`utf-8`を指定して、エディタ側でファイルの文字コードを`utf-8`にしてしまうのがいいと思うが、Windows標準([コラム][文字コードとは]の通り、Windowsもutf-8に移行してきているので標準というかは微妙だが)を使いたければ`cp932`と指定する。

一応、デフォルトは`utf-8`で認識されるので、ソースファイルを`utf-8`で書くなら省略しても問題はないが、"エディタの設定で別のコードとして開いてしまい、手動で正規のコードで開きなおす"際に、**人が視認できる**というメリットもあるので、`utf-8`でも書く癖をつけておいたほうがいい。

### 【コラム】文字コードとは？

[文字コードとは]:#【コラム】文字コードとは？

<details><summary>読む</summary><div>

コンピュータ上では、さまざまな文字は対応表に基づく数値として解釈されていて、`A to Z`のアルファベット(小文字も)や数字と一部の符号に関しては普遍的な対応表(Asciiコード)があるのだが、日本語のようなアルファベットの組み合わせで表現できない言語は別途文字と数値の対応表が整備されている。

この対応表にあたるのが**文字コード**で、Asciiコードに含まれない文字は割り当てが異なる複数の対応表が存在している。
Windowsは`cp932`という文字コードが標準だったが、最近は`utf-8`という文字コードが世界標準になりつつあって(もうなっているといってもいいのか？)、これは日本語含む様々な文字に対応しているため、Windows系も徐々に移行が進んでいる[^1]が、過去互換性などの都合か完全移行はできていない。
</div></details>

[^1]: [「メモ帳」に多数の改善、BOMなしUTF-8がデフォルト保存形式に ～「Windows 10 19H1」](https://forest.watch.impress.co.jp/docs/news/1157696.html)

## ターミナルへの出力

ここまでの準備が終わったら、ようやくソースコードを書いて動かしてみる。
とりあえず、ターミナルに任意の表示ができないと始まらないので、ターミナルへの出力方法を覚えよう。

### 文字列を出力してみよう

ターミナルへ文字列を出力するには、

```:書式
print(出力したい文字列)
```

と記述する。
Pythonでは`"`または`'`で囲った範囲を文字列と認識する。
文字列についての詳細は[別記事](https://qiita.com/kira4845/items/20e54216f048961eddad#str)にまとめたので気になる人はどうぞ。

#### 例題

実行したら、画面に`こんにちは`を表示するソースコードを作ってみよう。

```posh:実行画面
> python .\hellow.py
こんにちは
```

<details><summary><b>回答例</b></summary><div>

```print:hellow.py
print("こんにちは")
```

次の例はVSCodeでの操作例だが、参考にして自分の環境でも試してみるといいかも。
![print_実行.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291298/9e066e94-8506-95bf-3b9b-f647a4895406.gif)
</div></details>

### 数値を出力してみよう

ターミナルへ数値を出力するには、

```:書式
print(出力したい数値)
```

と記述する。
[文字列の出力](#文字列の出力)の`出力したい文字列`を`出力したい数値`に変えるだけでいい。

数値についても詳細は[別記事](https://qiita.com/kira4845/items/20e54216f048961eddad#数値型)にまとめたので気になる人はどうぞ。

#### 例題

実行したら、画面に`10`と`1.25`を表示するソースコードを作ってみよう。

```posh:実行画面
> python .\numbers.py
10
1.25
```

<details><summary><b>回答例</b></summary><div>

```numbers.py
print(10)
print(1.25)
```
</div></details>

`print`関数は他にもオプションや機能があるが、それらは追々紹介する(たぶん)。

# 次回

今回はプログラム自体よりも、Pythonの実行方法やソースファイルの作り方がメインになったが、次回以降は徐々にプログラム書いてみるセクションが増えるはず。

[動かしながら学ぶPython入門~その２：変数操作と画面入力~](https://qiita.com/kira4845/items/203e47952a27f6ea6cee)に続く…