Pythonの基本

基本事項

慣れないうちは、半角英数文字だけを使うようにしましょう。実際にはコメントの中など、全角文字を使っても何も問題ない場所はたくさんあるのですが、全角文字は大きなトラブルの元にもなります。例えば、とあるコードの末尾に全角スペースが入っていたりすると、プログラムは動きません。ですが、全角スペースを見つけるのはJupyterLab上では困難です。どこが悪いのかわからないまま、無駄な時間だけが過ぎていくということになりかねません。慣れてきて理解が深まってくるまでは、基本的に半角英数文字だけを使うようにしましょう。

かんたんな計算

手始めに、ノートブックのファイル名を右クリックして、Rename Notebookでファイル名を適当な名前に変更しましょう。左側を見れば、このファイルがどこのフォルダにあるのかは、ひと目で分かると思います。初期状態ではセルは 1 つしかありません。そのセルをクリックしてアクティブにしてから、

1 + 2/3 - 4**5

と入力し、セルを実行してみましょう。セルを実行するには、セルをアクティブにし て、上の三角ボタンをクリックするか、shift キーをおしながら Enter(あるいは Return)キーを押してください。すると、セルのすぐ下に「-1022.3333333333334」か、 それに類似する結果が表示されるはずです。これは

1+23451+\dfrac{2}{3}-4^5

を計算したことに対応します。python では、割り算はスラッシュで、掛け算はアスタリスク1つで、べき乗はアスタリスク 2 つで表現されることに注意しましょう。次に、もうちょっと複雑な計算をしてみましょう。例えば、「質量0.1 kgのボールが速度10 m/sで飛んでいる場合の運動エネルギー」と、「同じボールが高さ1 mにあるときの位置エネルギー」では、どちらが何倍大きいでしょうか? 先程の計算の際に、下部に新しくセルがつくられているとおもうので(もし、存在しなければ上部の+マークをおすとセルを作成できます)、その新しいセルに

(0.1*10**2/2) /(0.1*9.8*1)

と入力し、実行しててみてください。結果が出力されて、前者のほうが約 5.1倍大きそうだということ がわかりました。

変数を使おう

さて、今度は、先程と全く同じ問題(運動エネルギーと位置エネルギーの比較)を、違う質量について考えたくなったとします。質量10 kgの場合にはどうでしょうか? この場合、もちろん先程のセルの中身の 0.1 をすべて 10 に書き換えればいいのですが、この「すべて書き換える」ということに、気をつける必要があります。今回は、せいぜい2 箇所しか無いので、対して面倒ではありませんし、書き換えまちがえることも無いと思います。しかし、仮に、質量が何十箇所にも含まれるような計算だったらどうでしょうか? あるいは、いろんな質量について何度も同じ計算をしたらどうでしょうか? 間違えずに書き換えるのは非現実的になってきます。そこで、変数という便利なものを使うことにしましょう(とりあえず、数学や物理で使う変数と、ほとんど同じものと思ってください)。再度、新しいコード用セルに、以下のように入 力してみてください。

m = 0.1 # mass
v = 10 # speed
g = 9.8 # Gravitational acceleration
h = 1 # height

(m*v**2/2)/(m*g*h)

早速実行してみましょう。先程と同じ答えが返ってきたと思います。今度は1行目を

m = 10 # mass

と変更して、質量 m の値 を 10 に変えて計算してみましょう。そのためには、セル全体を実行し直す必要があります。新しい結果が出たと思います。基本的には、変数の中身を変えたあとには、再度セルを実行しない限り、出力セルの中身が更新されることは有りません。

コードがスッキリして、数値の置き換えが楽になっただけではなく、何を計算しているのか、その意味がわかりやすくなったと思います。ここで m, v, g, h は python における変数です。変数は数値を代入したり、あとから別の数値を代入したり、色々なことができます。ここではm, v, g, hのように文字一つを変数の名前として使いましたが、実際には、例えばmassのように長い言葉を変数名に使っても構いません。

mass = 0.1 # mass
velocity = 10 # speed
g = 9.8 # Gravitational acceleration
height = 1 # height

(mass*velcity**2/2)/(mass*g*height)

としても、問題ありません。あまり長すぎると書くのが面倒ですし、あまり短いと何を表した変数なのか一見してわかりにくいです。意味が分かる範囲で短めの名前をつけるのが良いでしょう。pythonでは、変数名の付け方にルールや推奨された方法があります。詳しくはhttps://pep8-ja.readthedocs.io/ja/latest/#id24を読んでもらうとして、ここでは簡単に、変数名には小文字だけを使う。必要に応じてアンダースコア(_)を単語の区切りなどに使う。と覚えておきましょう。

ここで、# 記号の後ろにつづく部分は「コメント」呼ばれます。コメントはプログラムの実行の際には完全に無視されます。人間があとからコードを読んだときに意味がわかるような説明書きのために使われます。

関数を使おう

ここまでで学んできたのは、「よく使う数値や、あとで変更して同じ操作を繰り返すような場合には、数値そのものを使うのではなく、『変数』を使ったほうが便利だし、ミスが少ない」ということでした。変数と同じ便利さを、より自由に使えるのが「関数」という概念です(数学の関数と似ている部分と違う部分があるので注意しましょう)。

関数の便利さを理解するために、再び上の例に戻りましょう。ここでは運動エネルギーを計算してい ましたが、次に、異なる 2 つの物体の運動エネルギーを比較したくなるかもしれません。 すると、新しくコード用のセルを作って、運動エネルギーの計算式を 2 つ書いて、、、、と 進みたくなりますが、よく考えたら、さっきすでに書いたコードが有るのですから、コピペすればよいのではないでしょうか? しかし、コピペであっても、コードが長くなると、正しい場所を正しくコピーできているのか、という問題が出てきます。また、なにか間違いを発見した際には、コピペした先すべてを修正しなければならないのもトラブルのもとになりそうです。

実はもっとい方法があります。それが関数です。実際に関数を作って、使ってみましょう。新しいコード用セルに

def kinetic_energy(m1,v1):
    return m1*v1**2/2

と書いて、実行してみてください(return の前の空白に注意してください。ここでは必ず、半角の空白 4 つ分が必要です。python では行の頭の空白に特別な意味があります。複数行がひとまとまりであることを示しています。ここでは2行目文頭に空白(インデント)があることで、1行目と2行目がひとまとまりであることを前提に、プログラムが実行されます)。この段階では何も結果は出てきません。これは、単に関数を作っただけで、まだ使っていないからです。そこで、新しいコード用セルを作って、今度は

kinetic_energy(0.1,10)

と入力し、実行してみてください。5.0 という結果が出力されたと思います。これは「m1 に 0.1 を代入して、v1 に10 を代入して kinetic_energy の関数を実行し、その結果を取ってくる」ということを意味しています。この一連の過程を「kinetic_energy関数に0.1と10を代入すると5.0という値が返ってくる」のように「値が返ってくる・値を返す」などと表現します。

さらに、質量を10 に変えた結果を知りたければ

kinetic_energy(10,10)

を実行します。この例からわかるように、関数とは 「よく使う計算・命令をひとまとめにしておいて名前をつけたもの」です。python では関数を作るには

def 関数の名前(使う変数を,で区切って並べる):
    return 計算式

という形に書きます(:を忘れないようにしましょう)。使う際には

関数の名前(代入する数を,で区切って並べる)

とします(使う際には : は必要ありません)。関数を使えば、もっと複雑なこともできるのですが、ここでは省略します。関数の名前は、変数の名前と同じルールに従ってください。つまり、小文字だけを使い、必要に応じてアンダースコア(_)を単語の区切りなどに使いましょう。

最終更新