ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf ·...

58
ロボットソフトウェア特論 (2) 2018.4.18 電気通信大学 大学院情報理工学研究科 末廣尚士

Upload: others

Post on 21-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

ロボットソフトウェア特論 (2)

2018.4.18

電気通信大学

大学院情報理工学研究科

末廣尚士

Page 2: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

2. Python入門- Pythonの特徴

インタプリタ インタプリタ v.s. コンパイラ

段付けが構文的に意味を持つ 段付けによるブロック構造

柔軟なデータ型 リスト、辞書

オブジェクト指向

拡張性 C言語インタフェース

内観機能 プログラムの中から変数などの情報を得ることができる

参考:日本Pythonユーザ会 <http://www.python.jp/>

2

Page 3: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 参考書

オンラインドキュメント http://docs.python.jp/2/

チュートリアル http://docs.python.jp/2/tutorial/index.html

「Python 入門」(オライリー・ジャパン)

「はじめてのPython」(オライリー・ジャパン)

Dive into Python 2

3

Page 4: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- Python関連のインストール推奨OS: Ubuntu 16.04

python-visual:3Dグラフィックス

numpy:数値演算

matplotlib:グラフ描画

ipython, jupyter :強化版インタラクティブ環境

4

robot:~$ sudo pip install jupyter

robot:~$ sudo apt-get install python-visual

robot:~$ sudo apt-get install python-matplotlib

Page 5: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- pythonの使い方

スクリプトとして使う エディタでプログラムを書く

pythonコマンドでスクリプトファイルを指定して実行する

モジュールとして使う エディタでプログラムを書く

スクリプトやpython実行環境の中からインポートする

インタラクティブに使う python実行環境の中で一行ずつ入力,実行する

インタラクティブに使いながらプログラムを書く 数行ずつインタラクティブに実行する

最後にまとめてプログラムにできる5

これがロボットを動かす時にとても便利

結果を見ながらデータ処理,グラフを描くのに便利

Page 6: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- PythonとC++の比較

6

Python

C++

#!/usr/bin/env python

print “hello world!”

include <iostream>

using namespace std;int main() {

cout << “hello world!”<< endl;return 0;

}

Page 7: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- Python入門Hello World

変数

データ型

演算子

制御構造

関数

モジュール

内観機能

オブジェクト(次回)

7

Page 8: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- とにかく使う(command-line)

インタラクティブにやるのは、とても簡単

または,

8

$ python...>>> 1+23>>>

$ ipython...In [1]: 1+2Out[1]: 3

In [2]:

Page 9: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- とにかく使う(idle)

idleはエディタと実行環境を行き来できる統合開発環境

idle のインストール

python idleを使う python idleのアイコンをクリックして起動

この状態はエディットモード

メニューで,[run] → [python shell]を選ぶ

pythonのプロンプトが出たら後はlinuxと同じ

9

$ sudo apt-get install idle

Page 10: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- Hello World(スクリプトを書く)

エディタを起動(たとえばemacs) 中身を書いてhello.pyとして保存

エディタを抜けてpythonコマンドで実行する

idleを起動 同様に中身を書いてhello.pyとして保存

同時にidleの中で実行して試すことができる

idleを抜けてpythonコマンドで実行することもできる

10

Page 11: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- jupyterを使う

jupyterを起動

起動したディレクトリーをルートとしてwebサーバとwebブラウザが立ち上がる

webブラウザ上でプログラムを書くことができる

数行単位(cell)で部分ごとに実行して試せる

mark down記法によるコメントが付けられる

実行結果を説明用にhtmlにすることができる

最終結果をpythonプログラムにすることができる11

$ jupyter notebook

Page 12: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- jupyterの実行画面

12

Page 13: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- Hello World(スクリプト)

スクリプトファイル hello.py の中身

13

#!/usr/bin/env python# -*- coding: utf-8 -*-

print "Hello World !“

unixの場合のおまじない“#” は一般にはコメント、でもファイルの先頭の“#!”はシェルコマンドを指定する

コメントなどに日本語を使うときのおまじない.出来れば日本語は使わない方が可搬性が良い.windowsだと,cp932

プログラムの本文

windowsの場合はファイル名で判断するので不要だが,unixでもコマンドとして実行したいならおまじないをつけておくと良い.

Page 14: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- スクリプトの実行(linux)

linuxコマンドシェルでの実行 hello.pyを実行可能にする

Hello World の実行

または,python を呼び出して実行 この場合は実行属性も「おまじない」は不要

14

$ ./hello.pyHello World !

$ chmod a+x hello.py

$ python hello.pyHello World !

Page 15: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- スクリプトの実行(windows)

コマンドウインドウを開いて実行 xxx.pyは自動的にpythonにバインドされるので実行属性や

おまじないはいらない.

またはwindowsのエクスプローラレベルで, hello.pyをダブルクリック

ただし,今回のスクリプトの場合Hello Worldのメッセ時を出力した後,一瞬で消える.

15

C: ....> hello.pyHello World !

Page 16: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- スクリプトの実行(idle)

hello.pyをidleで開く メニュー,[Run]→[Run Module]で実行

16

Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32Type "copyright", "credits" or "license()" for more information.>>> ====================== RESTART ========================>>> hello world!>>>

Page 17: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 変数

変数は宣言なしで使える

変数にはいろいろな型のデータを代入することができる

17

>>> a=1>>> b=2>>> b=2.0>>> c="abc">>> d="def">>> a+b3.0>>> c+d'abcdef'

Page 18: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- データ型

数値(整数、実数など)

文字列

リスト

タプル

辞書

真偽

・18

Page 19: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 数値

19

>>> 11>>> 1+23>>> 2/100>>> 2/10.00.2>>> 2222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222222L>>>

Page 20: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 文字列

“abc” と ‘abc’ の2つの表現が可能

20

>>> 'abc''abc'>>> "abc"'abc'>>>'abc"d"ef''abc"d"ef'>>> 'ab'+"def"'abdef'>>> 'asdf'[3]'f'>>> 'asdfadafsdfasf'[3:7]'fada'>>> 'ab'*4'abababab'>>>

Page 21: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- リスト (list)

とてもフレキシブルなデータ構造

まずは単純なリスト

要素の引用

21

>>> a=[1,2,3,4,5,6]

>>> a[2]3>>> a[-1]6>>> a[2:4][3,4]>>> a[4:][5,6]

Page 22: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- リスト (list)

要素の変更

要素の追加

22

>>> a[2]=5>>> a[1,2,5,4,5,6]>>> a[2:4]=[8,9]>>> a[1,2,8,9,5,6]

>>> a.append(7)>>> a[1,2,8,9,5,6,7]

Page 23: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- リスト (list)

複雑な構造 要素は異なるデータ型でも良い

配列的な使い方

23

>>> a=[1,2,"abc",3.5,["a",4],4,5]>>> a[1, 2, 'abc', 3.5, ['a', 4], 4, 5]

>>> a=[[1,2,3],[4,5,6],[7,8,9]]>>> a[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> a[1][4, 5, 6]>>> a[1][2]6

Page 24: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 代入とコピー3種類のコピー(1)変数への代入

コピーとはいえないが,よく勘違いする.

問題:aの値は?24

>>> a=[1,2,3]>>> a[1, 2, 3]>>> b=a>>> b[1, 2, 3]>>> b[2]=0>>> b[1, 2, 0]>>> a

Page 25: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 代入とコピー3種類のコピー(1)変数への代入

コピーとはいえないが,よく勘違いする.

25

>>> a=[1,2,3]>>> a[1, 2, 3]>>> b=a>>> b[1, 2, 3]>>> b[2]=0>>> b[1, 2, 0]>>> a[1, 2, 0]>>>

Page 26: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 代入とコピー

浅いコピー(shallow copy)(1)

問題:aの値は?

26

>>> a=[1,2,3]>>> b=a[:]>>> b[1, 2, 3]>>> b[2]=0>>> b[1, 2, 0]>>> a

Page 27: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 代入とコピー

浅いコピー(shallow copy)(1)

27

>>> a=[1,2,3]>>> b=a[:]>>> b[1, 2, 3]>>> b[2]=0>>> b[1, 2, 0]>>> a[1, 2, 3]

Page 28: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 代入とコピー

浅いコピー(shallow copy)(2)

問題:aの値は?

28

>>> a=[[1,2,3],[4,5,6],[7,8,9]]>>> b=a[:]>>> b[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> b[1]=[]>>> b[[1, 2, 3], [], [7, 8, 9]]>>> a[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> b[2][2]=0>>> b[[1, 2, 3], [], [7, 8, 0]]>>> a

Page 29: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 代入とコピー

浅いコピー(shallow copy)(2)

29

>>> a=[[1,2,3],[4,5,6],[7,8,9]]>>> b=a[:]>>> b[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> b[1]=[]>>> b[[1, 2, 3], [], [7, 8, 9]]>>> a[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> b[2][2]=0>>> b[[1, 2, 3], [], [7, 8, 0]]>>> a[[1, 2, 3], [4, 5, 6], [7, 8, 0]]

Page 30: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 代入とコピー

深いコピー(deep copy) copyモジュールをインポートする

copy()とdeepcopy()が使える

copy()の方はshallow copy

¥

30

>>> import copy>>> a=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> b=copy.deepcopy(a)>>> b[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> b[2][2]=0>>> b[[1, 2, 3], [4, 5, 6], [7, 8, 0]]>>> a[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Page 31: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 3種類のコピーのイメージ図

変数への代入

浅いコピー(1)

31

[1,2,3]

b:

a: >>> a=[1,2,3]

>>> b=a[1,2,3]a:

>>> b=a[:]

b:

[1,2,3]a:

[1,2,3]

Page 32: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 3種類のコピーのイメージ図

浅いコピー(2)

32

[7,8,9]

a:

>>> a=[[1,2,3],[4,5,6],[7,8,9]]

>>> b=a[:]

b:

[4,5,6][1,2,3]

[ , ]

[7,8,9]

a:

[4,5,6][1,2,3]

[ , ]

[ , ]

Page 33: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 3種類のコピーのイメージ図

深いコピー

33

[7,8,9]

a:

>>> a=[[1,2,3],[4,5,6],[7,8,9]]

>>> b=deepcopy(a)

[4,5,6][1,2,3]

[ , ]

[7,8,9]

b:

[4,5,6][1,2,3]

[ , ]

[7,8,9]

a:

[4,5,6][1,2,3]

[ , ]

Page 34: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- タプル (tuple)

変更のできないリスト

34

>>> a=(1,2,3)>>> a[1]=3

Traceback (most recent call last):File "<pyshell#95>", line 1, in <module>

a[1]=3TypeError: 'tuple' object does not support item assignment>>>

Page 35: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 辞書

キーワードでデータにアクセスできる

35

>>> a={'key1':123, 1:'item1', 3.5:'item2', 'key2':[1,2,3]}>>> a{3.5: 'item2', 1: 'item1', 'key1': 123, 'key2': [1, 2, 3]}>>> a[3.5]'item2'>>> a['key2'][1, 2, 3]>>> a[1]='item1'>>> a[1]={'a1':3, 'a2':5}>>> a{3.5: 'item2', 1: {'a1': 3, 'a2': 5}, 'key1': 123, 'key2': [1, 2, 3]}>>>

Page 36: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 真偽

基本は True と False

条件分岐では0, None,[], {}は偽、その他は真

True は 1 と同じ 2は真だがTrueではない

False は 0 と同じ []は偽だがFalseではない

36

>>> 1 == TrueTrue>>> 2 == TrueFalse>>>

>>> 0 == FalseTrue>>> [] == FalseFalse

Page 37: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 演算子

Cなどと似ている

四則:+, - , *, /, ….

論理:==, !=, >, <>,

文字列やリストも演算の対象?

37

>>> [1] + [2][1, 2]>>> >>> [1,1] < [1]+[2]True>>>

Page 38: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 条件分岐

if と else

38

>>> a=True>>> if a :... print 1... else :... print 2...

1>>> a=False>>> if a :... print 1... else :... print 2

2

ブロックの段付けに注意!

コロン

elseはifと同じレベル!

Page 39: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 条件分岐(スクリプト)

if と else

39

a=Trueif a :

print 1else :

print 2

a=Falseif a :

print 1else :

print 2

pythonではブロックごとに段付けがそろっていることが重要.

段付けの文字数は同一ブロック内で同じ必要があるが,その数自身は重要ではない.

4文字程度がお勧め.

Page 40: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 条件分岐 (and と or)

A and B

A式を実行、真ならばB式も実行、偽ならばB式は実行しない。

この分岐を and then と呼ぶ

A or B

A式を実行、偽ならばB式も実行、真ならばB式は実行しない。

この分岐を or else と呼ぶ.

40

>>> a = True>>> a and 11>>> a = False>>> a and 1False

>>> a = True>>> a or 1True>>> a = False>>> a or 11

Page 41: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 制御構造(ループ)

forループ(for elmt in data-list :) listやtapleの要素を1つずつ取り出して尽きるまで繰り返す

41

>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

sum = 0for i in range(10):

sum = sum + iprint sum

数字のリストを作る関数

ブロックの段付けに注意!

コロン

Page 42: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 制御構造(ループ)

whileループ(while cond : ) 条件が真である限り続ける

42

i = 0sum = 0while i< 10 :

sum = sum + ii = i + 1

print sum

Page 43: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 制御構造(ループからの脱出)

breakを使って1つ上のループを抜ける

43

i = 0sum = 0while True :

sum = sum + ii = i + 1if i >= 10 :

breakprint sum

Page 44: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 関数定義def と return

return がないと値が返らない

44

>>> def test(x, y) :... return 2 * x + y...

>>> test(3 ,2)8

>>> def test(x, y) :... 2*x+y...

>>> test(3,2)>>>

Page 45: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 引数のdefault値の指定

引数のdefault値の指定

呼び出し例

45

def test(x=0, y=0) :return 2 * x + y

>>> test(3,2)8>>> test()0>>> test(3)6>>> test(y=2)2>>>

default値が指定されていると省略できる

キーワード(変数名)で引数を指定できる.これはdefault値が指定されていなくても可能.

Page 46: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 複数の値のreturn複数の値のreturn

複数の値の受け取り

46

def test(x,y) :return x, y, 2*x+y

カンマで区切って複数の値を返すことが出来る

>>> a=test(3,2)>>> a(3, 2, 8)>>> a,b,c=test(3,2)>>> a3>>> b2>>> c8

1つの変数でタプルとしてまとめて受け取ることが出来る

対応した個数の変数でばらばらに受け取ることもできる

Page 47: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 関数についての補足

仮引数はローカル変数

呼び出しは値渡し

変数のアドレスを渡すことはできない 一般には戻り値で結果を返して代入する

どうしても変数に値を入れて戻ってきたいときは,リストや構造体を渡す

47

Page 48: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- モジュール

システムが用意したライブラリや自分の作ったプログラムをmoduleとして読み込むことができる.

読み込むモジュールのディレクトリにパスが通っていなくてはならない.

システム,インストールしたライブラリ,カレントディレクトリはパスが通っている.

48

Page 49: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- モジュールの読み込み(import)

読み込み方は大きく2つ

49

>>> import math>>> sqrt(3)

Traceback (most recent call last):File "<pyshell#1>", line 1

sqrt(3)NameError: name 'sqrt' is not defined>>> math.sqrt(3)1.7320508075688772

>>> from math import *>>> sqrt(3)1.7320508075688772

Page 50: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- モジュールに別名をつける

モジュール名が長いと使いにくい場合は別名を使うと良い.

import module_name as alias_name

50

>>> import math as m>>> m.sqrt(3)1.7320508075688772

Page 51: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 内観機能

それが何であるかを調べる

dir 関数

51

>>> import math>>> dir(math)['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

Page 52: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- オブジェクト

オブジェクトは次回以降,少しずつ

52

Page 53: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

例題2-1 pythonの練習

階乗を求める関数を作る

入力:n (n=0,1,2,....)

出力:n!=1*2*...*n

(1) 繰り返しで1からnまで掛ける。fact1(n)

(2) 再帰呼び出し。fact2(n)

n=0のとき、1

n>0のとき、n*fact2(n-1)

おまけ:nが定義域以外の場合の処理は?

53

Page 54: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

課題1:例題2-1をやる

階乗を求める関数を作る

入力:n (n=0,1,2,....)

出力:n!=1*2*...*n

(1) 繰り返しで1からnまで掛ける。fact1(n)

(2) 再帰呼び出し。fact2(n)

n=0のとき、1

n>0のとき、n*fact2(n-1)

おまけ:nが定義域以外の場合の処理は?

54

Page 55: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 課題1のやり方

エディタやidleで関数fact1, fact2を書く. file名は、report1_学籍番号.py

python を起動して,ファイルをモジュールとして読み込み,関数を試してみて正しく動くことを確認すること.

ファイルを添付して[email protected]

メールの表題は「ロボットソフトウェア特論:課題1」

〆切、4月23日(月)

55

Page 56: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

付2. ロボットRTCのインストールOS: Ubuntu 16.04

講義のHPからRobots.tar.gzをダウンロード

openrtmの下で展開

動作確認

56

robot:~$ cd openrtmrobot:~/openrtm$ tar –zvf Robot.tar.gz

robot:~$ cd openrtm/Robots/arm6dofrobot:~/openrtm/Robots/arm6dof$ python Arm6dof.py

Page 57: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 次回予告

ロボットアームコンポーネントを動かしてrtc_handle.pyを用いて,python環境から扱う.

rtc_handleの旧バージョンの説明はここhttp://www.taka.is.uec.ac.jp/~suehiro/rtm0.4.2/rtc_handle.html

57

Page 58: ロボットソフトウェア特論 (2)suehiro/class2018/presen/lecture02-1.pdf · 2018年度前学期 電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論

電気通信大学大学院情報理工学研究科情報学専攻 ロボットソフトウェア特論2018年度前学期

- 5/2(水)は休講

5/2(水)は休講にします.

そのかわり7/25(水)まで

講義を行います.

58