Python

Python とは「簡単に書ける」ことを目的にしたプログラミング言語です。 その目的のため、いろいろなライブラリが用意されています。 ここでは、特に数値計算に活用することを前提として、 Python コードを書くために必要な情報をまとめました。

以下では
#
はターミナル(端末、コマンドライン)のプロンプトを表します。

また numpy については Anaconda3 をすでにインストールしているとします。

C/C++と大きく異なる点

実行方法

2種類の方法

大きく分けて、
  1. 対話的に実行する
  2. スクリプトを書いて一気に実行する
の二通りがあります。結果はどちらも同じです。 実際の運用では、一連のコマンドの保存と修正のし易さから スクリプトを書く方が良いと思います。

雛形スクリプトの準備

ここではスクリプトに書いた処理の結果を示します。 そのための準備をここで行います。
  1. コマンド python の場所を確認する
    which (Mac, Linux 等 UNIX系列) あるいは where (Windows) というコマンドで探します。
    # which python
    /usr/bin/python
    バージョンを確認します。
    # python -V
    Python 2.x.y
    2.x.y というバージョンが出たらそれはバージョン2の python です。 バージョン3の python を探します。おそらく python3 というコマンドです。
    # which python3
    /usr/bin/python3
    # python3 -V
    Python 3.x.y
  2. test.py (名前は変更可能) の用意
    test.py

    #!/usr/bin/python3
  3. test.py に実行権限を与える
    # chmod 755 test.py
  4. 実行する
    # ./test.py
    最初の ./ は付けないといけない場合が多いのですが、 ここでは事情は割愛します。
    (知っている人向け説明: カレントディレクトリにはパスを通さないことが多いからです)
以下では、test.py の中身をその都度変えて test.py を実行した結果を示します。

基本操作

四則演算

test.py

#!/usr/bin/python3
print(1+2)
print(1-2)
print(2*3)
print(2/3)
これを実行すると次のようになります。 一行ずつコマンドと実行結果が対応します。
# ./test.py
3
-1
6
0.6666666666666666
この場合、割り算は正解を出してくれていますが、 対話的にやると print(2/3) は 0 になりました。

今回に限らず浮動小数点計算をするならば、 整数は 2.0 あるいは 2. などと書いた方が安全です。
test.py

#!/usr/bin/python3
print(1.0+2.0)
print(1.0-2.0)
print(2.0*3.0)
print(2.0/3.0)
# ./test.py
3.0
-1.0
6.0
0.6666666666666666

ベキ乗

2 の 3乗と 0.5乗(つまり平方根) の例を示します。
test.py

#!/usr/bin/python3
print(2.0**3.0)
print(2.0**0.5)
# ./test.py
8.0
1.4142135623730951

変数への数値代入

変数の宣言なしにいきなり代入できます。 変数の型も気にしなくていいです(割り算のように演算結果が変わる場合は注意が必要)。 また変数の値への演算結果を同じ変数に代入することもできます。
test.py

#!/usr/bin/python3
x=3
print(x)
x=3.14
print(x)
y=2
print(x+y)
y=y+10
print(y)
# ./test.py
3
3.14
5.140000000000001
12

関数の定義

書式

def 関数名:
    処理1
    処理2
    return 戻り値
def の中では各行、 タブ(か空白3文字分以上=実験による)でインデント(字下げ)する必要があります。

test.py

#!/usr/bin/python3
def f(x):
    return x**2
print(f(3))
print(f(4))
# ./test.py
9
16

関数の中身は複数行でも構いません。
test.py

#!/usr/bin/python3
def f(x):
    x=x+1
    return x**2
print(f(3))
print(f(4))
# ./test.py
16
25

関数の名前は適当でOKです。
test.py

#!/usr/bin/python3
def kyoto(x):
    return x**2
print(kyoto(3))
print(kyoto(4))
# ./test.py
9
16

関数に二つ以上の引数を持たせることもできます。
test.py

#!/usr/bin/python3
def f(x,y):
    return x+y
print(f(2,3))
# ./test.py
5

条件分岐 (if, if-elif-else)

書式

if 条件式:
    処理1
    処理2
if の後の条件式が真のときは処理1、処理2 が順に処理されます。 条件式が偽のときは何もされません。 関数の定義と同様、処理の前にはタブのインデントが必要です。

if 条件式1:
    処理1
elif 条件式2:
    処理2
else:
    処理3
elif は else if の略です。
  1. 条件式1が真のときは処理1を行い、
  2. 条件式1が偽かつ条件式2が真のときは処理2を行い、
  3. それ以外のときは処理3を行います。

例1

test.py

#!/usr/bin/python3
x=1
if x==1:
    print(x)
if x==2:
    print(x)
# ./test.py
1

例2

test.py

#!/usr/bin/python3
x=10
y=3
if x<y:
    print(x-y)
if x>y:
    print(x*y)
# ./test.py
30

例3

test.py

#!/usr/bin/python3
x=10
y=3
if x<y:
    print(x-y)
elif x>y:
    print(x*y)
# ./test.py
30

繰り返し処理 (for)

書式

for 変数名 in 変数が動く範囲
    処理1
    処理2
関数の定義と同様、処理の前にはタブのインデントが必要です。 「変数が動く範囲」というのが分かりにくいです。 これは、「動く範囲の集合を作っておいてその中を動く」という意味です。

range関数

動く範囲が小さい場合は手でリストを書いても良いですが、 大きくなると手で書いていられません。 こんなときはrange 関数を使います。 range 関数は引数を1,2 あるいは 3個取ります。
  1. range(a) : [0,a) の整数
  2. range(a,b) : [a,b) の整数
  3. range(a,b,c) : [a,b) の整数のうち c ごと
範囲の最後 (b) は入りません。

動く範囲として、まずはリスト l を作る例です。
test.py

#!/usr/bin/python3
l=[1,2,3]
for x in l:
    print(x)
# ./test.py
1
2
3

range 関数の引数1つ
test.py

#!/usr/bin/python3
for x in range(3):
    print(x)
# ./test.py
0
1
2

range 関数の引数2つ
test.py

#!/usr/bin/python3
for x in range(3,6):
    print(x)
# ./test.py
3
4
5

range 関数の引数3つ
test.py

#!/usr/bin/python3
for x in range(3,9,2):
    print(x)
# ./test.py
3
5
7

和の例

1 から 10 までの整数の和を計算してみましょう。
test.py

#!/usr/bin/python3
n=0
for i in range(1,11):
    n=n+i
print(n)
# ./test.py
55

繰り返し処理 (while)

書式

while 条件式:
    処理1
    処理2
条件式が真の間は、その中の処理を実行します。 関数の定義と同様、処理の前にはタブのインデントが必要です。

test.py

#!/usr/bin/python3
x=1
while x<4:
    print(x)
    x=x+1
# ./test.py
1
2
3

numpy

numpy は数値演算をするためのライブラリです。

読み込み

import numpy
numpy は慣習的に np と省略するらしいです。 np として読み込むには後ろに as np を付け足します。
import numpy as np

円周率

numpy 中で定義されている円周率πを読み込んで確認します。
x = numpy.pi
print(x)
numpy を import するときに "as np" という省略形を定義して読み込んだのならば
x = np.pi
print(x)
です。この場合は numpi.pi だと動きません。 以下では np に統一します。

関数

例えば sin関数の値は
x = np.pi
y = np.sin(x)
print(y)
として出力できます。

要素の生成

x の値を 0 から 10 まで 1 刻みで生成するには
x = np.arange(0,10,1)
print(x)
先のように定義した y=sin(x) の値のリストも作れます。
x = np.arange(0,10,1)
y = np.sin(x)
print(y)
[ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 -0.95892427 -0.2794155 0.6569866 0.98935825 0.41211849]
同様にして生成した同じ長さの y とは和を取れます。
x = np.arange(0,10,1)
y = np.arange(2,12,1)
print(y)
[ 2 4 6 8 10 12 14 16 18 20]