Python 基礎 まとめ

#Pythonとは
シンプルで習得がしやすいオブジェクト指向型言語。
Google App Engineで採用されていたり、Djangoというフレームワークがある。

#pythonの実行
* インタラクティブモード
* ファイルに書き込み実行
の2点の実行方法がある。

##インタラクティブモード
```
$python
```
と打つとインタラクティブモードになる。

```
python
>>>
```
ここに書き込めば、即時実行される。
以下のような感じ。

```
python
>>>print "hello world"
```

```
exit()
```
で抜けられる。

## ファイルに書き込み実行
```py:hello.py
print "hello world"
```
のようにファイルを作成して実行

```
$python hello.py
```
##実行に際しての注意事項
* 文を終わらせるときは改行。
* #でコメントアウトになる。
* 日本語を使うときは、ファイル先頭に```#coding:UTF-8```をファイルの最初に入れる。

#変数
```py
msg = "hello world"
print msg
```

でhello worldの出力。
大文字・小文字は別物として処理される。

#データ型
##数値型
整数、小数、複素数
演算子+ - * / //  % **等

```py
print 10 * 5 #50
print 10 // 3 #3
print 10% 3 #1
print 2**3 #8
```

* 整数と小数の演算は小数になる
* 整数同士の割り算は切り捨ての整数になる。（ただし、どちらか小数なら切り捨てはない）
* 形式的に1.0をかけると切り捨てずに計算される。

##文字列
```“hello”``` ```‘hello'```のようにすれば文字列。
ただし、日本語の場合、```u"こんにちは"```のようにuを入れる。

"""でくくると改行が反映される

```py
print """<html lnag="ja">
<body>
</body>
</html>"""
```

###エスケープ
\t \n のようなエスケープが使用可能。

###文字数 len, 検索 find, 切り出し []

```py
s = "abcdefgh"
#文字列の長さ
print len(s)
#文字の位置
print s.find("c") #2 数えは0から
#文字の切り出し[番目:文字数]
print s[2] #c
print s[2:5] #cde
print s[:5] #abcde
print s[2:-1] #cdefgh
```

#数値と文字列の相互変換

数値<>文字列
・文字列から数値へ変換 int float

```py

print 5 + int("5") %10
print 5 + float("5") %10.0
```
・数値から文字列へ変換 str

```py
age=20
print "i am" + str(age) + "years old!"
```

#リスト
##長さlen, 結合 +, 繰り返し *, 要素の取得 [], 要素の存在 in

```py
sales = [255, 100, 353, 400]

print len(sales) #4 配列の長さを取り出す
print sales[1] #100　要素の取得
print sales + sales #配列の結合 [255, 100, 353, 400, 255, 100, 353, 400]
print sales *3 #配列の繰り返し [255, 100, 353, 400, 255, 100, 353, 400, 255, 100, 353, 400]
print 100 in sales #true in 要素の存在判定
```

##range

配列作成

```py
range(10) #[1,2,3,4,5,…8,9] 9まで
range(3, 10) #[3,4,5,…8,9]　3から9まで
range(3, 10, 2) #[3,5,7,9] 3から9まで2個とばし
```

##リスト操作 sort, reverse, split, join

```py
#小さい順に並び替える
sales.sort()
#リストを逆順にする
sales.reverse()
#文字列→リスト split
d = "2013/12/15"
print d.split("/") #['2013', '12', '15']
#リスト→文字列 join
a = ['a', 'b', 'c']
print '-'.join(a) #a-b-c
```

#タプル
a=(2, 5, 8)のような感じ。
要素の中身が変更出来ないだけで、連結、繰り返しは出来る。
→変な間違いを防ぐ、計算速度を速くする。

##タプルとリストの相互変換

```py
#タプル→リスト
b = list(a)
#リスト→タプル
c = tuple(b)
```

#セット

```py
a = set([1, 2, 3, 4, 3, 2])
b = set([3, 4, 5])
```
要素の重複を許さない
```print a```は3, 2が重複し無視される。

##集合型

```py
#差集合
print a - b
#和集合
print a | b
#共通項だけ
print a & b
#片方にだけある項
print a ^ b
```

#辞書型データ key value

```py
[2505, 523, 500]
{"apple":200, "orange":300, "banana":500}
print sales; #順番は変わって表示される可能性がある
print sales["apple"] #200
sales["orange"] = 800 #値の変更
print sales #{'orange': 800, 'apple': 200, 'banana': 500}
print "orange" in sales #true　存在判定

print sales.keys() #key一覧
print sales.values() #value一覧
print sales.items() #key-value一覧
```

#文字列にデータを埋め込む
```py
a = 10
b = 1.232323
c = "apple"
d = {"orange":200, "banana":500}
print "age: %d" % a
print "age: %10d" % a #10桁
print "age: %010d" % a #10桁0で埋める
print "price: %f" % b
print "price: %.2f" % b
print "name: %s" % c

print "sales: %(orange)d" %d
print "%d and %f" % (a, b)
```

#if文

```py
scoe = 70
if score > 60:
     print "ok!"
     print "OK!"

#比較演算子 > < >= <= == !=
#論理演算子　and or not

if score > 60 and score < 80:
     print "ok!"
     print "OK!"

if 60 < score <80
     print "ok!"
     print "OK!"

score = 70
if score > 60:
     print "ok!"
elif score > 40:
     print "soso…"
else:
     print "ng!"

print "OK!" if score > 60 else "NG!"
```

#for文

```py
sales = [13, 43, 4233, 2343]
for sale in sales:
     sum += sale
else:
     print sum

#＊for文のelseでfor文を抜けた時に一回だけ実行する処理を書ける。

for i in range(10)
     if i == 3:
          continue #ループをスキップ
      if i == 3:
          break #ループを終了
     print i
#0から9からまで。

for i in range(1, 101)
     #処理
#iが1から100までループする
```

#辞書型forループ

```py
users = {"apple":200, "orange":300, "banana":500}
for key, value in users.iteritems()
     print "key: %s value: %d" % (key, value)
for key, value in users.iterkeys()
     print key
for value in users.itervalues()
     print value
```

#while文

```py
n = 0
while n < 10
     print n
     n = n + 1
     n += 1
else:
     print "end"
#continue, break, elseはfor文と使い方は一緒。
#breakを使うとelse句も実行されない。
```

#関数

```py
def hello():
     print "hello"
hello()

#引数
def hello(name, num = 3):
     print "hello %s" %name * num
hello(name = "tom", num =2) #名前をつければ引数の順番は変えてもオーケー。
hello("steve")

def hello(name, num = 3):
     return "hello %s" %name * num
s = hello("steve")
print s
```

#変数とスコープ、pass

```py
name = "apple"
def hello():
     name = "orange"
print name

#pass
def hello2():
     pass
#hello2という関数をとりあえず作っておいて、中身は空のときpassと書いておけばオーケー。
#他の言語だと、{}でくくれるために関数の終わりを示せるが、pythonでは終わりを示せないためにかわりにpassを書く。
```

#map、lamdaーlistに対するアクション

```py
#map　ーリストの各要素に対して関数を実行させる
def double(x):
    return x*x
print map(double, [2, 5, 8])

#lamda 無名関数　ーmap利用時に直接関数を使いたいときに使う
print map(lambda x:x*x, [2, 5, 8])
```

#オブジェクトの作成
オブジェクト（変数と関数をまとめたもの）
クラス:オブジェクトの設計図
インスタンス:クラスを実体化したもの

```py
class User(object):
     def __init__(self, name):
          self.name = name
     def greet(self):
          print "my name is %s" % self.name

bob = User("Bob")
tom = User("Tom")
print bob.name
bob.greet()
tom.greet()
```

#クラスの継承

```py
class SuperUser (User):
def shout(self):
     print :"%s is SuPER!" % self.name

tom = SuperUser("Tom")
tom.shout()
```

#モジュールの利用

```py
import math, random
from datetime import date
print math.ceil(5.2) #6.0
for i in range(5)
     print random.random()
print date.today()
```

#参考
[ドットインストールPython入門](http://dotinstall.com/lessons/basic_python_v2)