つづき 

ホーム     戻る
第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ページを解析したい

 

 ホーム     戻る