検索
連載

[Python入門]Hello Python:一番簡単なプログラムを作ってみようPython入門(2/3 ページ)

Pythonで「Hello World」プログラムを3つ作りながら、Pythonプログラムを構成する要素や、Pythonの特徴を見てみよう。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

[Try Jupyter]ページから起動した環境でinput関数がうまく動かない

 2022年4月20日現在、以下で紹介していくコードは[Try Jupyter]ページの[Jupyter Notebook]リンクから起動したPython実行環境ではうまく動作しない。これは、実行環境をホストしているPyoliteにおけるinput関数が非同期処理となるように実装されているからだ(詳細はこちら)。

input関数呼び出しで実行が止まらず、エラーが発生したところ
input関数呼び出しで実行が止まらず、エラーが発生したところ

 これは既知の問題として対応が検討されているようだが、当面の対策としては「input」の前に「await 」を記述して、関数内部での処理が終わるまで次の行に制御が進まないようにしようといわれている。が、これでもうまくいかないかもしれない。

 この場合は、以前に[Try Jupyter]ページから起動するPython環境をホストするのに使われていたBinderを使うのがよい。簡単にはGitHubの[Binder Examples]リポジトリにある[conda]タイルか[requirements]タイルをクリックして、表示されたページにあるURLをクリックするのがよい。例えば、以下は[conda]タイルをクリックしたところだ。

[conda]タイルから移動したページにあるURL
[conda]タイルから移動したページにあるURL

 このリンクをクリックすると、Binderにより実行環境が起動され、最終的に次のような画面が表示される。

BinderでホストされているPython実行環境が起動したところ
BinderでホストされているPython実行環境が起動したところ

 この後は[File]メニューから[New Notebook]−[Python 3]を選択すると、以下のようにノートブックが新しいタブに開かれる。

ノートブックが新規に作成されたところ
ノートブックが新規に作成されたところ

 本稿では以降、このようにして作成した環境を用いて、動作を解説していく。


もう少し難しいHello Worldプログラム

 次に以下のプログラムについて考えてみよう。

name = input('input your name: ')
message = 'Hello ' + name + ' !'
print(message)

少し難しくなったHello Worldプログラム

 先ほどは1行のプログラムだったのが、今度は3行のプログラムになった。これをセルに入力して、実行すると次のようにセルの下にメッセージと入力用のテキストボックスが表示される。

「input your name:」というメッセージと共にセルの下にテキストボックスが表示されるので、名前を入力して[Enter]キーを押す
「input your name:」というメッセージと共にセルの下にテキストボックスが表示されるので、名前を入力して[Enter]キーを押す

 ここで何かテキストを入力して[Enter]キーを押すと、次のように「Hello 誰それ」といったメッセージが表示されるはずだ。

Helloメッセージが表示されたところ
Helloメッセージが表示されたところ

 このプログラムでは、新しく次の要素が使われている。

  • input関数
  • 変数
  • 代入演算子
  • 結合演算子

 以下では、各行を順に見ながら、これらの要素とこのプログラムの動作について説明をしていく。

1行目:変数、input関数、代入演算子

 1行目のコードは次のようになっていた。

name = input('input your name: ')

変数、代入演算子、input関数

 この行は変数(name)、代入演算子(=)、input関数の3つの要素で構成されている。「=」の前後には空白文字が入っているが、これは入れても入れなくても構わない。ただし、コードが見やすくなるので入れた方がよいだろう。

 「変数」は「何かの値を取っておくための箱」のようなものだ。「何かの値に付けたラベル(名前)」といってもよい(「取っておく」ということは、後からそれを利用するということだ)。

変数は何かの値を取っておく箱のようなものや、何かの値に付けられたラベル(名前)と考えられる
変数は何かの値を取っておく箱のようなものや、何かの値に付けられたラベル(名前)と考えられる

 変数は何かの値を取っておくためのものなので、変数を使うときには、最初にその値を変数に保存しておく必要がある。そして、変数に「何かの値」を保存するには多くの場合、代入演算子を使う。Pythonでは「何かの処理を行う記号類」のことを「演算子」と呼び、その中でも「=」記号は代入を行うことから「代入演算子」と呼ばれる。

 代入演算子「=」記号の右側(右辺)の値が代入演算子「=」記号の左側(左辺)に代入される。つまり、「変数 = 何か」と書けば、代入演算子(=)の右辺の値が左辺の変数に「代入」される。右辺の「何か」が計算式や関数呼び出しであれば、その結果が代入されることにも注意しよう。例えば、「ans = 1 + 1」という文があったとすると、ans変数にはその計算結果である「2」が代入される。

変数への値の代入
変数への値の代入

 「代入」といったが、これは左辺の変数(ラベル)が右辺の値を参照するように結び付ける処理ともいえる。このことから、結び付けるという意味がよく分かる「束縛」と呼ぶこともある。

代入文と「=」演算子と代入式

 実際には、Pythonでは何らかの値を変数などに代入する操作は「代入文」として規定されている。その最もシンプルな構文が「変数 = 代入する値」であって、このときに「=」は演算子というよりも代入文を構成する要素でしかない(そのため、Pythonのドキュメント「演算子の優先順位」には「=」は登場していない)。

 ではあるが、本連載では便宜的に「=」を代入演算子と呼ぶことにする。

 また、「変数 = 値」という「代入文」は文なので、実はどこにでも書けるものではない(Pythonでは文を書ける場所が決められている)。例えば、if文の「if 条件:」の条件には文は書けない。これがわずらわしいことがあることから、Python 3.8では「代入式」が導入されている。代入文とは異なり、代入式は「変数 := 式」のように「:=」演算子を使用して、先のif文の条件など文を書けない場所で変数に式の値を代入(しつつ、その式の値を条件判断などの処理に使用)できる。


 上のコードでは代入演算子の右辺にあるのは「input関数」の呼び出しだ。先ほど、関数は「引数に何かの値を渡すと、その値を基に何らかの計算を行い、その結果を返す」と述べたが、input関数は「引数に受け取ったメッセージを画面に表示して、ユーザーからの入力を受け取り、それを文字列として返す」という動作をする。

 これらの処理をまとめると次のようになる(ここではユーザーが「World」と入力したものとしている)。

「name = input('input your name: ')」で行っていること
「name = input('input your name: ')」で行っていること

 以上のことから、1行目で行っている処理を日本語にすると「input関数を呼び出して、ユーザーにメッセージを表示し、入力を受け取り、それをname変数に代入する」となる。変数に値を代入すると(この場合はinput関数によりユーザーから受け取った値)、その変数を介してその値を利用できる。これを行っているのが2行目だ。

2行目:文字列の結合

 2行目のコードは次のようになっていた。

message = 'Hello ' + name + ' !'

name変数を利用して文字列を結合しているコード

 今度はname変数とは別の「message」という名前の変数が出てきた。ただし、やっていることは「変数 = 何か」の基本形と同じであり、1行目と変わらない。つまり、このコードはmessage変数に「'Hello ' + name + ' !'」の「値」を代入しているということだ。

 'Hello 'と' !'は既に見た文字列だ。それ以外にあるのは、1行目で値を代入したname変数と2つの「+」記号だ。この「+」記号はPythonの演算子の1つであり、文字列を「結合」したり、数値を「加算」したりするために使われる。ここでは、文字列を結合するためにこの演算子を使っている(そのため、「+」の左右に文字列を置く場合、これを「結合演算子」と呼ぶことがある。一方、「1 + 1」のように「+」の左右に数値があるときには、加算を行うので「加算演算子」と呼ぶことがある)。

 例えば、1行目でinput関数に対してユーザーが「World」と入力したとしよう。すると、name変数の値は'World'という文字列になる。その値は、プログラムコード中に「name」と書くことで利用できる。よって、「'Hello ' + name + ' !'」という式の値は次のようになる。

「'Hello ' + name + ' !'」の結果
「'Hello ' + name + ' !'」の結果

 これにより、message変数には'Hello World !'という文字列が代入される。このmessage変数を利用しているのが3行目だ。

3行目:実行の流れ(制御フロー)

 3行目のコードは次のようになっている。

print(message)

message変数の値を画面に表示

 message変数の値は既に見た通り、'Hello World !'という文字列であり、print関数にmessage変数を渡しているので、これが画面に表示されたというわけだ。

ユーザーが入力した「World」を利用して、「Hello World !」と表示された
ユーザーが入力した「World」を利用して、「Hello World !」と表示された

 ここまで、少し難しくなったHello Worldプログラムの動作の解説と、そこで使われているプログラムの構成要素を取り上げてきたが、大事なことがもう1つある。それは「プログラムは上から下に順に実行される」ということだ。上から順に「ふんふん」と読めてしまうので、あまり気にしなかった人もいるだろうが、プログラムは「基本的」に上から下へと順に実行される。そして、プログラムがどのような順序で実行されるかを「実行の流れ」とか「制御フロー」などと呼ぶことがある。

プログラムは基本的に上から下へと順番に実行される
プログラムは基本的に上から下へと順番に実行される

 最後により複雑なHello Worldプログラムを見てみよう。

ここまでのまとめ:変数、演算子

  • 変数は「何かの値を保存するもの」「何かの値に付けた名前」と考えられる
  • プログラムコードに変数を記述すると、その変数の「値」をその場所で利用できる
  • 演算子は「何らかの計算を行う記号類」のこと
  • 代入演算子「=」は「右辺の値を左辺(の変数)に代入」する
  • 結合演算子「+」は「文字列と文字列を結合」する
  • input関数は「ユーザーにメッセージを表示してから、入力を受け取り、それを戻り値」とする

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る