Python Quick Tutorial

Hello, World!

Python バージョンの確認:

>>> sys.version
'2.6.1 (r261:67515, Jun 24 2010, 21:47:49) \n[GCC 4.2.1 (Apple Inc. build 5646)]'

Python による Hello World の出力:

>>> print "Hello, Python World"
Hello, Python World
>>> print ("Hello, Python World")
Hello, Python World
>>> print 'Hello, Python World'
Hello, Python World
>>> print "Hello" + "Python"
HelloPython
>>> print "Hello " + "Python"
Hello Python

インデント (字下げ) が必要

Python ではインデント (字下げ) によって, 実行文をグループ化する

Python をなぜおすすめ?

特徴:

1. キーワードが少ない (30個程度)
2. 字下げの強要で, 読みやすい
3. 短時間で開発可能 (行数が短く, モジュール豊富)
4. 変数の宣言は必要なし
5. インタプリタ (コンパイラする必要はなし)
6. メモリ管理必要なし
7. オブジェクト指向 (すべてがオブジェクト)

データ型 (1)

標準型:

1. 整数型: 32 ビットで表現される範囲の整数
2. 長整数型: 無限長の整数, 1234L と L を付けて書く
3. ブール型: True / False
4. 浮動小数点数型: 倍精度の小数; 3.14 や 1. や .25
5. 文字列型: 文字から成る (不変) 順序型; "abcd", 'efgh'

データ型 (2)

複合型:

1. リスト (list) : 任意の要素から成る (可変) 順序型; [1, 2, 3, 4], ["a", "b"], [[1, 2, 3, 4], ["a", "b"]]
2. タプル (tuple): 任意の要素から成る (不変) 順序型; (1, 2, 3), ( "+", (1, 2) )
3. 辞書 (dictionary): キー (key) と 値 (value) の組 (key:value) から構成される (可変) マップ型; {"feifei":28, "yangyang":8, "yangguang":2, "kankan":1}
4. 集合 (set): 集合を表現する型

文字列 (1)

有効なやつは:

'文字列'
"文字列"
"""複数行の文字列"""

文字列 (2)

順序型:

>>> str='wtopia'
>>> str
'wtopia'
>>> str[0]
'w'
>>> str[1]
't'
>>> str[2]
'o'
>>> str[3]
'p'
>>> str[4]
'i'
>>> str[5]
'a'
>>> str[0]+str[1]
'wt'
>>> str[0]+str[5]
'wa'
>>> str[-1]
'a'
>>> str[5]
'a'
>>> str[-5]
't'

スライス表記 (1)

スライス表記 (slicing):

i:j は i<=k<j なる整数 k
i の省略は先頭, j の省略は最後
>>> str
'wtopia'
>>> str[1]
't'
>>> str[1:]
'topia'
>>> str[1:3]
'to'
>>> str[:]
'wtopia'

スライス表記 (2)

文字列の長さは, 関数 len() を使うこと:

>>> str
'wtopia'
>>> len(str)
6
>>> str[1:4]
'top'
>>> len(str[1:4])
3
>>> len(str[1]+str[2])
2

リスト (1)

リスト (list): 任意の要素から成る順序型:

>>> [1, 2, 3, 4] + ["a", "b"]
[1, 2, 3, 4, 'a', 'b']
>>> [ [1,2], [3, 4] ]
[[1, 2], [3, 4]]

可変 (mutable; 変更可能): 中身を変更できる:

>>> l=["a", "b", "c", "d"]
>>> l
['a', 'b', 'c', 'd']
>>> l[0]=100
>>> l
[100, 'b', 'c', 'd']
>>> l[1]=200
>>> l
[100, 200, 'c', 'd']
>>> l[2]=300
>>> l
[100, 200, 300, 'd']
>>> l[3]=400
>>> l
[100, 200, 300, 400]

スライス表記を用いた代入:

>>> l=["a", "b", "c", "d"]
>>> l
['a', 'b', 'c', 'd']
>>> l[1:3]=[10, 20, 30, 40, 50]
l[1:3]=[10, 20, 30, 40, 50]
>>> l
['a', 10, 20, 30, 40, 50, 'd']
>>> l[:]=[20, 30]
>>> l
[20, 30]
>>> l[:]=["a", "b", "c", "d"]
>>> l
['a', 'b', 'c', 'd']
>>> l[0:]=[10]
>>> l
[10]

リスト (2)

リストに対するいくつかのメソッドを紹介する.

まずは, 下のリストを用意しておく::
>>> l=["a", "b", "b", "c", "c", "c"]
l=["a", "b", "b", "c", "c", "c"]
>>> l
['a', 'b', 'b', 'c', 'c', 'c']

l.count(x):

l 内での x の生起回数を返す.
>>> l.count("a")
1
>>> l.count("b")
2
>>> l.count("c")
3
>>> l.count("ab")
0
>>> l.count("cc")
0

l.index(x):

l 内で x が最初に発生する添字を返す.
>>> l
['a', 'b', 'b', 'c', 'c', 'c']
>>> l.index("a")
0
>>> l.index("b")
1
>>> l.index("c")
3

l.reverse():

l を逆順にする (本番にリストを反転する).
>>> l
['a', 'b', 'b', 'c', 'c', 'c']
>>> l.reverse()
>>> l
['c', 'c', 'c', 'b', 'b', 'a']

l.sort():

l を小さい順に並べ替える (昇順)
>>> l=[10, 2, 30, 40, 200, 50]
>>> l
[10, 2, 30, 40, 200, 50]
>>> l.sort()
>>> l
[2, 10, 30, 40, 50, 200]

タプル

特徴:

1. タプル (tuple, 組): 任意の要素から成る順序型

2. 丸括弧を使うこと.
>>> tple=("x", "y", 2, 4)
>>> tple
('x', 'y', 2, 4)
>>> tple[0]
'x'
>>> tple[-4]
'x'

3. 不変 (immutable): 中身の交換はできない

4. タプル t2 の内容を タプル t1 に代入することができる
>>> t1=("a", "b")
>>> t1
('a', 'b')
>>> t2=("c", "d")
>>> t2
('c', 'd')
>>> t1=t2
>>> t1
('c', 'd')
>>> t2
('c', 'd')

辞書

特徴:

1. 辞書 (dictionary): キー (key) と 値 (value) の組から構成されるマップ型

2. 波括弧 {} の中にカンマに区切って (キー:値) を入力
>>> age={"ff":28, "yy":8, "gg":2}
>>> age
{'yy': 8, 'gg': 2, 'ff': 28}

3. キーを使って値を取り出す
>>> age["yy"]
8
>>> age["gg"]
2

4. 可変 (mutable):
>>> age
{'yy': 8, 'gg': 2, 'ff': 28}
>>> age["gg"]=20
>>> age
{'yy': 8, 'gg': 20, 'ff': 28}
>>> age["gg"]
20

集合

特徴:

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

演算子 (1)

加算, 乗算は文字列, リストにも適用可能:

>>> 1+2
3
>>> 2+3
5
>>> "a"*3
'aaa'
>>> "abc"*3
'abcabcabc'
>>> [1, 2, 3] + [4, 5]
[1, 2, 3, 4, 5]

演算の優先順序:

括弧 ()
ベキ乗 (指数演算) **
乗算 * もしくは 除算 /
加算 + もしくは 減産 -

比較演算子:

<=
>=
==
!=

演算子 (2)

リストの要素:

in はリストの要素であるとき真
>>> li=[1, 2, 3, 4]
>>> li
[1, 2, 3, 4]
>>> 1 in li
True
>>> "1" in li
False

not in はリストの要素でないとき真
>>> li
[1, 2, 3, 4]
>>> 2 not in li
False
>>> "2" not in li
True

ブール演算子:

and は論理積
or は論理和
>>> True and True
True
>>> True and False
False
>>> True or False
True
>>> (1<4)
True
>>> (5>10)
False
>>> (1<4) or (5>10)
True

if と else 文

条件分岐に用いる::
if 条件文:
[条件文が真のときに実行される命令]
else:
[条件が偽のときに実行される命令]

例:

>>> age = 10
>>> if age < 20:
...   print "you can not smoke"
... else:
...   print "you can smoke"
...
you can not smoke

for 文

反復のための基本

リストや辞書などの反復可能な型を用いる.

例 1:

>>> for x in range(5):
...   print x
...
0
1
2
3
4

例 2:

>>> list=["a", "bb", "ccc"]
>>> for x in list:
...   print x
...
a
bb
ccc

リスト内包表記

リスト内包表記 (list comprehension):

リストの中に for 文を書き, リストを反復する

例 (リストの中にタプルを生成する):

>>> [(x, x**2, x**3) for x in range(5)]
[(0, 0, 0), (1, 1, 1), (2, 4, 8), (3, 9, 27), (4, 16, 64)]

例 (リストの中にリストを生成する):

>>> [[x, x**2, x**3] for x in range(5)]
[[0, 0, 0], [1, 1, 1], [2, 4, 8], [3, 9, 27], [4, 16, 64]]

反復を入力としたその他の関数

リスト内包表記のように, 反復を入力とし, 一つの値を返す関数:

sum
min
max

例:

>>> sum(x for x in range(11))
55
>>> max(x for x in range(11))
10
>>> min(x for x in range(11))
0

while 文

条件を満たす間は繰り返す:

while 真のときに繰り返しを行う文:
  繰り返ししたい命令

例:

>>> x=5
>>> while x > 0:
...   print 2*x
...   x=x-1
...
10
8
6
4
2

break と continue

反復の途中で抜けるためのキーワード:

break: 反復から抜ける
continue: 次の反復処理に飛ばされる

例:

>>> x=5
>>> while True:
...   print 2*x
...   x=x-1
...   if x <= 0:
...           break
...
10
8
6
4
2

for - else 文

for や while のループの中で, break で抜けないときに, for や while の直後の else ブロックが実行される.

例: (素数の場合):

>>> y=11
>>> for x in range(2, y):
...   if y % x == 0:
...           break
... else:
...   print "素数"
...
素数

例: (素数ではない場合):

>>> y=10
>>> 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("z", "f")
'zfzfzf'

再帰

例: 階乗の計算 (0!=1):

>>> fac(10)
3628800
>>> fac(20)
2432902008176640000

組み込み関数

set(), list() も組み込み関数:

>>> set()
set([])
>>> list()
[]

例:

>>> list("wtopia")
['w', 't', 'o', 'p', 'i', 'a']
>>> set("wtopia")
set(['a', 'i', 'o', 'p', 't', 'w'])
>>> set("wwwtttopiiia")
set(['a', 'i', 'o', 'p', 't', 'w'])

関数 sorted() は昇順に並べ替えた結果を返す:

>>> list1=[2, 3, 20, 1, 20, 24, 12]
>>> list1
[2, 3, 20, 1, 20, 24, 12]
>>> sorted(list1)
[1, 2, 3, 12, 20, 20, 24]
>>> list1
[2, 3, 20, 1, 20, 24, 12]

モジュール

モジュールとは:

プログラムを分割して [ファイル名.py] のファイルに保管したもの. 他のプログラムから呼び出して使う

方法 1: モジュールの読み込み:

import ファイル名

例:

>>> import math
>>> print math.sqrt(2)
1.41421356237
>>> print math.sqrt(4)
2.0

方法 2: モジュール内の関数の読み込み:

from ファイル名 import 関数名 (もしくはワイルドカード *)

例:

>>> from math import sqrt
>>> sqrt(2)
1.4142135623730951
>>> from math import *
>>> sqrt(10)
3.1622776601683795

注意:

方法 2 の呼び出は [ファイル名.関数名] を使わないで, 関数名だけを使えばかまわない. 方法 1 は必ずファイル名を付けること.

擬似乱数発生モジュール

擬似乱数発生モジュール random の主要関数 (random.関数名):

seed(x): x を用いて乱数の初期化を行う. x を省略した場合には現在のシステム時間で初期化される
random(): (0.0 ~ 1.0) の一様ランダムな浮動小数点型の数を返す
randint(i, j): 整数 i, j に対して i<=k<j の一様ランダムな整数 k を返す
shuffle(L): リスト L を順序ランダムに混ぜる.
choice(L): リスト L からランダムに 1 個 の要素を選択する

ヒープモジュール

優先キューの1つであるヒープの実装.

例: ヒープにリスト内の数値を入れる:

>>> from heapq import *
>>> a=[]
>>> for item in [5, 1, 6, 8, 10, 20, 21]:
...   heappush(a, item)
...

注意: 上記の a はヒープとなる.

ヒープ内の最初の要素 (最小の要素) から残りの要素を続々と取り出し:

>>> print heappop(a)
1
>>> print heappop(a)
5
>>> print heappop(a)
6
>>> print heappop(a)
8