プログラムを書いてコマンドラインから一括実行

ここで説明されていることはどんなプログラミングにおいても一番重要です。

Pythonシェルは、Pythonでの動作がその都度分かるので教育的ですが、プログラミングの実際においては毎回キーボードから入力する必要があり、煩雑です。 ここでは、Pythonに実行させるステートメントをファイルに書いて保存し、これを一気に一括実行する方法を学びます。

対話的なPythonシェルを一旦終了して、いよいよプログラムを書いて実行してみましょう。

ファイルに書いたステートメントを実行する

これから、ステートメントをあらかじめファイルに書いてプログラムファイルとして保存しておき、これをPythonに読み込ませて一括実行する本格的なプログラミングスタイルを説明します。 プログラムをスクリプト、プログラムファイルをスクリプトファイルとかソースコードということがあります。

まず、プログラミングに適しているテキストエディタを準備しましょう。 エディタはプログラム開発の効率を左右するたいへん重要なツールです。 Windowsについてくる「メモ帳」(Windowsアクセサリにあります)やmacOSについている「テキストエディット.app」(アプリケーションにあります)で簡単なプログラムを書くことはできますが、推奨しません。 行数表示不可視文字(半角と全角空白、改行やタブ文字)の表示、文字コードや改行コードの変換などが可能なテキストエディタをいくつか試してみて、どれか一つを選んで習熟することは、コンピュータ操作において非常に重要です。

ここでは、テキストエディタで作成するプログラムファイルは次の4点に従うこととにします。

  1. ファイル内容を文字コードUTF-8で保存する。
  2. ファイル名には拡張子 .pyを付与してPythonプログラムであることを明示する。
  3. ファイル名には半角英数字と記号だけを使い、日本語や全角記号は使わない。
  4. 当面はファイル内容にも日本語や全角記号を含ませない。

これらを知り、意識しながら作業することはパソコンに不慣れな読者には戸惑うことも多いかもしれません。 詳しいことは今後触れていきますが、まずプログラムファイルをどうやって実行させるかを知ることが個々での目的です。

Pythonプログラムファイル名に拡張子.py を付ける

コンピュータの作業では、ファイルを保存するにはそのファイルの保存場所を指定して、さらにファイル名を決める必要があります。 Pythonで書いたプログラムファイルには、ファイル名に加えて拡張子 .py を付けておきます。 以下の例では、ファイル名を my_first_program.py とします(アンダーバー(_)を使ってます)。

また、プログラムファイルを保存する場所については、その時々に気まぐれの場所に保存するのではなく、専用場所を決めておくことを強く勧めます。 自分のパソコンなら、たとえば、新規フォルダとして work を、Windowsなら C:\Users\hoge\work 、macOSなら /Users/hoge/work として作るとよいでしょう。

フォルダ名にも日本語文字は使わず、半角の英数字記号からなるとしますが、空白文字は含めないようにします(ファイル名の命名法については後で詳しく説明します)。

プログラムファイルを書く

具体的にプログラムファイルをテキストエディタで書いて保存してみましょう。 作成したファイルが何処にどんなファイル名で保存したかを常に意識・確認することがプログラミングでは特に大切です。

次の1行のステートメントをテキストエディタで開いたウィンドウに入力して、ファイル名 my_first_program.py として保存して下さい。 このように、ファイル名を空白文字で文字列を区切りたい場合には、アンダーバー(アンダースコア)記号 _ あるいはハイフン - を使うとよいでしょう。

print("Hello, Python")

ステートメントは空白を入れずに空行頭から入力してください(細かいことをいうようで気が引けますが、大切なことなのです)。 この1行の前後に空行(空行とは文字列が入力されていない行で、行頭でRETURNを押して得られる)がいくらあっても構いません。

テキストウィンドウは開いたままにしておきます。 これから、プログラムファイルを修正・加筆しながら、プログラムを拡張していくためです。

演習:ファイル my_first_program.py に上のステートメント1行を書いて保存しなさい。

プログラムファイルを実行する

プログラムファイルをPythonに読み込ませて一括実行させるときにもコマンドライン方式で行います。 Pythonは目的のプログラムファイルをどのようにして知るのでしょうか。

保存されているプログラムファイルを実行するには、ターミナルウィンドウのプロンプト Terminal> に、次のようにしてコマンドpythonのオプションとして実行させたいプログラムファイルへアクセスするための経路を含めて指定します。

Terminal> python 目的プログラムファイルへのファイルパス

ファイルパス(file path)とは、目的とするファイルの場所へたどる経路を含ませたファイル名の表記です。 保存したプログラムファイル my_first_program.py を実行するとしても、それがどこにあるのかPythonに伝える必要があります。 ファイルパスを正しくあたえることで、Pythonにどのプログラムファイルを実行すればよいかを知らせるのです。

Windowsでは、目的のファイルを C:\Users\hoge\work\my_first_program.py として保存したとき、次のようにコマンドライン入力して次の結果を得ます。

Terminal> python C:\Users\hoge\work\my_first_program.py
Hello, Python
Terminal>

プログラムを書くよりも、それを実行するやり方のほうが難しい感じになってきましたね。 実は、この箇所がプログラミング学習の最も大きな障害になっています。 苦労するかもしれませんが、この壁を乗り越えてください。 その後には見渡しの良い世界が広がっていることが実感できるはずです。 コンピュータプログラムがどのように実行されるのかは、本書で学ぶにつれて以上のことが当然であるように理解できるようになります。

演習:保存したプログラムファイル my_first_program.pyをコマンドラインから実行してみなさい。

ファイルのある場所を作業フォルダとしてターミナルを開く

ここでは大東の実習室のコンピュータを前提に、プログラムファイルが Z:\program\myprogram.py に保存されているとしました。 以下、適宜自分の環境にあわせて理解してください(実際に作業してみないとわかりません)。

ファイルパスを考えることなく、コマンドpythonに単にファイル名を指定するだけで実行させるためには、目的ファイルが格納されているフォルダ(作業フォルダまたは作業ディレクトリといいます)でターミナルウィンドウを開けばよいのです。

WindowsやmacOSには選択したフォルダでターミナルウィンドウを開く仕組みが用意されています。 その使い方を説明しましょう。

Windowsで目的フォルダでターミナルウィンドウを開いて実行

エクスプローラで、左図のように、Pythonプログラムファイルが格納されている目的のフォルダを開いて、拡張子 .py が付いたPythonプログラムファイル myprogram.py が有るかを視認します。

このとき、ウィンドウの左上に「ファイル」メニューがあることに注意します。

ウィンドウ左上の「ファイル」メニューをクリックして、左図のように『コマンドウィンドウを開く』を押します。 すると、コマンドプロンプトが Z:\program> となったウィンドウが開きます。

目的のプログラム Z:\program\myprogram.py を実行するために、コマンドプロンプトに次のように入力します。

Z:\program> python myprogram.py
macOS目的フォルダでターミナルウィンドウを開いて実行

システム環境設定/[キーボード]/[ショートカット]/[サービス]」のメニューから[フォルダに新規ターミナルタブ]にチェックを入れておきます。 目的のフォルダを選択して『右クリックして現れるメニュー』にある「サービス」から[フォルダに新規ターミナルタブ]を選択すると、目的のフォルダから「ターミナル.app」が実行されます。

たとえば、ファイル my_first_program.py がフォルダ /Users/hoge/work に保存されている場合、この方法でターミナルウィンドウを開き、次のように現在の作業フォルダ内を一覧するコマンド ls を次のように実行して、現在の作業フォルダに目的のプログラムファイルが存在することを確認します。 このとき、ファイル名を指定するだけでプログラムを実行できます。

目的の作業フォルダ> ls
一覧リスト内に目的ファイル my_first_program.py があることを確認

目的の作業フォルダ> python my_first_program.py
Hello, Python

目的の作業フォルダ>

プログラムファイルを書き直す

プログラムに話題を戻しましょう。 次のようにテキストエディタの内容を書き換えて、同じファイル名my_first_program.pyで上書き保存してください。

for k in range(5):
    print("Hello, Python")
    print("I'm happy")

ここでのポイントは、forで始まる行は行頭から始まり、行末はコロン:で改行されていること、続く2行では、forから同じ空白文字数(4文字とします)だけ字下げされていることです(forに続く行では字下げが必要なのです) [^7]。 [^7]: Python3ではインデントに半角空白とTABを混在させることはできません。エラーとなります。 空白文字は半角空白で(TAB文字は使いません)、2行のprintで始まる文字列は同じ字下げ幅である必要があります。 もちろん、修正・書き換えたファイル内容を保存することをお忘れなく。

演習
  1. 書き換えて保存したプログラムを実行しなさい。
  2. 2つのprint行の字下げ幅を変えて(4文字と5文字のように)保存し、これを実行してみなさい。IndentationErrorという字下げエラーが生じるはずです。元のように字下げ幅を揃えて保存して、エラーが生じないことを確認しなさい。

プログラム内容を次のように書き換えて上書き保存してください。 2つの文字列をぞれぞれ変数st1st2に代入していること、繰り返しの回数5も変数nに代入しています。

st1 = "Hello, Python"
st2 = "I'm happy"
n = 5
for k in range(n):
    print(st1)
    print(st2)
演習

書き換え保存したプログラムを実行してみなさい。 先のプログラム結果と同じ結果をもたらすことを確認しなさい。

さらに、次のように書き換えて保存してみましょう。

"apple"
st1 = "Hello, Python"
st2 = "I'm happy"
n = 5
for k in range(n):
    print(st1)
print(st2)
a = 123
b = 456
print(a + b)
print(a * b)
演習

書き換え保存したプログラムを実行してみなさい。 繰り返し部分を改めましたが、実行結果がどうなるかを検討しなさい。 1行目のステートメントはプログラムの実行結果にどんな影響を及ぼしているかについても確認しなさい。

Pythonのわかり易いプログラム書法

Pythonでは、ステートメントの並びを他のプログラム言語でしばしばみかけるようにセミコロン;で区切る必要はありません。 Pythonではインデントは重要な意味を持ちます。 同じ文字幅インデントされたステートメントはPythonにはひとかたまり1つのコードブロックとして認識されます。

例で説明なしに取り上げた繰り返し実行するためのfor構文では、コロン:で改行し、次行に続く1つ以上のステートメントをひとまとめにしてコードブロックとしました。 このとき、ステートメント群を同じ文字幅だけforからインデント(字下げ)してコードブロックであることを視覚的に明示したのです。

Pythonではプログラム書式にこうしたプログラム書式の規約[^8] [^8]: PythonではStyle Guide for Python Codeに望ましいプログラムスタイルが定められています。 を設けているおかげで、そのプログラムは自由書式の言語と比べて大変読みやすくなっています(このことを可読性といいます)。 実は、Pythonでは次の3つのプログラム記法が可能です。

for k in range(5):
    print("Hello, Python")
    print("I'm happy")
for k in range(5):
    print("Hello, Python"); print("I'm happy")
for k in range(5): print("Hello, Python"); print("I'm happy")

コードブロックをなす2つのステートメントがセミコロン;で区切られている2番目と、for文を1行に記述した3番目のスタイルは1番目に比べるとわかり易い構文とはいえないのではないでしょうか。 あとで説明するフロー制御文にはコロン:が登場しますが、 Pythionプログラムの書き方の基本は

の2点だけです。

Pythonの学んだり覚えなければならない規則が少ない可読性の高さは、直ぐに使えるようになるこことと上達の早さをもたらします[^9]。 [^9]: プログラム言語に優劣があるわけではありません。今日利用されているプログラム言語(の計算モデル)はどれもTuring完全で同じ計算能力を持っています(ただし、計算時間やメモリ消費は問題にはしません)。 このため、Pythonは教育からプロフェッショナルな開発者まで幅広いユーザがいます。

Pythonを始めましょう

いかがでしょうか、書き換えたプログラムを無事に実行できていますか。 文字列の表示回数を変更してみたり、数の計算結果をいろいろ確かめてみて下さい。 これらができたならば、あなたは既に立派にPythonプログラマーです。

もし上手くいかないときでも、頭を抱える必要はありません。 本章をもう一度最初から実際に動作させながら丁寧に読み直してください。 まわりに質問できそうな人がいれば質問してみましょう。 どこでつまづいているか改めて認識し、課題が整理されるはずです。 できれば友達に勧めて一緒にPythonプログラムを学び合うことができれば最高です。 お互いに教え合うことでより深い理解に近づきます。

もっと詳しくPythonを知りたくなりましたか。 Pythonを使った新しい体験を楽しみにしてください。