プログラム例が載っている教材は基本的にjupyter notebookにて作成し、notebook形式のファイルを公開する。このノートブックについては、上記の「here」をクリックしてダウンロードできる。
ダウンロードしたノートブックを実習用のフォルダを「ドキュメント」の下につくり、そこに置けば、各端末のjupyter notebookを立ち上げることにより読み込み、実行できる。
また、各自、新しいセルにて種々試すことができる。
プログラムコードの間に説明文があると思考の妨げになると感じたならば、独自の新規ノートブックを作成し、教材のページ(あるいはノートブック)を参照しながら、新しいノートブック内で試すのが良いだろう。もちろん、jupyter notebookではなく、別のエディタとコマンドラインツール(ipython)や統合開発環境で実行してみてもよい。
毎回試したことを、各自のJupyter notebookに記録し、8回の講義終了時に提出する
初めての人は、以下の文章にそって、基本的な文法を修得する。
なれている人は、
Jupyter notebookは、
Jupyter Notebookの使い方に関する情報はWeb上に山ほどあるので、自分の好みにあったものを参照してほしい。 たとえば、https://qiita.com/takuyanin/items/8bf396e7b6b051670147
初めての人は、それから始めてもよい。
myname = "Nashidai Taro"
age = 25
height = 1.705
weight = 60.16
formatted_weight = "weight: %6.1f" % weight
print( weight )
print( formatted_weight )
print( "Hello, %s." % myname )
print( "Your age, height, and weight are %2d, and %6.3f m, %6.1f kg, respectively." % (age, height, weight) )
# 演算
bmi = weight / height**2
print("BMI = " + str(bmi))
a = ['red', 'blue', 'green', 'black', 'white']
print(a[2])
print(a[2:4])
print(a[3:])
print(a[-2])
person = {"name": "Suzuki", "hobby": ["ski", "tennis", "piano"], "age": 20, "weight": 70}
print(person["name"])
print(person["hobby"])
リストや辞書の連結、要素の追加、削除を行う様々な関数(メソッド)が用意されている
pythonネイティブのデータ構造リスト・辞書だけでは、大量のデータや数値計算には使いにくい。
そのような用途向けに、いくつかのモジュールで配列に類するデータ構造の拡張が行われている。
ここでは、良く用いらえれる2種類(実用上ほぼそれでOK)のモジュールを使う。
numpy
pandas
z = 1 + 1j # complex number
while abs(z) < 100:
if z.imag == 0:
break
z = z**2 +1
print(z)
a = 10
if a == 1:
print(1)
elif a == 2:
print(2)
else:
print("A lot")
for i in range(5):
print(i)
range(5)は0から1ずつ増やした5個の要素をもつ。
(注)
ちょっとわかりにくいが正確にいうと、rangeはrange型のobjectを生成するので、リストに変換するにはlist()という関数を用いる必要がある。
a = range(5)
print(a)
b = list(a)
print(b)
要素の数はlen()関数で得られるのでそれを利用する場合もある。
a = [1, 2, 3, 4]
for x in a:
print(1. / x)
a = [2,4,6,8]
for n in range(len(a)):
print(n, a[n])
point = {"math": 80, "phys": 70, "chem": 90, "bio": 60}
for key, value in point.items():
print("%s = %d" % (key, value))
pointという辞書(オブジェクト)に対してitems()というメソッドが付随しており、それが実行されたと解する。
point.values()
単に、つぎのようにしてもよい。
注:
items()関数の返値の型はdict_itemsで、直接、その要素を取り出せません。"in"とともに用います。たぶん。(pythonにはこのような特別な型が多くあり、慣れにくい気がします。)
for key in point:
print("%s = %d" % (key, point[key]))
pythonは他のインタプリタ型言語と同様、繰り返しや条件分岐などの処理は遅い。
したがって、大量のデータを繰り返し処理する場合は、forやwhile分の利用を極力避け、numpy, pandasなどのモジュールに備わっているメソッドを利用する。
ちょっとした解説 https://8tops.yamanashi.ac.jp/~toyoki/lectures/simulationMethods/speedup4matrices.html
引数に既定値を与えておくと、引数の数が欠けている場合も対応できる。
def lin_func(x=1, y=1):
return 2.0* x + 3.0*y
print(lin_func(2,3))
print(lin_func(x=3, y=2))
print(lin_func(y=5))
http://www.scipy-lectures.org/
and its Japanese translation
http://www.turbare.net/transl/scipy-lecture-notes/index.html
https://docs.python.jp/3/index.html
https://docs.python.jp/2/index.html
Pythonは、プログラムのブロックを{ }ではなくインデントの深さで表すので、コードを書くにあたって行の長さ、複数行のにわたる命令の書き方が可読性の上でとても重要です。
多くのエディタでは、左括弧"(", "{", '['が閉じない状態で開業すると適当なインデントを挿入してくれます。pythonインタプリタは、継続行のサインである行末の"\"がなくても継続行と判断しますので、それをつけないでもOKです。
ということで、
ということが作法として推奨されています。
くれぐれも長い行を書かないように気をつけましょう。(印刷物やスライドなどで示す場合にも役立ちます。)
詳しくはPEP文書をみてください。
http://pep8-ja.readthedocs.io/ja/latest/
https://legacy.python.org/dev/peps/pep-0008/
短縮版として次のようなページも参考になる。 https://www.yoheim.net/blog.php?q=20160612