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 ではインデント (字下げ) によって, 実行文をグループ化する
特徴:
1. キーワードが少ない (30個程度)
2. 字下げの強要で, 読みやすい
3. 短時間で開発可能 (行数が短く, モジュール豊富)
4. 変数の宣言は必要なし
5. インタプリタ (コンパイラする必要はなし)
6. メモリ管理必要なし
7. オブジェクト指向 (すべてがオブジェクト)
標準型:
1. 整数型: 32 ビットで表現される範囲の整数
2. 長整数型: 無限長の整数, 1234L と L を付けて書く
3. ブール型: True / False
4. 浮動小数点数型: 倍精度の小数; 3.14 や 1. や .25
5. 文字列型: 文字から成る (不変) 順序型; "abcd", 'efgh'
複合型:
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): 集合を表現する型
順序型:
>>> 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'
スライス表記 (slicing):
i:j は i<=k<j なる整数 k
i の省略は先頭, j の省略は最後
>>> str
'wtopia'
>>> str[1]
't'
>>> str[1:]
'topia'
>>> str[1:3]
'to'
>>> str[:]
'wtopia'
文字列の長さは, 関数 len() を使うこと:
>>> str
'wtopia'
>>> len(str)
6
>>> str[1:4]
'top'
>>> len(str[1:4])
3
>>> len(str[1]+str[2])
2
リスト (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]
リストに対するいくつかのメソッドを紹介する.
>>> 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+2
3
>>> 2+3
5
>>> "a"*3
'aaa'
>>> "abc"*3
'abcabcabc'
>>> [1, 2, 3] + [4, 5]
[1, 2, 3, 4, 5]
演算の優先順序:
括弧 ()
ベキ乗 (指数演算) **
乗算 * もしくは 除算 /
加算 + もしくは 減産 -
比較演算子:
<=
>=
==
!=
リストの要素:
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
例:
>>> age = 10
>>> if age < 20:
... print "you can not smoke"
... else:
... print "you can smoke"
...
you can not smoke
反復のための基本
リストや辞書などの反復可能な型を用いる.
例 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 真のときに繰り返しを行う文:
繰り返ししたい命令
例:
>>> x=5
>>> while x > 0:
... print 2*x
... x=x-1
...
10
8
6
4
2
反復の途中で抜けるためのキーワード:
break: 反復から抜ける
continue: 次の反復処理に飛ばされる
例:
>>> x=5
>>> while True:
... print 2*x
... x=x-1
... if x <= 0:
... break
...
10
8
6
4
2
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'
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