Top Banner
Python 初心者講習会 孫 建強 農研機構 農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22 数箇所か修正。指摘していただいた方どうも ありがとうございます。
140

2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1...

Aug 29, 2019

Download

Documents

vankhuong
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

Python 初心者講習会

孫建強農研機構 農業情報研究センター

2019年2月22日, 2月25日, 3月1日

1

2019.02.22 数箇所か修正。指摘していただいた方どうもありがとうございます。

Page 2: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · 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

Page 3: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

プログラミング

16

Page 4: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

C/C++

FORTRAN

コンパイラ型言語 インタプリタ型言語

Python

RubyPerl

R

COBOL

Objective-C

ALGOL

JavaScript

中間型言語

JavaC#VB .NET

18

Page 5: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

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

Page 6: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

アプリ開発

数値演算

統計処理

データ処理 機械学習

画像解析

22

Page 7: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

データ処理NumPy

SciPy

Pandas

ベクトル・行列の高速演算線形代数

統計処理微分方程式・積分パラメーター最適化

データ操作

23

Page 8: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

視覚化matplotlib

Seaborn

高機能視覚化ユーザー数多い

matplotlib を補完

24

Page 9: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

画像解析OpenCV

PIL / Pillow

画像解析動画解析

簡易画像処理

機械学習

scikit-image画像処理機械学習

26

Page 10: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

機械学習scikit-learn

tensorflow

モデリング統計的機械学習

深層学習

Chainer深層学習

27

Page 11: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

プログラミング入門

28

Page 12: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

いきなりプログラムを書こうとする。 効率的な処理手順を先に考える。

初心者 中級者

エラーを恐れる。

完璧なプログラムを書こうとする。

様々なエラーを経験している。

頑健性を求めるが完璧を求めない。

29

Page 13: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

いきなりプログラムを書こうとする。

初心者

エラーを恐れる。

完璧なプログラムを書こうとする。

手順をしっかり考えて!

中級者との差はエラーの経験値!

完璧なプログラムは存在しない!

30

Page 14: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

とにかくエラーをたくさん出して経験を積む!

32

Page 15: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

Python オブジェクト

33

Page 16: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

オブジェクトコンピュータでデータを処理するためには、

データや処理手順をコンピュータに保持する必要がある。Python では、オブジェクトと呼ばれている概念を用いてデータや処理手順を記憶させている。オブジェクトには様々な種類があります。

スカラー

リスト

ディクショナリ

関数

クラス

1つの値だけを保持できるオブジェクト。

複数の値またはオブジェクトを保持できるオブジェクト。

複数の値またはオブジェクトを保持でき、それらに名前を付けることができるオブジェクト。

複数の値またはオブジェクトを保存できるうえ、処理手順も保持できる。

なんでも保持できる化け物オブジェクト。

34

Page 17: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

スカラー

35

Page 18: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

スカラーオブジェクトには様々な種類があり、そのうち、値を 1 つだけし

か保持できないオブジェクトをスカラーとよぶ。スカラーに値を保持させるためには、そのスカラーに値を付与する必要がある。この付与作業を代入という。

Python では、オブジェクトに値を代入するとき、代入演算子"=" を使う。Python において、"=" は代入演算子のことであり、右辺の値またはオブジェクトを、左辺のオブジェクトに代入する機能を持つ。"=" は数学上の等しいという意味はない。

次のコードは、1 という値を、a という名のオブジェクトに代入することを表している。このコードを実行することによって、プログラムが終了するまで、a は 1 を保持している状態になる。

a = 136

Page 19: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

スカラーオブジェクトには様々な種類があり、そのうち、値を 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

Page 20: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

スカラーオブジェクトには様々な種類があり、そのうち、値を 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

Page 21: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

スカラーオブジェクトには様々な種類があり、そのうち、値を 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

Page 22: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 23: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 24: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 25: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 26: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

スカラー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

Page 27: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

スカラー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

Page 28: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト

46

Page 29: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リストリストは、同じ属性を持った値のまとまりである。例え

ば、大豆 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

Page 30: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト

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

Page 31: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト

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 を 足し忘れている

Page 32: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リストリストは、複数の要素をカンマ区切りで並べて、そ

の外側を角括弧で囲むことで作られる。リストに含まれる要素は、束として扱われる。そのため、リストに対する演算や操作などは、リスト中の全要素に対して行われる。リストの特徴を調べるとき、右にあるような機能を使うと便利である。

w = [12, 10, 11, 13, 11]

len(w)

sum(w)

sorted(w)

50

Page 33: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リストリストは、複数の要素をカンマ区切りで並べて、そ

の外側を角括弧で囲むことで作られる。リストに含まれる要素は、束として扱われる。そのため、リストに対する演算や操作などは、リスト中の全要素に対して行われる。リストの特徴を調べるとき、右にあるような機能を使うと便利である。

w = [12, 10, 11, 13, 11]

len(w)# 5

sum(w)# 57

sorted(w)# [10, 11, 11, 12, 13]

51

Page 34: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リストリストは、複数の要素をカンマ区切りで並べて、そ

の外側を角括弧で囲むことで作られる。リストに含まれる要素は、束として扱われる。そのため、リストに対する演算や操作などは、リスト中の全要素に対して行われる。リストの特徴を調べるとき、右にあるような機能を使うと便利である。

リストは基本的に全要素を束ねて使うことが多いが、一部の要素だけを取り出したり、変更したりすることができる。その際、リストの先頭から数えて何番目の要素を取り出したいのかを、整数で指定する必要がある。ただし、Python では 0 番から数え始めることに注意。

w = [12, 10, 11, 13, 11]

w[0]

w[1]

w[2]

w[2] = 9

w

52

Page 35: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リストリストは、複数の要素をカンマ区切りで並べて、そ

の外側を角括弧で囲むことで作られる。リストに含まれる要素は、束として扱われる。そのため、リストに対する演算や操作などは、リスト中の全要素に対して行われる。リストの特徴を調べるとき、右にあるような機能を使うと便利である。

リストは基本的に全要素を束ねて使うことが多いが、一部の要素だけを取り出したり、変更したりすることができる。その際、リストの先頭から数えて何番目の要素を取り出したいのかを、整数で指定する必要がある。ただし、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

Page 36: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 37: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 38: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト

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

Page 39: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト

57

Page 40: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト

58

Page 41: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト

59

Page 42: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト

60

Page 43: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(スライス)リストから連続して並んでいる要素をま

とめて取り出す(スライス)とき、":" を使うと便利な場合がある。

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

Page 44: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(スライス)

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

Page 45: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(スライス)

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

Page 46: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(スライス)

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

Page 47: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(スライス)

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

Page 48: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(スライス)

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

Page 49: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(要素の追加)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

Page 50: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(要素の追加)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

Page 51: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(要素の追加)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

Page 52: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(要素の追加)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

Page 53: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(要素の追加)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

Page 54: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(要素の追加)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

Page 55: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(二次元)リストは複数の要素を含むことができる。これまでに

要素が数値の場合を見てきた。スカラーで見たように、スカラーは数値と文字列の両方を保持できる。これと同様に、リストの要素も数値だけでなく、文字列にすることもできる。また、正確に言えば、リストの各要素は、オブジェクトとすることができる。

リストはオブジェクトの 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

Page 56: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(二次元)二次元リストから要素を取り出すときは、親リストに

対して位置を指定して要素を取り出し、次に取り出した要素(子リスト)に対して再度位置を指定して要素を取り出す。

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

Page 57: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(二次元)二次元リストから要素を取り出すときは、親リストに

対して位置を指定して要素を取り出し、次に取り出した要素(子リスト)に対して再度位置を指定して要素を取り出す。

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

Page 58: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リスト(二次元)二次元リストから要素を取り出すときは、親リストに

対して位置を指定して要素を取り出し、次に取り出した要素(子リスト)に対して再度位置を指定して要素を取り出す。

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

Page 59: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリ

77

Page 60: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリリストは、複数の要素(オブジェクト)を一括に保存で

きるオブジェクトである。リストから要素を取り出すとき、その要素の位置番号を使用する。そのため、リストの中から特定の要素を取り出すには、その要素の位置番号を予め知っている必要がある。

これに対して、ディクショナリも複数の要素(オブジェクト)を一括に保存できる。リストと異なり、ディクショナリは、各要素に名前をつけることができる。このため、ディクショナリでは、名前を使って要素を取り出せる。このとき、要素の名前のことをキーという。

個体

乾燥重量 12 10 1311 11

weights = {'wt': 12,'ko1': 10,'ko2': 11,'ko3': 13,'ko4': 11

}

系統 wt ko1 ko3ko2 ko4

78

Page 61: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリディクショナリの要素を取り出すときは、キーを使

う。キーは文字列であるから、両端に引用符を与える必要がある。

weights = {'wt': 12,'ko1': 10,'ko2': 11

}

weights['wt']# 12

weights['ko1']

weights['ko5']

79

Page 62: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリディクショナリの要素を取り出すときは、キーを使

う。キーは文字列であるから、両端に引用符を与える必要がある。

weights = {'wt': 12,'ko1': 10,'ko2': 11

}

weights['wt']# 12

weights['ko1']# 10

weights['ko5']# KeyError

80

Page 63: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリ

個体

乾燥重量 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

Page 64: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリディクショナリの要素を取り出すときは、キーを使

う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。

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

Page 65: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリディクショナリの要素を取り出すときは、キーを使

う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。

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

Page 66: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリディクショナリの要素を取り出すときは、キーを使

う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。

ディクショナリの要素の値を変更するとき、キーを指定して変更する。リストにおいて、位置番号を指定して要素の値を変更するときと似ている。

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

Page 67: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリディクショナリの要素を取り出すときは、キーを使

う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。

ディクショナリの要素の値を変更するとき、キーを指定して変更する。リストにおいて、位置番号を指定して要素の値を変更するときと似ている。また、ディクショナリに要素を追加するときは、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

Page 68: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

ディクショナリディクショナリの要素を取り出すときは、キーを使

う。キーは文字列であるから、両端に引用符を与える必要がある。ディクショナリの各要素にリストが代入されている場合は、ディクショナリとリストの要素の取り出し方法を併用すればいい。

ディクショナリの要素の値を変更するとき、キーを指定して変更する。リストにおいて、位置番号を指定して要素の値を変更するときと似ている。また、ディクショナリに要素を追加するときは、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

Page 69: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

リストとディクショナリ

複数の要素(オブジェクト)を保存できる。リスト中のオブジェクトは、位置番号で管理されている。

複数の要素(オブジェクト)を保存できる。ディクショナリ中のオブジェクトは、名前で管理されている。

リスト ディクショナリ

互いに区別する必要のない同じ性質もつ複数の要素を束ねて扱いたいときに利用する。

互いに区別する必要のある複数の要素を束ねて扱いたいときに利用する。

順序関係が重要な複数の要素を扱いたいときに利用する。

有限個のラベルでラベリングされた要素を束ねて扱いたいときに利用する。

87

Page 70: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

Python 基本構文

88

Page 71: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

基本構文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

Page 72: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

基本構文

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

Page 73: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文

True

False

is and

ornot

if

elif

elseNone

91

Page 74: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

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

Page 75: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

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

Page 76: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文(if 文)a = 2

b = 0c = 0

if a > 1 :

b = 1c = 2

d = 3

94

Page 77: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文(if 文)a = 2

b = 0c = 0

if a > 1 :

b = 1c = 2

d = 3

条件構文ブロックインデント

条件構文の開始

判定条件

条件構文の終了

インデント

インデントは、タブまたはスペースキーで入力する。• タブ 1 個分• スペース 4 個分• スペース 2 個分

英語キーボード 日本語キーボード

95

Page 78: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文(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

Page 79: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 80: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 81: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 82: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 83: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文(if-else 文)a = 81b = ''

if a > 60 :b = 'passing'

if a <= 60:b = 'failing'

b

これまでに見てきた条件構文は「もし~ならば・・・をする」のように、条件を満たせば処理を行うものであった。

これに対して、ある条件を満たした時に処理 A を、満たさなかった時に処理 B を行いたい場合は、if 文を続けて 2 つ書けばいい。

101

Page 84: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文(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

Page 85: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 86: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 87: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 88: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 89: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文(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

Page 90: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文(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

Page 91: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文(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

Page 92: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

条件構文(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

Page 93: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 94: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 95: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 96: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 97: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

繰り返し構文for

while

in

continue

break

115

Page 98: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

繰り返し構文(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

Page 99: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

繰り返し構文(while 文)

a = [9, 12, 10, 11, 13]

b = []

i = 0

while i < len(a):

b.append(a[i] * 1000)i = i + 1

b

117

Page 100: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

繰り返し構文(while 文)

a = [9, 12, 10, 11, 13]

b = []

i = 0

while i < len(a):

b.append(a[i] * 1000)i = i + 1

b

繰り返し構文ブロックインデント

繰り返し構文の開始

判定条件

繰り返し構文の終了

118

Page 101: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 102: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 103: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 104: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 105: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

繰り返し構文(for 文)

a = [9, 12, 10, 11, 13]

b = []

for w in a :

b.append(w * 1000)

b

無限ループにならないようにwhile 文の代わりに for 文が一般的に使われている。for 文は、リストの要素数だけしか繰り返さない。

123

Page 106: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

繰り返し構文(for 文)

a = [9, 12, 10, 11, 13]

b = []

for w in a :

b.append(w * 1000)

b

繰り返し構文ブロックインデント

繰り返し構文の開始

繰り返す対象

繰り返し構文の終了

一時変数

124

Page 107: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 108: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 109: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 110: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 111: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 112: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 113: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 114: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 115: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題L2-5if 構文と for 構文を使用して、月の数字を英語名に書き換えよ。

a = [3, 4, 6, 9, 10]b = []

b# ['March', 'April', 'June', 'September', 'October']

133

Page 116: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 117: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 118: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 119: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

Python 基本構文

137

Page 120: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

関数

138

Page 121: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 122: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 123: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 124: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 125: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 126: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

関数同じ処理を繰り返すとき、その処理をまとめ

てパッケージ化することができる。このパッケージ化された処理群を関数という。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

Page 127: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

def mean(x):

m = sum(x) / len(x)

return m

a = [12, 11]mean(a)

b = [5, 6]mean(b)

関数

145

Page 128: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

def mean(x):

m = sum(x) / len(x)

return m

a = [12, 11]mean(a)

b = [5, 6]mean(b)

関数

関数ブロックインデント

関数定義の開始

関数名

関数定義の終了

引数

146

Page 129: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 130: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 131: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 132: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 133: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 134: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

問題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

Page 135: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

パッケージ

153

Page 136: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

パッケージ自分で定義している関数の他に、他の開発者が定義

した関数を使用することもできる。開発者が開発した複数の関数をひとつ塊にまとめたものをライブラリー(モジュール)という。さらに複数のモジュールをひとつの塊にまとめたものをパッケージという。

ファイル処理関数データ操作関数視覚化関数

パッケージ

モジュール

154

Page 137: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

パッケージ自分で定義している関数の他に、他の開発者が定義

した関数を使用することもできる。開発者が開発した複数の関数をひとつ塊にまとめたものをライブラリー(モジュール)という。さらに複数のモジュールをひとつの塊にまとめたものをパッケージという。パッケージは、各開発者・開発団体の公式ウェブサ

イトあるいは GitHub や PyPI などのレポジトリで配布されている。例えば、PyPI では現在 16.9 万のパッケージが登録されている。個人でも簡単に登録できるので、研究目的の場合は、あまりマイナーなパッケージを使わないようにすること。

155

Page 138: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

パッケージNumPy

SciPy

Pandas

ベクトル・行列の高速演算線形代数

統計処理

微分方程式・積分

パラメーター最適化

データ操作

matplotlib

Seaborn

高機能視覚化ユーザー数多い

matplotlib を補完

OpenCV

PIL / Pillow

画像解析動画解析

簡易画像処理

機械学習

scikit-image画像処理機械学習

scikit-learn

tensorflow

モデリング統計的機械学習

深層学習

Chainer深層学習

156

Page 139: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

パッケージ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

Page 140: 2019年2月22日, 2月25日, 3月1日 - aabbdd.jp · Python 初心者講習会 孫建強 農研機構農業情報研究センター 2019年2月22日, 2月25日, 3月1日 1 2019.02.22数箇所か修正。

パッケージ

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