メタ解法設計者のための Python超入門

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
なぜ今Pythonか? Pythonをお薦めする18の理由
(Rubyistのための) 超音速:ML入門
第6回条件による分岐.
Pythonの文法と便利なモジュール群 久保 幹雄 東京海洋大学.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
プログラミング言語としてのR 情報知能学科 白井 英俊.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
Lightweight Language Weekend ls-lRシェル
基礎プログラミングおよび演習 第9回
プログラミング基礎I(再) 山元進.
最適化ソルバーのための Python言語入門
第2回ネットワークプログラミング 中村 修.
PHP 概要 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
第10回 ソート(1):単純なソートアルゴリズム
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
Bottle/Pythonによる Webアプリ入門
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
プログラミング入門2 第3回 繰り返し文 芝浦工業大学情報工学科 青木 義満
第7回 条件による繰り返し.
プログラミング2 関数
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
繰り返し計算 while文, for文.
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
プログラミング論 II 2008年10月30日 文字列
Cプログラミング演習 第7回 メモリ内でのデータの配置.
アルゴリズムとプログラミング (Algorithms and Programming)
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
プログラムの制御構造 配列・繰り返し.
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
数値計算モジュール NumPy.
プログラミング入門.
統計ソフトウエアRの基礎.
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
情報処理Ⅱ 第3回 2007年10月22日(月).
プログラミングⅡ 第2回.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
情報処理Ⅱ 2005年10月28日(金).
ループだよ!難しいよ! 第5章 while(ループ);.
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
コンパイラ 2012年10月11日
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
モバイルプログラミング第2回 C言語の基礎 (1).
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
情報処理Ⅱ 第3回 2004年10月19日(火).
情報処理Ⅱ 2006年10月20日(金).
C言語講座 四則演算  if ,  switch 制御文.
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
情報処理Ⅱ 第8回:2003年12月9日(火).
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

メタ解法設計者のための Python超入門 久保 幹雄 東京海洋大学

“Hello, world!” “Hello, world!”と出力するプログラム C++版(この講義では覚える必要なし!) #include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; } Python版 print "Hello, world!"

インデント(字下げ)が重要 Pythonではインデント(字下げ)によって,実行文をグループ化をする! if (x > 1) { y=x+1; (行儀の悪い)C++ z=x+y; } else { y=0; z=0; } if x > 1: Pythonだと誰でも y=x+1 z=x+y else: y=z=0 この高さ(インデント)がそろっていないとエラーする!

Pythonをお薦めする訳 キーワード(覚えるべき予約後)が30程度と圧倒的に少ない. 字下げの強要で,誰でも読みやすいプログラム 短時間で開発可能(行数が短く,モジュール豊富) 変数の宣言必要なし インタープリタ(コンパイルする必要なし) メモリ管理も必要なし 多くのプラットフォームで動作(Windows, Mac, Linux) オブジェクト指向(すべてがオブジェクト) しかもフリーソフト

データ型 (1) 標準型 整数型: 32ビットで表現される範囲の整数 長整数型:無限長の整数; 1324L とLを付けて書く. ブール型:真(True)もしくは偽(False) 浮動小数点数型:倍精度の小数; 5.4 や 1. 文字列型:文字から成る(不変)順序型; ”abcd”,’CDEF’

データ型 (2) 複合型 リスト(list):任意の要素から成る(可変)順序型;[1,2,3,”a”], [1,”b”, [2,3,c”] ] タプル(tuple):任意の要素から成る(不変)順序型;(1,2,3,”a”), ( (1,2), (2,”f”,”g”)) 辞書(dictionary): キー(key)と 値(value)の組(key:value)から構成される(可変)マップ型 { "Mary": 126, "Jane": 156} 集合(set):集合を表現する型.

文字列(1) ‘abc’ や “abc” や """ 解を評価する関数.以下の値を返す. - 目的関数値 - 実行可能解からの逸脱量 """ とクオート(’)で囲んで記述 トリプルクオート( """ )は複数行も可

a b c d 文字列(2) x[0] x[1] x[2] x[3] 順序型 (添え字は 0から始まる) x= `abcd’ に対して,x[1] は `b‘ を返す. a b c d x[0] x[1] x[2] x[3]

a b c d スライス表記(1) x[0] x[1] x[2] x[3] スライス表記 (slicing)   i:j は i≦k<j なる整数k iの省略は先頭,jの省略は最後 x= `abcd’ に対して,x[1:3] は `b,c‘, x[1:]は`bcd' a b c d x[0] x[1] x[2] x[3]

a b c d スライス表記(2) x[0] x[1] x[2] x[3] 文字列の長さは,関数 len()   x[i:j] の長さ len(x[i:j]) はj-iに等しい 末尾からの添え字:最後も文字は x[-1] 添え字(インデックス)は区間の間の数字と考える 1 2 3 4 a b c d -4 -3 -2 -1 x[0] x[1] x[2] x[3]

リスト (1) リスト(list):任意の要素から成る順序型 [1,2,3,”a”],[“a”,[”b”,5,5],”c”] と角括弧 [] の中にカンマ区切りで入力 可変(mutable; 変更可能):中身を変更できる. L=[1,1,5,4] に対して L[1]=100} とすると L=[1,100,5,4] スライス表記を用いた代入 L=[1,1,5,4] に対して L[1:3]=[100,200,300] とするとL=[1,100,200,300,4] (長さも増える)

リスト (2) リスト L=[1,1,5,4] に対するメソッド ( .の後ろにキーワードを記述する操作) L.count(x):L内での xの生起回数を返す. L.count(1) -> 2 L.index(x):L内で xが最初に発生する添え字を返す. L.index(5) -> 2 L.reverse():Lを逆順にする. L.reverse() -> L=[4,5,1,1] L.sort(): L を小さい順に並べ替える. L.sort()-> L=[1,1,4,5]

タプル タプル(tuple;組):任意の要素から成る順序型 a,b とカンマで区切るか,丸括弧に入れて(1,2,3,”a”)と記述.入れ子でタプルを定義するときには,括弧は必須 T= ((1,5),("a","b",6)) 不変(immutable):中身の交換はできない. タプルを使った交換 a,b = b,a

辞書 辞書(dictionary): キー(key)と値(value)の組から構成されるマップ型 波括弧 { }の中にカンマに区切って (キー: 値 ) を入力 D={ "Mary": 126, "Jane": 156, "Sara": 170} キーを使って値を取り出す. D[“Sara”] は170を返す. 可変(mutable): D[“Sara”]=130 とすると辞書が変更される. { "Mary": 126, "Jane": 156, "Sara": 130}

集合 要素の重複を削除したり,和集合(union),共通部分(intersection),差集合(difference),対称差集合(symmetric difference)などの集合に対する演算を行うときに用いられる型 可変(変更可能な)型であるset 不変(変更不能な)型であるfronzenset 文字列やリストからset(文字列,リスト)で生成できる.

演算子 (1) 加算,乗算は文字列,リストにも適用可能. 演算の優先順序 比較演算子 括弧 () べき乗(指数演算)** 乗算 * もしくは除算 / 加算 + もしくは減算 - の順 比較演算子 <= は以下 >= は以上 == は等しい != は等しくない

演算子 (2) リストの要素 ブール演算子 (1<4) or (5<4) の結果は? inはリストの要素であるとき真 not inはリストの要素でないとき真 ブール演算子 andは論理積 or は論理和 (1<4) or (5<4) の結果は?

If と else文 条件分岐に用いる. if 条件文: 「・・・せよ」(条件文が真のときに実行される命令) else: 「・・・せよ」(条件文が偽のときに実行される命令) 例 if x<0: print “赤字だよ!” print “なんとかなるさ! ”

for文 反復のための基本 リストや辞書などの反復可能な型を用いる. for 反復ごとに代入される変数 in リスト: 繰り返ししたい命令 i ≦k < j を満たす整数 kから成るリストを返す関数range(i,j)を用いる. range(i)は 0からi-1までのリスト 例:0,1,2,3,4を出力 for x in range(5): print x

リスト内包表記 リスト内包表記(list comprehension) リストの中にfor文を書き,リストを反復生成する. [ (x,x**2,2**x) for x in range(5)] 結果 [(0, 0, 1), (1, 1, 2), (2, 4, 4), (3, 9, 8), (4, 16, 16)] から成るタプルのリストの生成

反復を入力としたその他の関数 リスト内包表記のように,反復を入力とし,1つの値を返す関数: sum, min, max 例  リスト内包表記のように,反復を入力とし,1つの値を返す関数: sum, min, max 例 sum(x for x in range(11)) 結果 55

while文 条件を満たす間は繰り返す while 真のときに繰り返しを行う文: 繰り返ししたい命令 例: 変数 x が正の間だけ 2*x を出力 x=10 while x>0: print 2*x x =x-1

breakとcontinue 反復の途中で抜けるためのキーワード break:反復から抜ける. continue:次の反復処理に飛ばされる. 例: 変数 x が正の間だけ 2*x を出力 x=10 while True: print 2*x x =x-1 if x<=0: break

for-else文 forやwhileの直後のelseブロックが実行される. 例 y=11 for x in range(2,y): forやwhileのループの中で,breakで抜けないときに, forやwhileの直後のelseブロックが実行される. 例 y=11 for x in range(2,y): if y % x==0: break else: print "素数だよ!"

関数 関数の作成 def 関数名(引数): 関数内で行う処理 (return 返値) 例:文字列を合体し,3回繰り返したものを返す. def concatenate3(a,b): c=a+b return 3*c concatenate3(“a”,“b”)と呼び出すと,ababab が返される.

再帰 関数内で自分自身を呼び出し 例:階乗の計算 n! =n×(n-1) ×・・・×2×1 n!=n × (n-1)! (初期条件 0!=1) と再帰的に定義 def factorial(n): if n==0: return 1 else: return n*factorial(n-1)

組み込み関数 set(), list() も組み込み関数 list(‘tomoko’) は [‘t’, ‘o’, ‘m’, ‘o’, ‘k’, ‘o’] を返す. 関数 sorted() は昇順に並べ替えた結果を返す. 例 sorted([6,2,4,5,4]) 結果 [2, 4, 4, 5, 6]

モジュール モジュール プログラムを分割して「ファイル名.py」のファイルに保管したもの.他のプログラムから呼び出して使う. 方法1:モジュールの読み込み import ファイル名 例:平方根の印刷(数学モジュールmathの読み込みと,その中の平方根関数 sqrt()の利用) import math print math.sqrt(2) 方法2:モジュール内の関数の読み込み from ファイル名 import 関数名 (もしくはワイルドカード *) from math import * print sqrt(2)

擬似乱数発生モジュール 擬似乱数発生モジュール random の主要関数 seed(x): xを用いて乱数の初期化を行う.x を省略した場合には現 在のシステム時間で初期化される. random(): [0.0, 1.0) の一様ランダムな浮動小数点型の数を返す. 例:random() -> 0.48777947886 randint(i,j): 整数 i,j に対して i ≦k <j の一様ランダムな整数 k を返す. 例:randint(-5,1) -> -3 shuffle(L): リストLを順序をランダムに混ぜる. 例: L=[1,2,3,4], shuffle(L) -> L=[4, 1, 3, 2] choice(L): リストLからランダムに1つの要素を選択する. 例: L=[1,2,3,4], choice(L) -> 3

ヒープモジュール 優先キューの1つであるヒープの実装 例: ヒープにリスト内の数値を入れる. from heapq import * 例: ヒープにリスト内の数値を入れる. from heapq import * a=[] for item in [5,1,6,7,9,3]: heappush(a,item) ヒープ内の最初の要素(最小の要素)の取り出し: print heappop(a) 結果 1