|
つづき
ホーム 戻る 第12章 クラス 第13章 新しいクラスの作成と既存のクラスの更新 第14章 ブロックと手続きオブジェクト 第15章 この本を超えて
復習:今までに修得したメソッドを含むPython言語
Python プログラム言語の構造:この言語でプログラムを書く方法を規定する基本的ルー ル文字の連続であり、ソースファイルはテキストファイルと 同じプログラムのレイアウトに行やインデントに注意 行とインデントPythonプログラム:1ッ以上の物理行(phycal lline)からなる一連の論 理行(logical line)で構成。各物理行にコメントを付 ける ことができる。 コメント: #記号で始まり終わりまでpythonインタープリタに無視されるる。 ホワイトスペースだけが含まれている行「空行(blank line)」は無視される。 複数行を終了するためには空の物理行を入力する。(ホワイトスペースやコメン トのないもの)enterキーを押す 物理行の終わりが文の終わりを示す。最初の物理行にコメントをいれず、行を バックスラシュで終わらせると連続する2っの物理行を1っの論理行として結合 することができる。開きカッコが閉じない場合も同様。 例 >>> s = ' ここはお国を 何百里 離れて遠い満州に\ 離れて遠い満州に ' # \はバックスラシュの入力結果です。 >>> print s ここはお国を 何百里 離れて遠い満州に' >>> x =(123456789+123456789+123456789) >>> x 370370367 インデント:Pythonはインデントがブロックを示す唯一の手段。カッコ、開始スラッシ ュ、終了区切り文字を使わない。 標準スタイルはインデントの1レベルごとにスペース4を使う。 ソースファイルの1行目はインデントを使わない。 対話型IDLEは>>>の指示に従う。 タブとスペースの混在注意。 ブロック:同じ量のインデントがついた連続する論理行の集まり。 ブロックは論理行のインデントの量がすくなった時点で終了。 ブロック内ではすべての文に同じ量のインデントを付ける。 トークン: 演算子 + 足し算 シーケンスに対しては連結 - 引き算 * 掛け算 シーケンスに対しては繰り返し / 割り算 //を使うと少数点以下切捨ての割り算 % 割り算の余りを求める ** 累乗を計算する。 文 statement
print文 変数やリテラルを出力します。 最後にカンマ , を入れると改行されません。 >>>print 1,2,3,4,5 1 2 3 4 5 >>> print 'apple','orange','banana' apple orange banana
改行 ; を最後にセミコロン ; を入れると改行します。 >>> print 1;2;3;4;5 1 2 3 4 5 >>> print 'apple';'orange';'banana' 'apple' 'orange' 'banana'
if 文 if- ejif- elseブロックを使う ブロック:一連の文をまとめたもの if 式1 : if の後に : をつける。 ブロック 1 複数の文が書ける。インデント元に戻ると終了。 同じブロックにある文のインデントは同じレベルに。 elif 式2 : 次条件。 ブロック2 elif 式3 : 次条件 elif はいくつでも書ける。 ブロック3 else : どの条件にもあたらないときブロックを実行 ブロック4 式が成立しない:None False, 0, 0.0 など0をあらわす数値 関数 len() が0を返す配列や辞書 式が成り立つ:上記以外。
for文 同じ処理決められた回数実行したいときはfor文を使います。for文を使って実行したいコードはインデントしてブロックを分けて記述します。 >>> seq = range(10) range()関数を記述する。 >>> seq [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for item in seq : forに添えて変数名を記述するとPython が自動的に変数を作ります。 inの右に添えたシーケンスはループが終 わっても変化しません。 print item 0 1 2 3 4 5 6 7 8
whil文 while文を使ったループは、whileの後に条件を記述します。while文はfor文と異なり、繰り返しに利用するシーケンスや繰り返し変数は必要としません。 forとrangeを組み合わせたようなループをwhile文で作りたい場合は、事前に変数を定義して、ループカウンタとして利用します。 >>> cent = 0 >>> while True : print cent cent += 1 if cent >= 9 : break 0 1 2 3 4 5 6 7 8 >>> >>> x = 'spam' >>> while x: print x, x = x[1:] 1文字目を取り除く spam pam am m >>> a = 0; b = 10 >>> while a < b: ループカウンタ print a, a = a + 1 0 1 2 3 4 5 6 7 8 9
while ブロック while 式 : ブロック1 ・・・・・・ ・・・・・・ break , continue が使える。 else : ブロック2 while True : 無限ループ str = raw_input (' > ') プロンプトをコンソールに表示、ユーザの入力を待つ。 print str ユーザ入力をそのまま表示。 if str == ' bye ' : factorialをpythonで 再帰を使わないで 関数を作る問題 第10章練習問題解答
(a) def fact(n): f=1 while n: f *= n n -= 1 print f
>>> fact(3) 6 >>> fact(4) 24 (b) def fact(n): f = 1 while (n > 0): f = f * n n = n - 1 return f 式の値を返す
(b)は(a)より説明的になっています。
return:関数のボディでのみ使用でき、実行すると関数が終了し、式の値が返される。
xrangeとrange:整数型のシーケンスを返す関数
for i in range(n): statement(s)
range(x)は0からxまでの連続する整数を返す。 range(x,y)はxからy−1までの連続する整数を返す。 range(x,y,step)はヵらy−1までの連続する整数からアイテム間の感覚がstepであるリストを作成して返す。 xrangeは反復にfor分でのみ使用する専用のオブジェクトを返す。
参考 HP
■正統ループ式
>>> # Factorial ... >>> n = 100 >>> f = 1 >>> while n: ... f *= n ... n -= 1 ... >>> f 93326215443944152681699238856266700490715968264381 62146859296389521759999322991560894146397615651828 62536979208272237582511852109168640000000000000000 00000000L >>>
カウンタを利用した以外は、全く以って平凡な式です。
多分他言語では while 文は使わないと思いますが、for 文の位置づけが他言語と微妙に異なる Python で、組み 込み関数/オブジェクトを使わない方法に限定すると、 このような形になります。
■Pythonでのスタンダード
>>> f = 1 >>> for n in xrange(1,101): ... f *= n ... >>> f 93326215443944152681699238856266700490715968264381 62146859296389521759999322991560894146397615651828 62536979208272237582511852109168640000000000000000 00000000L >>>
C 言語の for 文に相当する文法は、Python では以上 のように書きます。
組み込みオブジェクトの xrange および range 関数は、 カウンタとして利用可能ですが、文法というより定石に 近い使い方になります。
/機械伯爵/
掲示板管理人: 本田博通(閑舎)
break、continue、passステートメントとelseブロック breakステートメント そのbreakステートメントが直接属するループを無条件で抜ける(ループの中の、 breakステートメントの後に書かれたステートメントは全く実行されない。 continueステートメント そのcontinueステートメントが直接属するループの先頭部分(見出し行) に無条件で戻る。 passステートメント 何もしない。プレースホールダとして使用される。 elseブロック 見出し行に表示された条件が満たされなくなり、ループが終了する際に実行される。breakステートメントによってループが終了される場合には実行されない。
メソッド 関数 raw_input ,input (prompt)関数 promptを出力表示し、 入力を促し、入力一行を読み込んで返す関数です。
>>> while True : 続けて繰り返す s = raw_input('give number: ') ユーザにnumberの入力を促す if not s.isdigit() : break sに数字以外が入力され たときは、ループを終了する。 total +=int(s) sが累積される。 print 'total',total give number: 67 total 67 give number: 89 total 156 give number: 345 total 501 give number: 678 total 1179 give number: 5673 total 6852 give number:
str(obj) objの簡潔で判読可能な文字列表現を返す。
float(x) 数値または適切な文字列を浮動小数点数に変換する。
int(x) xが数値である場合、intは小数部を破棄して0に丸める。 ビルトイン関数
abs(x) 絶対値を返す。
bool(x)False0, True 1 を返す。
input(promt'') eval(raw__input(prompt))の省略形
ユーザに一行の入力を要求し、入力された文字列を式として評価し、その結果を返す。
len(container) containerに含まれているアイテムの数を返す。 >>> a ="ありさわ" >>> print a,len(a) ありさわ 8 変数aは8ビット容器に入れたので文字数が8として返された。
max(s,*args)引数が複数の場合は、引数のうち最も大きいものを返す。
min(s,*args) 引数が複数の場合は、引数のうち最も小さいものを返す。
range(start,stop,step) 整数の数列からなるリストを返す。
raw_input(peompt='') 標準出力にpromptを書き出し、標準入力から一行を読み取りその 行を(\nなしの)文字列として返す。 repr (obj) objの完全かつ明確な文字列を返す。
round(x,n=0) 数値xをn桁の丸めたfloat型の値を返す。
s.upper() sをコピーし、すべてのアルファベットを大文字にしたものを返す。 s.lower() sをコピーし、すべてのアルファベットを小文字にしたものを返す。 s.capitalize() sをコピーし、1文字目がアルファベットである場合は大文字にし、そ れ以外のアルファベットを小文字にしたものを返す。 s.swapcase() sをコピーし、大文字を小文字に、小文字を大文字にしたものを返 す。
s.center(n) sのコピーの両端に同じ数のホワイトスペースを入れて中央寄せにし た、長さがmax(len(s),n)の文字列を返す。たとえ ば'ciao'.center2)'ciao'.center(7)は' ciao 'となる。 s.rjust sのコピーを右寄せにし、残りの部分をホワイトスペースで埋めた、長 さ がmax(len(s))の文字列を返す。 s.ljust sのコピーを左寄せにし、残りの部分をホワイトスペースで埋めた、長 さ がmax(len(s))の文字列を返す。 日本語処理 >>> import re >>> jstr ="日本語" >>> print jstr
wjile繰り返し
x = 0 >>> while x <5 : print x x =x+1
0 1 2 3 4
while j<=6:
print "%d*6=%d"%(j,j*6) j =j+1
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
for繰り返し
for x in[5,2,3,6]: print x
5 2 3 6
for cnt in range(5) : コロンは次の文がforループの本体であることを示す print cnt*cnt
0 1 4 9 16
for i in range(1,7): 1っ目の数字から2っ目ー1の数まで print "%d*6=%d" % (i,i*6)
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
「即効python 上平哲著 秀和システム」 第7章pythonの内部を探る
1オブジェクト
数値、文字列、リスト、関数、クラス、モジュール、。。。。
>> a='x,y,z' >>> a 'x,y,z' >>> a.split(',') ['x', 'y', 'z'] >>> dir() ['__builtins__', '__doc__', '__name__', 'a'] >>> def j(a,b) : return a+b
>>> dir() ['__builtins__', '__doc__', '__name__', 'a', 'j'] >>> b=10 >>> dir() ['__builtins__', '__doc__', '__name__', 'a', 'b', 'j'] >>> import sys >>> dir() ['__builtins__', '__doc__', '__name__', 'a', 'b', 'j', 'sys'] >>> a 'x,y,z' >>> b 10 >>> j <function j at 0x00DB27B0> >>> sys <module 'sys' (built-in)>
pythonに現れるすべてのデータは、それぞれ個性をいったん度外視して、すべて一律「もの」とみなす。
変数にはどんな「もの」も入れることができる。
def f(a,b): return a+b
>>> b=10 >>> f(1,2) 3 >>> b 10 >>> b=f >>> b(1,2) 3 >>> f =-1 >>> f -1
2・map()トラムダ
「ループ指向の考え方」for,while 「マップ指向の考え方」map()、lambda
def add1(n): return n+1
>>> list_out =[]
>>> for x in[0,1,2,3,4] : y =add1(x) list_out.append(y) print list_out
[1] [1, 2] [1, 2, 3] [1, 2, 3, 4] [1, 2, 3, 4, 5]
>>> def add1(n): return n+1
>>> list_out=[] >>> list_out=map(add1,[0,1,2,3,4]) add1という関数を「0.1.2.3.4」の要素それぞれに実行して、結果をリストに返す >>> print list_out [1, 2, 3, 4, 5] >>>
lambda式
引数のリスト:引数を使った式 変数代入文は不可
>>> tax = lambda x,y,z : x*y*z >>> tax(123000,0.1,0.5) 6150.0 >>>
第1章 初めてのpython
第2章 基本的なスクリプト
第3章 文字列、リスト、辞書
第5章 日本語とバイナリーデータの処理
第6章 その他のよく利用される関数
6 時刻関連
datetime:モジュール
日付時刻情報の差を「d日とh時間m分s秒」形式で習得する
7 コピー
8 環境変数の取得・設定
9 ファイルとディレクトリ
10外部プログラムを実行したい
11 入出力
12 webページを解析したい
ホーム 戻る |