Python 初心者講習会 孫 建強 農研機構 農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22 数箇所か修正。指摘していただいた方どうも ありがとうございます。
Python 初心者講習会
孫建強農研機構 農業情報研究センター
2019年2月22日, 2月25日, 3月1日
1
2019.02.22 数箇所か修正。指摘していただいた方どうもありがとうございます。
10:00-12:0013:00-16:00
数値 基本構文
ディクショナリ 関数
文字 リスト2月22日
2月25日
3月1日 10:00-12:0013:00-16:00
13:00-16:00
復習
ロジスティック回帰 SVM
機械学習入門
データ処理 視覚化
ライブラリー
2
プログラミング
16
C/C++
FORTRAN
コンパイラ型言語 インタプリタ型言語
Python
RubyPerl
R
COBOL
Objective-C
ALGOL
JavaScript
中間型言語
JavaC#VB .NET
18
1990 2000 2010
Python 0.9
Python 1.0
Python 2.0
Python 3.0
Python 2.7
NumPy
PILSciPy
matplotlib
Anaconda
Pandas
Python 3.7
scikit-learnChainerTensorflow
Keras
OpenCV
SeabornPythonデータ処理視覚化画像解析機械学習
21
アプリ開発
数値演算
統計処理
データ処理 機械学習
画像解析
22
データ処理NumPy
SciPy
Pandas
ベクトル・行列の高速演算線形代数
統計処理微分方程式・積分パラメーター最適化
データ操作
23
視覚化matplotlib
Seaborn
高機能視覚化ユーザー数多い
matplotlib を補完
24
画像解析OpenCV
PIL / Pillow
画像解析動画解析
簡易画像処理
機械学習
scikit-image画像処理機械学習
26
機械学習scikit-learn
tensorflow
モデリング統計的機械学習
深層学習
Chainer深層学習
27
プログラミング入門
28
いきなりプログラムを書こうとする。 効率的な処理手順を先に考える。
初心者 中級者
エラーを恐れる。
完璧なプログラムを書こうとする。
様々なエラーを経験している。
頑健性を求めるが完璧を求めない。
29
いきなりプログラムを書こうとする。
初心者
エラーを恐れる。
完璧なプログラムを書こうとする。
手順をしっかり考えて!
中級者との差はエラーの経験値!
完璧なプログラムは存在しない!
30
とにかくエラーをたくさん出して経験を積む!
32
Python オブジェクト
33
オブジェクトコンピュータでデータを処理するためには、
データや処理手順をコンピュータに保持する必要がある。Python では、オブジェクトと呼ばれている概念を用いてデータや処理手順を記憶させている。オブジェクトには様々な種類があります。
スカラー
リスト
ディクショナリ
関数
クラス
1つの値だけを保持できるオブジェクト。
複数の値またはオブジェクトを保持できるオブジェクト。
複数の値またはオブジェクトを保持でき、それらに名前を付けることができるオブジェクト。
複数の値またはオブジェクトを保存できるうえ、処理手順も保持できる。
なんでも保持できる化け物オブジェクト。
34
スカラー
35
スカラーオブジェクトには様々な種類があり、そのうち、値を 1 つだけし
か保持できないオブジェクトをスカラーとよぶ。スカラーに値を保持させるためには、そのスカラーに値を付与する必要がある。この付与作業を代入という。
Python では、オブジェクトに値を代入するとき、代入演算子"=" を使う。Python において、"=" は代入演算子のことであり、右辺の値またはオブジェクトを、左辺のオブジェクトに代入する機能を持つ。"=" は数学上の等しいという意味はない。
次のコードは、1 という値を、a という名のオブジェクトに代入することを表している。このコードを実行することによって、プログラムが終了するまで、a は 1 を保持している状態になる。
a = 136
スカラーオブジェクトには様々な種類があり、そのうち、値を 1 つだけし
か保持できないオブジェクトをスカラーとよぶ。スカラーに値を保持させるためには、そのスカラーに値を付与する必要がある。この付与作業を代入という。
Python では、オブジェクトに値を代入するとき、代入演算子"=" を使う。Python において、"=" は代入演算子のことであり、右辺の値またはオブジェクトを、左辺のオブジェクトに代入する機能を持つ。"=" は数学上の等しいという意味はない。
次のコードは、1 という値を、a という名のオブジェクトに代入することを表している。このコードを実行することによって、プログラムが終了するまで、a は 1 を保持している状態になる。
a = 1
a = 1
b = 1
c = a + b# 2
d = c - 2# ?
e = a + 2# ?
f = d + e# ?
37
スカラーオブジェクトには様々な種類があり、そのうち、値を 1 つだけし
か保持できないオブジェクトをスカラーとよぶ。スカラーに値を保持させるためには、そのスカラーに値を付与する必要がある。この付与作業を代入という。
Python では、オブジェクトに値を代入するとき、代入演算子"=" を使う。Python において、"=" は代入演算子のことであり、右辺の値またはオブジェクトを、左辺のオブジェクトに代入する機能を持つ。"=" は数学上の等しいという意味はない。
次のコードは、1 という値を、a という名のオブジェクトに代入することを表している。このコードを実行することによって、プログラムが終了するまで、a は 1 を保持している状態になる。
a = 1
a = 1
b = 1
c = a + b# 2
d = c - 2# 0
e = a + 2# 3
f = d + e# 3
38
スカラーオブジェクトには様々な種類があり、そのうち、値を 1 つだけし
か保持できないオブジェクトをスカラーとよぶ。スカラーに値を保持させるためには、そのスカラーに値を付与する必要がある。この付与作業を代入という。
Python では、オブジェクトに値を代入するとき、代入演算子"=" を使う。Python において、"=" は代入演算子のことであり、右辺の値またはオブジェクトを、左辺のオブジェクトに代入する機能を持つ。"=" は数学上の等しいという意味はない。
次のコードは、1 という値を、a という名のオブジェクトに代入することを表している。このコードを実行することによって、プログラムが終了するまで、a は 1 を保持している状態になる。
a = 1
a = 1
b = 1
c = a + b# 2
d = c - 2# 0
e = a + 2# 3
f = d + e# 3
d = 0このように書くと、「d に 0 を代入する」という意味になり、「d は 0 を保持している」という意味にならない。
39
問題S1-1
a = 1
b = 1
c = a + b
a = 2
d = a + b
e = c + d
赤色で書かれたオブジェクト(スカラー)が保持している値を答えよ。
a = 9
b = 2
c = a * b
d = a / b
e = a % b
f = a // b
a = 9
b = 2
c = a + a // b
a = c % 2 * 5
c = a // 2 - b * 2
d = (a + a) // b
40
問題S1-1 - 解答
a = 1
b = 1
c = a + b# 2
a = 2# 2
d = a + b# 3
e = c + d# 5
a = 9
b = 2
c = a * b# 18
d = a / b# 4.5
e = a % b# 1
f = a // b# 4
a = 9
b = 2
c = a + a // b# 13
a = c % 2 * 5# 5
c = a // 2 - b * 2# -2
d = (a + a) // b# 5
赤色で書かれたオブジェクト(スカラー)が保持している値を答えよ。
41
問題S1-2
a = 1
b = 1
c = a + b
d = c + 2
e = e + 2
f = a + b + c + d + e
a = 1
b = 1
c = a + b
a = a + 3
d = a + b
e = a + b + c
a = 1
b = 1
c = a + b
a = a + c
c = c + 1
d = a + b + c
赤色で書かれたオブジェクト(スカラー)が保持している値を答えよ。
42
問題S1-2 - 解答
a = 1
b = 1
c = a + b# 2
d = c + 2# 4
e = e + 2# NameError
f = a + b + c + d + e# NameError
a = 1
b = 1
c = a + b# 2
a = a + 3# 4
d = a + b# 5
e = a + b + c# 7
a = 1
b = 1
c = a + b# 2
a = a + c# 3
c = c + 1# 3
d = a + b + c# 7
赤色で書かれたオブジェクト(スカラー)が保持している値を答えよ。
43
スカラーa = 9b = 2
a + b
a - b
a * b
a / b
a % b
a // b
スカラーに代入できる値は 1 つだけである。この値は、数値だけでなく、文字あるいは複数の文字からなる文字列であってもよい。ただし、文字列を代入したときの四則演算と数値を代入したときの四則演算は異なる定義がなされている。
a = 'TTACG'b = 'ACG'
a + b
a - b
a * b
a / b
a = 'ATG'b = 3
a + b
a - b
a * b
a / b
数値の四則演算と文字列の四則演算の結果を答えよ。ただし、Python が処理できない演算もあることに注意すること。 44
スカラーa = 9b = 2
a + b# 11
a - b# 7
a * b# 18
a / b# 4.5
a % b# 1
a // b# 4
a = 'TTACG'b = 'ACG'
a + b# TTACGACG
a - b# TypeError
a * b# TypeError
a / b# TypeError
a = 'ATG'b = 3
a + b# TypeError
a - b# TypeError
a * b# ATGATGATG
a / b# TypeError
数値の四則演算と文字列の四則演算の結果を答えよ。ただし、Python が処理できない演算もあることに注意すること。
スカラーに代入できる値は 1 つだけである。この値は、数値だけでなく、文字あるいは複数の文字からなる文字列であってもよい。ただし、文字列を代入したときの四則演算と数値を代入したときの四則演算は異なる定義がなされている。
45
リスト
46
リストリストは、同じ属性を持った値のまとまりである。例え
ば、大豆 5 個体の乾燥重量データを解析したいと仮定する。5 個体の乾燥重量をすべてスカラーオブジェクトに保存しようとすると、5 つのオブジェクトを用意する必要がある。これに対して、リストオブジェクトを使えば、5 つの値を1 つのオブジェクトに保存できるようになる。リストを使うことで次のようなメリットがある。
• 入力回数が減り、入力漏れや入力ミスなどが少なくなる。また、プログラム全体のコード量が少なく、全体を見渡しやすくなる。
• 全データを対象とした演算処理(合計・平均など)が容易に行えるようになる。
• すべての要素に対して、同じ処理を繰り返したいときに、処理を1回だけ書けばいい。
個体
乾燥重量 12 10 1311 11
weight_1 = 12weight_2 = 10weight_3 = 11weight_4 = 13weight_5 = 11
weights = [12, 10, 11, 13, 11]
47
リスト
weights = [12, 10, 11, 13, 11]
n = len(weights)s = sum(weights)
mean = s / n
weight_1 = 12weight_2 = 10weight_3 = 11weight_4 = 13weight_5 = 11
n = 5s = weight_1 + weight_2 + wegiht_3 + weight_4
mean = s / n
例えば、同じ属性を複数の要素に対して平均値を求めたいとき、スカラーの場合は、すべてのオブジェクトの合計値を計算し、その合計値をオブジェクトの個数で割る計算を行う。
リストの全要素に対して平均値を求めたいとき、全要素を束ねて一括で計算することができる。
スカラー リスト
48
リスト
weights = [12, 10, 11, 13, 11]
n = len(weights)s = sum(weights)
mean = s / n
weight_1 = 12weight_2 = 10weight_3 = 11weight_4 = 13weight_5 = 11
n = 5s = weight_1 + weight_2 + wegiht_3 + weight_4
mean = s / n
例えば、同じ属性を複数の要素に対して平均値を求めたいとき、スカラーの場合は、すべてのオブジェクトの合計値を計算し、その合計値をオブジェクトの個数で割る計算を行う。
リストの全要素に対して平均値を求めたいとき、全要素を束ねて一括で計算することができる。
スカラー リスト
49
タイプミスがあり、ここでエラーが起こる。
weight_5 を 足し忘れている
リストリストは、複数の要素をカンマ区切りで並べて、そ
の外側を角括弧で囲むことで作られる。リストに含まれる要素は、束として扱われる。そのため、リストに対する演算や操作などは、リスト中の全要素に対して行われる。リストの特徴を調べるとき、右にあるような機能を使うと便利である。
w = [12, 10, 11, 13, 11]
len(w)
sum(w)
sorted(w)
50
リストリストは、複数の要素をカンマ区切りで並べて、そ
の外側を角括弧で囲むことで作られる。リストに含まれる要素は、束として扱われる。そのため、リストに対する演算や操作などは、リスト中の全要素に対して行われる。リストの特徴を調べるとき、右にあるような機能を使うと便利である。
w = [12, 10, 11, 13, 11]
len(w)# 5
sum(w)# 57
sorted(w)# [10, 11, 11, 12, 13]
51
リストリストは、複数の要素をカンマ区切りで並べて、そ
の外側を角括弧で囲むことで作られる。リストに含まれる要素は、束として扱われる。そのため、リストに対する演算や操作などは、リスト中の全要素に対して行われる。リストの特徴を調べるとき、右にあるような機能を使うと便利である。
リストは基本的に全要素を束ねて使うことが多いが、一部の要素だけを取り出したり、変更したりすることができる。その際、リストの先頭から数えて何番目の要素を取り出したいのかを、整数で指定する必要がある。ただし、Python では 0 番から数え始めることに注意。
w = [12, 10, 11, 13, 11]
w[0]
w[1]
w[2]
w[2] = 9
w
52
リストリストは、複数の要素をカンマ区切りで並べて、そ
の外側を角括弧で囲むことで作られる。リストに含まれる要素は、束として扱われる。そのため、リストに対する演算や操作などは、リスト中の全要素に対して行われる。リストの特徴を調べるとき、右にあるような機能を使うと便利である。
リストは基本的に全要素を束ねて使うことが多いが、一部の要素だけを取り出したり、変更したりすることができる。その際、リストの先頭から数えて何番目の要素を取り出したいのかを、整数で指定する必要がある。ただし、Python では 0 番から数え始めることに注意。
w = [12, 10, 11, 13, 11]
w[0]# 12
w[1]# 10
w[2]# 11
w[2] = 9
w# [12, 10, 9, 13, 11]
53
問題L1-1
w = [1, 3, 5, 7, 9]
w[2] = 4
w[0] = w[1]
w[4] = w[1] + 2
w[3] = w[3] * 2
w
赤色で書かれたオブジェクトが保持している値を答えよ。
w = [4, 5, 2, 6, 3, 1]
w = sorted(w)
w = [w[2], w[0], w[1]]
w[0] = 5
w[3] = 5
w
w = [0, 2, 4, 6, 8]
w = sorted(w)
w[0] = w[0] + w[1]
w[1] = w[0] + w[1]
w = [sum(w), len(w)]
w
54
問題L1-1 - 解答
w = [1, 3, 5, 7, 9]
w[2] = 4# [1, 3, 4, 7, 9]
w[0] = w[1]# [3, 3, 4, 7, 9]
w[4] = w[1] + 2# [3, 3, 4, 7, 5]
w[3] = w[3] * 2# [3, 3, 4, 14, 5]
w# [3, 3, 4, 14, 5]
赤色で書かれたオブジェクトが保持している値を答えよ。
w = [4, 5, 2, 6, 3, 1]
w = sorted(w)# [1, 2, 3, 4, 5, 6]
w = [w[2], w[0], w[1]]# [3, 1, 2]
w[0] = 5# [5, 1, 2]
w[3] = 5# IndexError
w# [5, 1, 2]
w = [0, 2, 4, 6, 8]
w = sorted(w)# [0, 2, 4, 6, 8]
w[0] = w[0] + w[1]# [2, 2, 4, 6, 8]
w[1] = w[0] + w[1]# [2, 4, 4, 6, 8]
w = [sum(w), len(w)]# [24, 5]
w# [24, 5]
55
リスト
a = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a
a[1]
p = [1, 3]a[p]
a[[2, 4]]
a[[0, 3, 5, 6, 7, 8]]
リストから任意の位置の 1 要素を取り出したい場合、その要素の位置番号を指定することで取り出せる。リストから複数個の要素を取り出したい場合も、拡張機能を使う必要があります。右のように、複数の位置番号を代入するとエラーが出てきます。
56
リスト
57
リスト
58
リスト
59
リスト
60
リスト(スライス)リストから連続して並んでいる要素をま
とめて取り出す(スライス)とき、":" を使うと便利な場合がある。
a = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a
a[1]
a[0:2]
a[2:6]
a[:4]
a[5:]
61
リスト(スライス)
a = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a# [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a[1]# 3
a[0:2]
a[2:6]
a[:4]
a[5:]
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
0 1 2 3 4 5 6 7 8 109
62
リスト(スライス)
a = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a# [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a[1]# 3
a[0:2]# [1, 3]
a[2:6]
a[:4]
a[5:]
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
0 1 2 3 4 5 6 7 8 109
63
リスト(スライス)
a = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a# [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a[1]# 3
a[0:2]# [1, 3]
a[2:6]# [5, 7, 9, 2]
a[:4]
a[5:]
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
0 1 2 3 4 5 6 7 8 109
64
リスト(スライス)
a = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a# [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a[1]# 3
a[0:2]# [1, 3]
a[2:6]# [5, 7, 9, 2]
a[:4]# [1, 3, 5, 7]
a[5:]
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
0 1 2 3 4 5 6 7 8 109
65
リスト(スライス)
a = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a# [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
a[1]# 3
a[0:2]# [1, 3]
a[2:6]# [5, 7, 9, 2]
a[:4]# [1, 3, 5, 7]
a[5:]# [2, 4, 6, 8, 0]
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
1 3 5 7 9 2 4 6 8 0
0 1 2 3 4 5 6 7 8 109
66
リスト(要素の追加)a = [5, 6, 7]
a.append(9)a
a.insert(0, 8)a
a.insert(2, 1)a
a.append(4)a
すでに作られたリストに新たな要素を追加することができる。リストの後尾に要素を追加するにはappend 関数(メソッド)を使用する。また、リストの先頭あるいは指定した位置に要素を挿入するにはinsert 関数(メソッド)を使用する。
67
リスト(要素の追加)a = [5, 6, 7]
a.append(9)a
a.insert(0, 8)a
a.insert(2, 1)a
a.append(4)a
5 6 7リストの最後に要素 9 を追加する。
68
リスト(要素の追加)a = [5, 6, 7]
a.append(9)a# [5, 6, 7, 9]
a.insert(0, 8)a
a.insert(2, 1)a
a.append(4)a
5 6 7リストの最後に要素 9 を追加する。
9
69
リスト(要素の追加)a = [5, 6, 7]
a.append(9)a# [5, 6, 7, 9]
a.insert(0, 8)a# [8, 5, 6, 7, 9]
a.insert(2, 1)a
a.append(4)a
5 6 7 9リストの位置 0 に、要素 8 を挿入する。
8
70
リスト(要素の追加)a = [5, 6, 7]
a.append(9)a# [5, 6, 7, 9]
a.insert(0, 8)a# [8, 5, 6, 7, 9]
a.insert(2, 1)a# [8, 5, 1, 6, 7, 9]
a.append(4)a
8 5 6 7 9リストの位置 2 に、要素 1 を挿入する。
1
71
リスト(要素の追加)a = [5, 6, 7]
a.append(9)a# [5, 6, 7, 9]
a.insert(0, 8)a# [8, 5, 6, 7, 9]
a.insert(2, 1)a# [8, 5, 1, 6, 7, 9]
a.append(4)a# [8, 5, 1, 6, 7, 9, 4]
8 5 1 6 7 9リストの最後に要素 4 を追加する。
4
72
リスト(二次元)リストは複数の要素を含むことができる。これまでに
要素が数値の場合を見てきた。スカラーで見たように、スカラーは数値と文字列の両方を保持できる。これと同様に、リストの要素も数値だけでなく、文字列にすることもできる。また、正確に言えば、リストの各要素は、オブジェクトとすることができる。
リストはオブジェクトの 1 種である。リストの要素をオブジェクトにすることができる。つまり、リストの中にリストを入れることができる。このようなリストを二次元リストなどと呼んでいる。
二次元リストは、データ解析ではあまり使われていない。その代わり、二次元リストを拡張した NumPy 二次元配列あるいは Pandas データフレームがよく使われている。二次元配列とデータフレームは、データを行列のように扱えるため、非常に取り扱いやすい。
a b 0 d e
1 3 1
1 3 5 7
0 2 4 6
1 2 3 4 5 6 7 8
a = [1, 3, 5, 7]b = [1, 3, 1]d = [1, 2, 3, 4, 5, 6, 7, 8]e = [0, 2, 4, 6]
x = [a, b, 0, d, e]
a
b
d
e
x
73
リスト(二次元)二次元リストから要素を取り出すときは、親リストに
対して位置を指定して要素を取り出し、次に取り出した要素(子リスト)に対して再度位置を指定して要素を取り出す。
a b 0 d e
1 3 1
0 2 4 6
1 2 3 4 5 6 7 8a = [1, 3, 5, 7]b = [1, 3, 1]d = [1, 2, 3, 4, 5, 6, 7, 8]e = [0, 2, 4, 6]
x = [a, b, 0, d, e]
tmp = x[0]tmp[2]
x[3][5]
b
d
e
x
1 3 5 7a
74
リスト(二次元)二次元リストから要素を取り出すときは、親リストに
対して位置を指定して要素を取り出し、次に取り出した要素(子リスト)に対して再度位置を指定して要素を取り出す。
a b 0 d e
1 3 1
1 3 5 7
0 2 4 6
1 2 3 4 5 6 7 8a = [1, 3, 5, 7]b = [1, 3, 1]d = [1, 2, 3, 4, 5, 6, 7, 8]e = [0, 2, 4, 6]
x = [a, b, 0, d, e]
tmp = x[0]tmp[2]# 5
x[3][5]
tmp
b
d
e
x
5
1 3 5 7a
75
リスト(二次元)二次元リストから要素を取り出すときは、親リストに
対して位置を指定して要素を取り出し、次に取り出した要素(子リスト)に対して再度位置を指定して要素を取り出す。
a b 0 d e
1 3 1
0 2 4 6
1 2 3 4 5 6 7 8a = [1, 3, 5, 7]b = [1, 3, 1]d = [1, 2, 3, 4, 5, 6, 7, 8]e = [0, 2, 4, 6]
x = [a, b, 0, d, e]
tmp = x[0]tmp[2]# 5
x[3][5]# 6
b
d
e
x
1 3 5 7a
76
ディクショナリ
77
ディクショナリリストは、複数の要素(オブジェクト)を一括に保存で
きるオブジェクトである。リストから要素を取り出すとき、その要素の位置番号を使用する。そのため、リストの中から特定の要素を取り出すには、その要素の位置番号を予め知っている必要がある。
これに対して、ディクショナリも複数の要素(オブジェクト)を一括に保存できる。リストと異なり、ディクショナリは、各要素に名前をつけることができる。このため、ディクショナリでは、名前を使って要素を取り出せる。このとき、要素の名前のことをキーという。
個体
乾燥重量 12 10 1311 11
weights = {'wt': 12,'ko1': 10,'ko2': 11,'ko3': 13,'ko4': 11
}
系統 wt ko1 ko3ko2 ko4
78
ディクショナリディクショナリの要素を取り出すときは、キーを使
う。キーは文字列であるから、両端に引用符を与える必要がある。
weights = {'wt': 12,'ko1': 10,'ko2': 11
}
weights['wt']# 12
weights['ko1']
weights['ko5']
79
ディクショナリディクショナリの要素を取り出すときは、キーを使
う。キーは文字列であるから、両端に引用符を与える必要がある。
weights = {'wt': 12,'ko1': 10,'ko2': 11
}
weights['wt']# 12
weights['ko1']# 10
weights['ko5']# KeyError
80
ディクショナリ
個体
乾燥重量 12 10 1311 11
weights = {'wt': [12, 11, 13, 14, 13],'ko1': [9, 9, 8, 9],'ko2': [6, 7, 8, 6, 8]
}
wt 系統
個体
乾燥重量 9 9 98ko1 系統
個体
乾燥重量 6 7 68 8ko2 系統
81
ディクショナリディクショナリの要素を取り出すときは、キーを使
う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。
weights = {'wt': [12, 11, 13, 14, 13],'ko1': [9, 9, 8, 9],'ko2': [6, 7, 8, 6, 8]
}
weights['wt']# [12, 11, 13, 14, 13]
weights['ko1'][2]
weights['ko2'][1:4]
82
ディクショナリディクショナリの要素を取り出すときは、キーを使
う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。
weights = {'wt': [12, 11, 13, 14, 13],'ko1': [9, 9, 8, 9],'ko2': [6, 7, 8, 6, 8]
}
weights['wt']# [12, 11, 13, 14, 13]
weights['ko1'][2]# [8]
weights['ko2'][1:4]# [7, 8, 6]
83
ディクショナリディクショナリの要素を取り出すときは、キーを使
う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。
ディクショナリの要素の値を変更するとき、キーを指定して変更する。リストにおいて、位置番号を指定して要素の値を変更するときと似ている。
weights = {'wt': [12, 11, 13, 14, 13],'ko1': [9, 9, 8, 9],'ko2': [6, 7, 8, 6, 8]
}
weights['wt'] = [2, 2, 3]
weights# {'wt': [2, 2, 3], 'ko1': [9, 9, 8, 9], 'ko2': [6, 7, 8, 6, 8]}
84
ディクショナリディクショナリの要素を取り出すときは、キーを使
う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。
ディクショナリの要素の値を変更するとき、キーを指定して変更する。リストにおいて、位置番号を指定して要素の値を変更するときと似ている。また、ディクショナリに要素を追加するときは、update 関数(メソッド)を使用する。ただし、update を使用するとき、既存の値を上書きしないように注意すること。
weights = {'wt': [12, 11, 13, 14, 13],'ko1': [9, 9, 8, 9],'ko2': [6, 7, 8, 6, 8]
}
weights.update({'ko3': [1, 3, 1]})
weights# {'wt': [12, 11, 13, 14, 13], 'ko1': [9, 9, 8, 9], 'ko2': [6, 7, 8, 6, 8], 'ko3': [1, 3, 1]}
weights.update({'wt': [0, 0, 0]})
weights# {'wt': [0, 0, 0], 'ko1': [9, 9, 8, 9], 'ko2': [6, 7, 8, 6, 8], 'ko3': [1, 3, 1]}
85
ディクショナリディクショナリの要素を取り出すときは、キーを使
う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。
ディクショナリの要素の値を変更するとき、キーを指定して変更する。リストにおいて、位置番号を指定して要素の値を変更するときと似ている。また、ディクショナリに要素を追加するときは、update 関数(メソッド)を使用する。ただし、update を使用するとき、既存の値を上書きしないように注意すること。ディクショナリから要素を削除するときは、pop 関数(メソッド)を使用する。
weights = {'wt': [12, 11, 13, 14, 13],'ko1': [9, 9, 8, 9],'ko2': [6, 7, 8, 6, 8]
}
weights.pop('ko1')
weights# {'wt': [12, 11, 13, 14, 13], 'ko2': [6, 7, 8, 6, 8], 'ko3': [1, 3, 1]}
weights.pop('ko1')# KeyError
86
リストとディクショナリ
複数の要素(オブジェクト)を保存できる。リスト中のオブジェクトは、位置番号で管理されている。
複数の要素(オブジェクト)を保存できる。ディクショナリ中のオブジェクトは、名前で管理されている。
リスト ディクショナリ
互いに区別する必要のない同じ性質もつ複数の要素を束ねて扱いたいときに利用する。
互いに区別する必要のある複数の要素を束ねて扱いたいときに利用する。
順序関係が重要な複数の要素を扱いたいときに利用する。
有限個のラベルでラベリングされた要素を束ねて扱いたいときに利用する。
87
Python 基本構文
88
基本構文Python でプログラムを書くうえで、Python の単語と文
法を覚える必要がある。英語とは異なり、Python で使われている単語は 50 個前後であり、このうち最もよく使われるものは 30 数個程度しかない。また、Python で使われている文法も約十数種類しかなく、特によく使われている文法は3, 4 種類しかない。
True
False def
return
from
as
for
is
and
or
not
if
elif
else
import
None break
pass
continue
lambda finally
try
raise
except
in class
while
yield
del
global
async
assert
nonlocal
await
enumerate
zip
with
89
基本構文
True
False def
return
from
as
for
is
and
or
not
if
elif
else
import
None break
pass
continue
lambda finally
try
raise
except
in class
while
yield
条件構文 繰り返し構文 関数 例外処理del
global
withasync
assert
nonlocal
await
enumerate
zip
初心者レベル
???
Python でプログラムを書くうえで、Python の単語と文法を覚える必要がある。英語とは異なり、Python で使われている単語は 50 個前後であり、このうち最もよく使われるものは 30 数個程度しかない。また、Python で使われている文法も約十数種類しかなく、特によく使われている文法は3, 4 種類しかない。
90
条件構文
True
False
is and
ornot
if
elif
elseNone
91
Assign 2 to a.Assign 0 to b.Assign 0 to c.If a > 1, then assign 1 to b, assign 2 to c.Assign 0 to d.
条件構文(if 文)Python の条件構文は if、elif、else などの
単語を使う。Python の条件構文は必ず if から始まる。条件構文の 1 行目には、if とともに条件を書く。条件判別後の処理は、2 行目以降に書く。ただし、条件判別後の処理は、条件構文の一部であることを明示するために、行の先頭にインデントを入れる。
右に条件構文の例を示した。この条件構文では「もし a > 1ならば、b に 1 を代入し、c に2 を代入する。」ことを表している。
a = 2b = 0c = 0
if a > 1 :b = 1c = 2
d = 092
Assign 2 to a.Assign 0 to b.Assign 0 to c.If a > 1, then assign 1 to b, assign 2 to c.Assign 0 to d.
条件構文(if 文)Python の条件構文は if、elif、else などの
単語を使う。Python の条件構文は必ず if から始まる。条件構文の 1 行目には、if とともに条件を書く。条件判別後の処理は、2 行目以降に書く。ただし、条件判別後の処理は、条件構文の一部であることを明示するために、行の先頭にインデントを入れる。
右に条件構文の例を示した。この条件構文では「もし a > 1ならば、b に 1 を代入し、c に2 を代入する。」ことを表している。
a = 2b = 0c = 0
if a > 1 :b = 1c = 2
d = 0
条件構文ブロック
英語仮定法
93
条件構文(if 文)a = 2
b = 0c = 0
if a > 1 :
b = 1c = 2
d = 3
94
条件構文(if 文)a = 2
b = 0c = 0
if a > 1 :
b = 1c = 2
d = 3
条件構文ブロックインデント
条件構文の開始
判定条件
条件構文の終了
インデント
インデントは、タブまたはスペースキーで入力する。• タブ 1 個分• スペース 4 個分• スペース 2 個分
英語キーボード 日本語キーボード
95
条件構文(if 文)a = 2
b = 0c = 0
if a > 1 :
b = 1c = 2
d = 3
a = 2b = 0c = 0
if a > 1 :
b = 1c = 2
d = 3
インデントがあるため、条件構文がまだ終わっていない。そのため、もし判定条件(a > 1)が真ならば、オブジェクト b に 1、オブジェクト c が 2 を代入される。
条件構文がすでに終了しているので、判定条件の真偽にかかわらず、オブジェクト b に 1、オブジェクト c に 2 が代入される。
Assign True to a.Assign 0 to b.Assign 0 to c.If a is larger than 1, then assign 1 to b, assign 2 to c.Assign 0 to d.
96
問題C1-1赤色で書かれたオブジェクトが保持している値を答えよ。
a = 1b = 0
if a > 1:b = 1
b
a = 1b = 0
if a < 1:b = 1
b
a = 1b = 0
if a >= 1:b = 1
b
a = 1b = 0
if a <= 1:b = 1
b
a = 1b = 0
if a != 1:b = 1
b
a = 1b = 0
if a == 1:b = 1
b
97
問題C1-1 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = 1b = 0
if a > 1:b = 1
b# 0
a = 1b = 0
if a < 1:b = 1
b# 0
a = 1b = 0
if a >= 1:b = 1
b# 1
a = 1b = 0
if a <= 1:b = 1
b# 1
a = 1b = 0
if a != 1:b = 1
b# 0
a = 1b = 0
if a == 1:b = 1
b# 1
98
問題C1-2赤色で書かれたオブジェクトが保持している値を答えよ。
a = 1b = 1c = 0
if a > 0:c = 1
if b > 0:c = 2
c
a = 1b = 1c = 0
if a > 0:if b > 1:
c = 1
c
a = 1b = 1c = 0
if a > 0:if b > 1:
c = 1c = 2
c = 3
c
99
問題C1-2 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = 1b = 1c = 0
if a > 0:c = 1
if b > 0:c = 2
c# 2
a = 1b = 1c = 0
if a > 0:if b > 1:
c = 1
c# 0
a = 1b = 1c = 0
if a > 0:if b > 1:
c = 1c = 2
c = 3
c# 3
100
条件構文(if-else 文)a = 81b = ''
if a > 60 :b = 'passing'
if a <= 60:b = 'failing'
b
これまでに見てきた条件構文は「もし~ならば・・・をする」のように、条件を満たせば処理を行うものであった。
これに対して、ある条件を満たした時に処理 A を、満たさなかった時に処理 B を行いたい場合は、if 文を続けて 2 つ書けばいい。
101
条件構文(if-else 文)a = 81b = ''
if a > 60 :b = 'passing'
if a <= 60:b = 'failing'
b# passing
これまでに見てきた条件構文は「もし~ならば・・・をする」のように、条件を満たせば処理を行うものであった。
これに対して、ある条件を満たした時に処理 A を、満たさなかった時に処理 B を行いたい場合は、if 文を続けて 2 つ書けばいい。しかし、if文を 2 つ続けて書くことで、両者は独立に扱われる。つまり、同じ条件を 2 回判断していることに等しい。理論的にも、処理的にも煩雑である。このような場合は、if と else を用いて条件構文を作成すると、理論的にも処理的にもシンプルになる。
a = 81b = ''
if a > 60 :b = 'passing'
else:b = 'failing'
b# passing
もし a > 60 ならば b に passing を代入する。その後、もし a ≤ 60 ならば b に failing を代入する。
もし a > 60 ならば b に passing を代入し、さもければ b に failing を代入する。
102
問題C1-3赤色で書かれたオブジェクトが保持している値を答えよ。
a = 1b = 0
if a > 0:b = 1
else:b = 2
b
a = 1b = 0c = 0
if a > 0:if b > 0:
c = 1else:
c = 2
c
a = 1b = 0c = 0
if a > 0:if b > 0:
c = 1else:
c = 2
c
103
問題C1-3 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = 1b = 0
if a > 0:b = 1
else:b = 2
b# 1
a = 1b = 0c = 0
if a > 0:if b > 0:
c = 1else:
c = 2
c# 0
a = 1b = 0c = 0
if a > 0:if b > 0:
c = 1else:
c = 2
c# 2
104
問題C1-4赤色で書かれたオブジェクトが保持している値を答えよ。
a = 0b = 0c = 0
if a > 0:if b > 0:
c = 1else:
c = 2else:
if b > 0:c = 3
else:c = 4
c
a = 0b = 1c = 0
if a > 0:if b > 0:
c = 1else:
c = 2else:
if b > 0:c = 3
else:c = 4
c
a = 0b = 0c = 0
if a > 0:if b > 0:
c = 1else:
c = 2else:
if b > 0:c = 3
c = 4
c
105
問題C1-4 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = 0b = 0c = 0
if a > 0:if b > 0:
c = 1else:
c = 2else:
if b > 0:c = 3
else:c = 4
c# 4
a = 0b = 1c = 0
if a > 0:if b > 0:
c = 1else:
c = 2else:
if b > 0:c = 3
else:c = 4
c
a = 0b = 0c = 0
if a > 0:if b > 0:
c = 1else:
c = 2else:
if b > 0:c = 3
c = 4
c# 4
IndentationError
106
条件構文(if-elif-else 文)a = 81b = ''
if a > 90 :b = 'excellent'
if a > 80:b = 'good'
if a > 60:b = 'passing'
if a <= 60:b = 'failing'
b
1 つのオブジェクトに対して複数の閾値を設けて条件判定したい場合は、複数の if 文を使って書く。
得点 成績90 点超え excellent80 点超え 90 以下 good60 点超え 80 以下 passing60 以下 failing
107
条件構文(if-elif-else 文)a = 81b = ''
if a > 90 :b = 'excellent'
if a > 80:b = 'good'
# good
if a > 60:b = 'passing'
# passing
if a <= 60:b = 'failing'
b# passing
1 つのオブジェクトに対して複数の閾値を設けて条件判定したい場合は、複数の if 文を使って書く。ただし、その場合、if 文の順序について注意する必要がある。
得点 成績90 点超え excellent80 点超え 90 以下 good60 点超え 80 以下 passing60 以下 failing
108
条件構文(if-elif-else 文)a = 81b = ''
if a > 90 :b = 'excellent'
if a > 80:b = 'good'
# good
if a > 60:b = 'passing'
# passing
if a <= 60:b = 'failing'
b# passing
1 つのオブジェクトに対して複数の閾値を設けて条件判定したい場合は、複数の if 文を使って書く。ただし、その場合、if 文の順序について注意する必要がある。また、if 文を複数書くと、それぞ
れが独立に処理されるため、理論が煩雑になる。そこで、複数の閾値判定が連鎖的に行えるように if-elif 文を使うことができる。
a = 81b = ''
if a > 90 :b = 'excellent'
elif a > 80:b = 'good'
elif a > 60:b = 'passing'
elif a >= 0:b = 'failing'
b# good得点 成績
90 点超え excellent80 点超え 90 以下 good60 点超え 80 以下 passing60 以下 failing
109
条件構文(if-elif-else 文)a = 81b = ''
if a > 90 :b = 'excellent'
if a > 80:b = 'good'
# good
if a > 60:b = 'passing'
# passing
if a <= 60:b = 'failing'
b# passing
1 つのオブジェクトに対して複数の閾値を設けて条件判定したい場合は、複数の if 文を使って書く。ただし、その場合、if 文の順序について注意する必要がある。また、if 文を複数書くと、それぞ
れが独立に処理されるため、理論が煩雑になる。そこで、複数の閾値判定が連鎖的に行えるように if-elif 文を使うことができる。必要に応じて最後に else を使うこともできる。
a = 81b = ''
if a > 90 :b = 'excellent'
elif a > 80:b = 'good'
elif a > 60:b = 'passing'
else:b = 'failing'
b# good得点 成績
90 点超え excellent80 点超え 90 以下 good60 点超え 80 以下 passing60 以下 failing
110
問題C1-5赤色で書かれたオブジェクトが保持している値を答えよ。
a = 11s = ''
if (3 <= a) and (a <= 5):s = 'spring'
elif (6 <= a) and (a <= 8):s = 'summer'
elif (9 <= a) and (a <= 11):s = 'autumn'
else:s = 'winter'
s
a = 3600000t = 0
if a <= 1950000:t = (a - 0) * 0.05
elif a <= 3300000:t = (a - 97500) * 0.10
elif a <= 6950000:t = (a - 427500) * 0.20
elif a <= 9000000:t = (a - 636000) * 0.23
elif a <= 18000000:t = (a - 1536000) * 0.33
elif a <= 40000000:t = (a - 2796000) * 0.40
else:t = (a - 4796000) * 0.45
t
a = 4d = ''
if a == 1:d = 'Mon'
elif a == 2:d = 'Tue'
elif a == 3:d = 'Wed'
elif a == 4:d = 'Thu'
ellf a == 5:d = 'Fri'
elif a == 6:d = 'Sat'
elif a == 7:d = 'Sun'
d
111
問題C1-5 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = 11s = ''
if (3 <= a) and (a <= 5):s = 'spring'
elif (6 <= a) and (a <= 8):s = 'summer'
elif (9 <= a) and (a <= 11):s = 'autumn'
else:s = 'winter'
s# autumn
a = 3600000t = 0
if a <= 1950000:t = (a - 0) * 0.05
elif a <= 3300000:t = (a - 97500) * 0.10
elif a <= 6950000:t = (a - 427500) * 0.20
elif a <= 9000000:t = (a - 636000) * 0.23
elif a <= 18000000:t = (a - 1536000) * 0.33
elif a <= 40000000:t = (a - 2796000) * 0.40
else:t = (a - 4796000) * 0.45
t# 634500.0
a = 4d = ''
if a == 1:d = 'Mon'
elif a == 2:d = 'Tue'
elif a == 3:d = 'Wed'
elif a == 4:d = 'Thu'
ellf a == 5:d = 'Fri'
elif a == 6:d = 'Sat'
elif a == 7:d = 'Sun'
d
SyntaxError
112
問題C1-6赤色で書かれたオブジェクトが保持している値を答えよ。
a = 2b = 4c = 0
if (a%2 == 0) and (b%2 == 0):c = 1
else:c = 2
c
if a%2 == 0:if b%2 == 0:
c = 3else:
c = 4else:
c = 5c
a = 2b = 4c = 0
if a%2 == 0:if b%2 == 0:
c = 1else:
c = 2else:
if b%2 == 0:c = 3
else:c = 4
c
a = 2b = 4c = 0
if (a%2==0) and (b%2==0):c = 1
elif (a%2==0) and (b%2!=0):c = 2
elif (a%2!=0) and (b%2==0):c = 3
elif (a%2!=0) and (b%2!=0):c = 4
c
113
問題C1-6 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = 2b = 4c = 0
if (a%2 == 0) and (b%2 == 0):c = 1
else:c = 2
c# 1
if a%2 == 0:if b%2 == 0:
c = 3else:
c = 4else:
c = 5c# 3
a = 2b = 4c = 0
if a%2 == 0:if b%2 == 0:
c = 1else:
c = 2else:
if b%2 == 0:c = 3
else:c = 4
c# 1
a = 2b = 4c = 0
if (a%2==0) and (b%2==0):c = 1
elif (a%2==0) and (b%2!=0):c = 2
elif (a%2!=0) and (b%2==0):c = 3
elif (a%2!=0) and (b%2!=0):c = 4
c# 1
114
繰り返し構文for
while
in
continue
break
115
繰り返し構文(while 文)繰り返し構文は、複数のオブジェクトに対して、同
じ処理を繰り返したい場合に使う構文である。そのためには、それらの複数のオブジェクトをあらかじめリストあるいはディクショナリに代入しておく必要がある。
あるリストを考えて、そのリスト中の各要素を1000 倍する処理を考える。右上の例は、繰り返し構文を使わない方法で、右下の例は繰り返し構文(while 文)を使う方法である。
a = [9, 12, 10, 11, 13]b = []
i = 0while i < len(a):
b.append(a[i] * 1000)i = i + 1
b
a = [9, 12, 10, 11, 13]b = [0, 0, 0, 0, 0]b[0] = a[0] * 1000b[1] = a[1] * 1000b[2] = a[2] * 1000b[3] = a[3] * 1000b[4] = a[4] * 1000b
116
繰り返し構文(while 文)
a = [9, 12, 10, 11, 13]
b = []
i = 0
while i < len(a):
b.append(a[i] * 1000)i = i + 1
b
117
繰り返し構文(while 文)
a = [9, 12, 10, 11, 13]
b = []
i = 0
while i < len(a):
b.append(a[i] * 1000)i = i + 1
b
繰り返し構文ブロックインデント
繰り返し構文の開始
判定条件
繰り返し構文の終了
118
問題L1-1赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = a[i] * ib.append(x)
i = i + 1
b
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = a[i] * i
if i == 2:x = a[i] - 2
b.append(x)
i = i + 1
b
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = 0
if i % 2 == 0:x = a[i] * 2
else:x = a[i] * 1
b.append(x)
i = i + 1
b
119
問題L1-1 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = a[i] * ib.append(x)
i = i + 1
b# [0, 1, 4, 9, 16, 25]
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = a[i] * i
if i == 2:x = a[i] - 2
b.append(x)
i = i + 1
b# [0, 1, 0, 9, 16, 25]
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = 0
if i % 2 == 0:x = a[i] * 2
else:x = a[i] * 1
b.append(x)
i = i + 1
b# [2, 1, 4, 3, 8, 5] 120
問題L1-2赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = a[i] * i
if i == 2:x = a[i] - 2
else:b.append(x)
i = i + 1
b
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = a[i] * iy = a[i] / (i + 1)
if i == 2:z = x + y
else:z = x - y
b.append(x)
b
121
問題L1-2 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = a[i] * i
if i == 2:x = a[i] - 2
else:b.append(x)
i = i + 1
b# [0, 1, 9, 16, 25]
a = [1, 1, 2, 3, 4, 5]b = []
i = 0
while i < len(a):x = a[i] * iy = a[i] / (i + 1)
if i == 2:z = x + y
else:z = x - y
b.append(x)
b
i が常に 0 であるため、無限ループになる。
122
繰り返し構文(for 文)
a = [9, 12, 10, 11, 13]
b = []
for w in a :
b.append(w * 1000)
b
無限ループにならないようにwhile 文の代わりに for 文が一般的に使われている。for 文は、リストの要素数だけしか繰り返さない。
123
繰り返し構文(for 文)
a = [9, 12, 10, 11, 13]
b = []
for w in a :
b.append(w * 1000)
b
繰り返し構文ブロックインデント
繰り返し構文の開始
繰り返す対象
繰り返し構文の終了
一時変数
124
問題L2-1赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 1, 2, 3, 4, 5]b = []
for w in a:b.append(w * 2)
b
a = [1, 1, 2, 3, 4, 5]b = []
for i in range(len(a)):b.append(a[i] * i)
b
a = [1, 1, 2, 3, 4, 5]b = []
for i, w in enumerate(a):b.append(w * i)
b
125
問題L2-1 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 1, 2, 3, 4, 5]b = []
for w in a:b.append(w * 2)
b# [2, 2, 4, 6, 8, 10]
a = [1, 1, 2, 3, 4, 5]b = []
for i in range(len(a)):b.append(a[i] * i)
b# [0, 1, 4, 9, 16, 25]
a = [1, 1, 2, 3, 4, 5]b = []
for i, w in enumerate(a):b.append(i * w)
b# [0, 1, 4, 9, 16, 25]
for 文で、リスト中の要素とその位置番号を同時に取得したい場合は enumerate 関数を使用する。
126
問題L2-2赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 1, 2, 3, 4, 5]b = []
for w in a:if w % 2 == 0:
b.append(w)
b
a = [1, 1, 2, 3, 4, 5]b = []
for w in a:if w % 2 == 0:
b.append(w)else:
b.append(w + 1)
b
a = [9, 8, 7, 6, 5, 4]b = []
for i, w in enumerate(a):if i % 2 == 0:
b.append(w * i)else:
b.append(w * (i + 1))
b
127
問題L2-2 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 1, 2, 3, 4, 5]b = []
for w in a:if w % 2 == 0:
b.append(w)
b# [2, 4]
a = [1, 1, 2, 3, 4, 5]b = []
for w in a:if w % 2 == 0:
b.append(w)else:
b.append(w + 1)
b# [2, 2, 2, 4, 4, 6]
a = [9, 8, 7, 6, 5, 4]b = []
for i, w in enumerate(a):if i % 2 == 0:
b.append(w * i)else:
b.append(w * (i + 1))
b# [0, 16, 14, 24, 20, 24]
128
問題L2-3赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 2, 3, 4, 5, 6]b = []c = []
for w in a:if w % 2 == 0:
b.append(w)else:
c.append(w)
b
c
a = [1, 2, 3, 4, 5, 6]b = []c = []
for w in a:if w % 2 == 0:
b.append(w)else:
c.append(w + 1)
b
c
a = [9, 8, 7, 6, 5, 4]b = []c = []d = []for w in a:
if w % 3 == 0:b.append(w)
elif w % 3 == 1:c.append(w)
else:d.append(w)
b
c
d
129
問題L2-3 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = [1, 2, 3, 4, 5, 6]b = []c = []
for w in a:if w % 2 == 0:
b.append(w)else:
c.append(w)
b# [2, 4, 6]
c# [1, 3, 5]
a = [1, 2, 3, 4, 5, 6]b = []c = []
for w in a:if w % 2 == 0:
b.append(w)else:
c.append(w + 1)
b# [2, 4, 6]
c# [2, 4, 6]
a = [9, 8, 7, 6, 5, 4]b = []c = []d = []for w in a:
if w % 3 == 0:b.append(w)
elif w % 3 == 1:c.append(w)
else:d.append(w)
b# [9, 6]
c# [7, 4]
d# [8, 5] 130
問題L2-4赤色で書かれたオブジェクトが保持している値を答えよ。
a = [3, 4, 6, 9, 10]b = []
for m in a:if (3<=m) and (m<=5):
b.append('spring')elif (6<=m) and (m<=8):
b.append('summer')elif (9<=m) and (m<=11):
b.append('autumn')else:
b.append('winter')
b
131
問題L2-4 - 解答赤色で書かれたオブジェクトが保持している値を答えよ。
a = [3, 4, 6, 9, 10]b = []
for m in a:if (3<=m) and (m<=5):
b.append('spring')elif (6<=m) and (m<=8):
b.append('summer')elif (9<=m) and (m<=11):
b.append('autumn')else:
b.append('winter')
b# ['spring', 'spring', 'summer', 'autumn', 'autumn']
132
問題L2-5if 構文と for 構文を使用して、月の数字を英語名に書き換えよ。
a = [3, 4, 6, 9, 10]b = []
b# ['March', 'April', 'June', 'September', 'October']
133
問題L2-5 - 解答if 構文と for 構文を使用して、月の数字を英語名に書き換えよ。
a = [3, 4, 6, 9, 10]b = []
b# ['March', 'April', 'June', 'September', 'October']
a = [3, 4, 6, 9, 10]b = []
for m in a:if m == 1:
x = 'January'elif m == 2:
x = 'February'elif m == 3:
x = 'March'elif m == 4:
x = 'April'elif m == 5:
x = 'May'elif m == 6:
x = 'June'elif m == 7:
x = 'July'
elif m == 8:x = 'August'
elif m == 9:x = 'September'
elif m == 10:x = 'October'
elif m == 11:x = 'November'
elif m == 12:x = 'December'
else:x = '???'
b.append(x)
b# ['March', 'April', 'June', 'September', 'October']
134
問題L2-6オブジェクト a、b に保存されている DNA 中の A、C、G、T の出現回数、出現割合を計算せよ。
seq = 'ACGTACGTGCTAGCTAGC'
seq[0:1]# 'A'
seq[1:2]# 'C'
seq[1:4]# 'CGT'
seq[len(seq) - 1]# 'C'
a = 'CGCCCGTGCTAGGGCATGGG' b = 'TTATCCGCTATAGCTTTTAGCT'
135
問題L2-6 - 解答オブジェクト a、b に保存されている DNA 中の A、C、G、T の出現回数、出現割合を計算せよ。
seq = 'ACGTACGTGCTAGCTAGC'
seq[0:1]# 'A'
seq[1:2]# 'C'
seq[1:4]# 'CGT'
seq[len(seq) - 1]# 'C'
a = 'CGCCCGTGCTAGGGCATGGG'nA = 0nC = 0nG = 0nT = 0for i in range(len(a)):
x = a[i:(i+1)]if x == 'A':
nA = nA + 1elif x == 'C':
nC = nC + 1elif x == 'G':
nG = nG + 1elif x == 'T':
nT = nT + 1[nA, nC, nG, nT]l = len(a)[nA/l, nC/l, nG/l, nT/l]
b = 'TTATCCGCTATAGCTTTTAGCT'
d = {'A':0, 'C':0,'G': 0, 'T': 0}
for i in range(len(b)):x = b[i:(i+1)]d[x] = d[x] + 1
d
l = len(b)r = {'A': d['A'] / l,
'C': d['C'] / l,'G': d['G'] / l,'T': d['T'] / l}
r
136
Python 基本構文
137
関数
138
問題F1-1赤色で書かれたオブジェクト(リスト)の平均値を求めよ。
a = [1, 2, 3, 4, 5, 6, 7]
b = [4, 8, 3, 5, 9, 8, 1, 1]
c = [11.2, 13.4, 9.6, 9.6]
d = [2.4, 3.3 4.6, 2.8, 1.8]
e = [6.7, 7.7, 7.5, 5.9, 5.6]
f = [4.8, 3.1, 4.3, 4.2, 5.0]
a = [1, 4, 7, 9, 10, 11]
b = [5, 4, 1, 3, 8]
c = [1.1, 0.6, 0.7, 0.3, 1.2]
d = [2.0, 4.1, 4.3, 3.3]
e = [6.2, 6.4, 6.1]
f = [5.0, 5.5, 5.2. 6.1, 6.4]
139
問題F1-1 - 解答赤色で書かれたオブジェクト(リスト)の平均値を求めよ。
a = [1, 2, 3, 4, 5, 6, 7]sum(a) / len(a)
b = [4, 8, 3, 5, 9, 8, 1, 1]
c = [11.2, 13.4, 9.6, 9.6]
d = [2.4, 3.3 4.6, 2.8, 1.8]
e = [6.7, 7.7, 7.5, 5.9, 5.6]
f = [4.8, 3.1, 4.3, 4.2, 5.0]
a = [1, 4, 7, 9, 10, 11]
b = [5, 4, 1, 3, 8]
c = [1.1, 0.6, 0.7, 0.3, 1.2]
d = [2.0, 4.1, 4.3, 3.3]
e = [6.2, 6.4, 6.1]
f = [5.0, 5.5, 5.2. 6.1, 6.4]
140
問題F1-1 - 解答赤色で書かれたオブジェクト(リスト)の平均値を求めよ。
a = [1, 4, 7, 9, 10, 11]sum(a) / len(a)
b = [5, 4, 1, 3, 8]sum(b) / len(b)
c = [1.1, 0.6, 0.7, 0.3, 1.2]sum(c) / len(c)
d = [2.0, 4.1, 4.3, 3.3]sum(d) / len(d)
e = [6.2, 6.4, 6.1]sum(e) / len(e)
f = [5.0, 5.5, 5.2. 6.1, 6.4]sum(f) / len(f)
a = [1, 2, 3, 4, 5, 6, 7]sum(a) / len(a)
b = [4, 8, 3, 5, 9, 8, 1, 1]sum(b) / len(b)
c = [11.2, 13.4, 9.6, 9.6]sum(c) / len(c)
d = [2.4, 3.3 4.6, 2.8, 1.8]sum(d) / len(d)
e = [6.7, 7.7, 7.5, 5.9, 5.6]sum(e) / len(e)
f = [4.8, 3.1, 4.3, 4.2, 5.0]sum(f) / len(f)
141
問題F1-2左のコードを参考にして年収600万円および年収900万円の人の所得税を計算せよ。
a = 3600000t = 0
if a <= 1950000:t = (a - 0) * 0.05
elif a <= 3300000:t = (a - 97500) * 0.10
elif a <= 6950000:t = (a - 427500) * 0.20
elif a <= 9000000:t = (a - 636000) * 0.23
elif a <= 18000000:t = (a - 1536000) * 0.33
elif a <= 40000000:t = (a - 2796000) * 0.40
else:t = (a - 4796000) * 0.45
t142
問題F1-2 - 解答左のコードを参考にして年収600万円および年収900万円の人の所得税を計算せよ。
a = 3600000t = 0
if a <= 1950000:t = (a - 0) * 0.05
elif a <= 3300000:t = (a - 97500) * 0.10
elif a <= 6950000:t = (a - 427500) * 0.20
elif a <= 9000000:t = (a - 636000) * 0.23
elif a <= 18000000:t = (a - 1536000) * 0.33
elif a <= 40000000:t = (a - 2796000) * 0.40
else:t = (a - 4796000) * 0.45
t
a = 6000000t = 0
if a <= 1950000:t = (a - 0) * 0.05
elif a <= 3300000:t = (a - 97500) * 0.10
elif a <= 6950000:t = (a - 427500) * 0.20
elif a <= 9000000:t = (a - 636000) * 0.23
elif a <= 18000000:t = (a - 1536000) * 0.33
elif a <= 40000000:t = (a - 2796000) * 0.40
else:t = (a - 4796000) * 0.45
t
a = 9000000t = 0
if a <= 1950000:t = (a - 0) * 0.05
elif a <= 3300000:t = (a - 97500) * 0.10
elif a <= 6950000:t = (a - 427500) * 0.20
elif a <= 9000000:t = (a - 636000) * 0.23
elif a <= 18000000:t = (a - 1536000) * 0.33
elif a <= 40000000:t = (a - 2796000) * 0.40
else:t = (a - 4796000) * 0.45
t143
関数同じ処理を繰り返すとき、その処理をまとめ
てパッケージ化することができる。このパッケージ化された処理群を関数という。Pythonで関数を作るには次の def と return をセットとして使う。右下は、平均を求める機能を関数として定義した例である。
def mean(x):m = sum(x) / len(x)return m
a = [12, 11, 10]mean(a)# 11.0
a = [12, 11, 10]sum(a) / len(a)# 11.0
144
def mean(x):
m = sum(x) / len(x)
return m
a = [12, 11]mean(a)
b = [5, 6]mean(b)
関数
145
def mean(x):
m = sum(x) / len(x)
return m
a = [12, 11]mean(a)
b = [5, 6]mean(b)
関数
関数ブロックインデント
関数定義の開始
関数名
関数定義の終了
引数
146
問題F1-3左のコードを参考にして年収600万円および年収900万円の人の所得税を計算せよ。
a = 3600000t = 0
if a <= 1950000:t = (a - 0) * 0.05
elif a <= 3300000:t = (a - 97500) * 0.10
elif a <= 6950000:t = (a - 427500) * 0.20
elif a <= 9000000:t = (a - 636000) * 0.23
elif a <= 18000000:t = (a - 1536000) * 0.33
elif a <= 40000000:t = (a - 2796000) * 0.40
else:t = (a - 4796000) * 0.45
t
a = 6000000 a = 9000000
147
問題F1-3 - 解答左のコードを参考にして年収600万円および年収900万円の人の所得税を計算せよ。
a = 3600000t = 0
if a <= 1950000:t = (a - 0) * 0.05
elif a <= 3300000:t = (a - 97500) * 0.10
elif a <= 6950000:t = (a - 427500) * 0.20
elif a <= 9000000:t = (a - 636000) * 0.23
elif a <= 18000000:t = (a - 1536000) * 0.33
elif a <= 40000000:t = (a - 2796000) * 0.40
else:t = (a - 4796000) * 0.45
t
def calctax(x):t = 0if x <= 1950000:
t = (x - 0) * 0.05elif x <= 3300000:
t = (x - 97500) * 0.10elif x <= 6950000:
t = (x - 427500) * 0.20elif x <= 9000000:
t = (x - 636000) * 0.23elif x <= 18000000:
t = (x - 1536000) * 0.33elif x <= 40000000:
t = (x - 2796000) * 0.40else:
t = (x - 4796000) * 0.45return t
calctax(6000000)
calctax(9000000)
148
問題F1-4リスト中の要素のうち、奇数の要素の個数を求める関数を作成せよ。
a = [2, 1, 7, 4, 8, 3]# answer => 3
a = [2, 1, 7, 4, 8, 3]# answer => 1 + 7 + 3 = 11
a = [2, 1, 7, 4, 8, 3]# answer => (1+7+3)/3 = 3.667
リスト中の要素のうち、奇数の要素の和を求める関数を作成せよ。
リスト中の要素のうち、奇数の要素の平均を求める関数を作成せよ。
149
問題F1-4 - 解答
def calc_odd_len(x):n = 0
for i in x:if i % 2 == 1:
n = n + 1
return n
a = [2, 1, 7, 4, 8, 3]calc_odd_len(a)
b = [1, 3, 5, 7]calc_odd_len(b)
c = [2, 4, 6, 8]calc_odd_len(c)
リスト中の要素のうち、奇数の要素の個数を求める関数を作成せよ。
リスト中の要素のうち、奇数の要素の和を求める関数を作成せよ。
リスト中の要素のうち、奇数の要素の平均を求める関数を作成せよ。
a = [2, 1, 7, 4, 8, 3]# answer => 1 + 7 + 3 = 11
a = [2, 1, 7, 4, 8, 3]# answer => (1+7+3)/3 = 3.667
150
問題F1-4 - 解答
def calc_odd_len(x):n = 0
for i in x:if i % 2 == 1:
n = n + 1
return n
a = [2, 1, 7, 4, 8, 3]calc_odd_len(a)
b = [1, 3, 5, 7]calc_odd_len(b)
c = [2, 4, 6, 8]calc_odd_len(c)
def calc_odd_sum(x):s = 0
for i in x:if i % 2 == 1:
s = s + i
return s
a = [2, 1, 7, 4, 8, 3]calc_odd_sum(a)
b = [1, 3, 5, 7]calc_odd_sum(b)
c = [2, 4, 6, 8]calc_odd_sum(c)
def calc_odd_mean(x):s = 0n = 0for i in x:
if i % 2 == 1:s = s + in = n + 1
m = s / n return m
a = [2, 1, 7, 4, 8, 3]calc_odd_mean(a)
リスト中の要素のうち、奇数の要素の個数を求める関数を作成せよ。
リスト中の要素のうち、奇数の要素の和を求める関数を作成せよ。
リスト中の要素のうち、奇数の要素の平均を求める関数を作成せよ。
151
問題F1-4 - 解答(別解)
def calc_odd_len(x):n = 0
for i in x:if i % 2 == 1:
n = n + 1
return n
a = [2, 1, 7, 4, 8, 3]calc_odd_len(a)
b = [1, 3, 5, 7]calc_odd_len(b)
c = [2, 4, 6, 8]calc_odd_len(c)
def calc_odd_sum(x):s = 0
for i in x:if i % 2 == 1:
s = s + i
return s
a = [2, 1, 7, 4, 8, 3]calc_odd_sum(a)
b = [1, 3, 5, 7]calc_odd_sum(b)
c = [2, 4, 6, 8]calc_odd_sum(c)
def calc_odd_mean(x):n = calc_odd_len(x)s = calc_odd_sum(x) m = s / n return m
a = [2, 1, 7, 4, 8, 3]calc_odd_mean(a)
リスト中の要素のうち、奇数の要素の個数を求める関数を作成せよ。
リスト中の要素のうち、奇数の要素の和を求める関数を作成せよ。
リスト中の要素のうち、奇数の要素の平均を求める関数を作成せよ。
152
パッケージ
153
パッケージ自分で定義している関数の他に、他の開発者が定義
した関数を使用することもできる。開発者が開発した複数の関数をひとつ塊にまとめたものをライブラリー(モジュール)という。さらに複数のモジュールをひとつの塊にまとめたものをパッケージという。
ファイル処理関数データ操作関数視覚化関数
パッケージ
モジュール
154
パッケージ自分で定義している関数の他に、他の開発者が定義
した関数を使用することもできる。開発者が開発した複数の関数をひとつ塊にまとめたものをライブラリー(モジュール)という。さらに複数のモジュールをひとつの塊にまとめたものをパッケージという。パッケージは、各開発者・開発団体の公式ウェブサ
イトあるいは GitHub や PyPI などのレポジトリで配布されている。例えば、PyPI では現在 16.9 万のパッケージが登録されている。個人でも簡単に登録できるので、研究目的の場合は、あまりマイナーなパッケージを使わないようにすること。
155
パッケージNumPy
SciPy
Pandas
ベクトル・行列の高速演算線形代数
統計処理
微分方程式・積分
パラメーター最適化
データ操作
matplotlib
Seaborn
高機能視覚化ユーザー数多い
matplotlib を補完
OpenCV
PIL / Pillow
画像解析動画解析
簡易画像処理
機械学習
scikit-image画像処理機械学習
scikit-learn
tensorflow
モデリング統計的機械学習
深層学習
Chainer深層学習
156
パッケージimport numpy
a = numpy.array([1, 3, 5])b = numpy.array([2, 4, 6])
import numpy as np
a = np.array([1, 3, 5])b = np.array([2, 4, 6])
パッケージを使うとき、import を使ってパッケージの全機能を読み込むことをできる。例えば、データ処理用ライブラリーの NumPy の全機能を読み込むとき、右のようにする。パッケージ中の関数(メソッド)を使うとき、パッケージ名の後に . をつけて、必要な関数を呼び出す(調達する)。例えば、NumPy 中のarray 関数を使いたい場合は、右のようにする。パッケージ名が長くて、読み込み後に略名を与える
ことができる。この際に、右のように as を使用する。略名を与えた以降、略名を用いて関数などの呼び出しが可能になる。
157
パッケージ
import matplotlib.pyplot
matplotlib.pyplot.figure()
import matplotlib.pyplot as pltplt.figure()
from matplotlib import pyplotpyplot.figure()
from matplotlib import pyplot as pltplt.figure()
あるパッケージ中のあるモジュールを呼び出すときは、パッケージ名とモジュール名を . でつなげてimport する。例えば、matplotlib パッケージ中のpyplot モジュールの機能を呼び出して使うとき、右のようにする。pyplot モジュール中の関数を使うときは、パッケージ名、モジュール名、関数名をすべて明記する必要がある。例えば、pyplot モジュール中のfigure 関数(メソッド)を使うときは、右のようにする。このように関数の呼び出し文が長くなった時に、略記を使うと便利である。また、関数の呼び出しが長くなるのを避けるために、
モジュールの呼び出し時に from を使う場合もある。
158