機械学習のプログラミング言語としてPythonがよく利用されているようなので、基本的な文法などを勉強してみました
ブロックの定義(インデント)
プログラムの実行単位のことをブロックと呼ばれる
1 2 3 |
if (条件式) { ブロック内の処理 } |
例えば、JavaやPHPでは「{」から「}」までで表現される
1 2 3 |
if 条件式 then ブロック内の処理 end |
例えば、 Ruby では 「then」 から「 end」 までで表現される
1 2 |
if(条件式): ブロック内の処理 |
Pythonではインデントでブロックを表現する
何もしない処理
ブロックはインデントで表現されるので、何も処理をしない場合はインデントをつけられないのでブロックを表現できない
1 2 3 |
if(条件式): else: ブロック内の処理 |
例えば、if文の後の処理がないとif文に対応するブロックを定義できない
1 2 3 4 |
if(条件式): pass else: ブロック内の処理 |
そのため、何も処理をしない場合は、ブロックを定義するために、何もしない処理として「pass」を記載する必要がある
日本語を使うために
1 |
# -*- coding: utf-8 |
日本語をprint文などで使うために、上記の文を先頭行につける
コメント
1 |
# この行はコメントになる。 |
行の先頭に「#」を記入することで、コメントと認識される
1 2 3 4 |
""" 複数行のコメント になる """ |
1 2 3 4 |
''' 複数行のコメント になる ''' |
「”””」または「”’」で挟まれた複数行が、コメントと認識される
型宣言
型宣言はない
定数
定数を定義する構文はない
一般的には、全て大文字で変数名を定義することで定数を示すことが多い
データ型
整数(int)
浮動小数点型(float)
複素数型(complex)
文字列
1 |
str = 'Hello World' |
シングルクォーテーションで囲む
1 |
str = "Hello World" |
ダブルクォーテーションで囲む
1 |
str = """Hello World""" |
トリプルダブルクォーテーションで囲む
結合(+)
1 2 3 |
a = "Hello" b = "World" str = a + b |
文字列どうしの結合になる
「str」は「HelloWorld」になる
異なるデータ型ではNG
反復(*)
1 2 |
a = "Hello" b = a * 3 |
文字列に対して「*」を使用した場合に反復となる
「b」は「HelloHelloHello」になる
数字に対しては通常通り掛け算となる
算術演算子
足し算(+)
1 |
a = 14 + 5 |
「a」は「19」になる
引き算(-)
1 |
a = 14 - 5 |
「a」は「9」になる
掛け算(*)
1 |
a = 14 * 5 |
「a」は「70」になる
割り算(/)
1 |
a = 14 / 5 |
「a」は「2.8」になる
割り算の商(//)
1 |
a = 14 // 5 |
「a」は14÷5が2余り4なので「2」になる
割り算の剰余(%)
1 |
a = 14 % 5 |
「a」は14÷5が2余り4なので「4」になる
べき乗(**)
1 |
a = 14 ** 5 |
「a」は14×14×14×14×14で「537824」になる
代入演算子(+=、-=、*=、/=、//=、%=、**=)
1 2 3 |
a = 10 b = 3 a += b |
「a」は10+3で「13」になる
1 2 3 |
a = 10 b = 3 a -= b |
「a」は10-3で「7」になる
1 2 3 |
a = 10 b = 3 a *= b |
「a」は10×3で「30」になる
1 2 3 |
a = 10 b = 3 a /= b |
「a」は10÷3で「3.3333333333333335」になる
なぜ最後が5になるのかは不明。。。
1 2 3 |
a = 10 b = 3 a //= b |
「a」は10÷3が3余り1なので「3」になる
1 2 3 |
a = 10 b = 3 a %= b |
「a」は10÷3が3余り1なので「1」になる
1 2 3 |
a = 10 b = 3 a **= b |
「a」は10×10×10で「1000」になる
制御文
if
1 2 3 4 5 6 7 8 |
a = 1 b = 0 if a == b: a = 5 elif a > b: a = 10 else: a = 15 |
if文は「if」「elif」「else」で記述する
処理結果は、「a」が「10」、「b」が「0」になる
for
in リスト
1 2 3 4 |
s = 0 a = [0,1,2,3,4,5] for i in a: s = s + i |
for文は「for」で記述する
「in」でリスト内の要素ごとに処理ができる
この処理は、「s」が0+1+2+3+4+5で「15」になる
in 文字列
1 2 3 |
s="" for i in "hello": s = s + "-" + i |
「in」のあとに「文字列」を指定することで1文字ごとに処理ができる
この処理は、「s」が「-h-e-l-l-o」になる
in range(a)
1 2 3 |
s = 0 for i in range(4): s = s + i |
「in」のあとに「range(a)」を指定することで0からa-1ごとに処理ができる
この処理は、「s」が0+1+2+3で「6」になる
in range(a,b)
1 2 3 |
s = 0 for i in range(2,4): s = s + i |
「in」のあとに「range(a,b)」を指定することでがaからb-1ごとに処理ができる
この処理は、「s」が2+3で「5」になる
in reversed(文字列)
1 2 3 |
s="" for i in reversed("hello"): s = s + "-" + i |
「in」のあとに「reversed(文字列)」を指定することで後ろから1文字ごとに処理ができる
この処理は、「s」が「-o-l-l-e-h」になる
in sorted(文字列)
1 2 3 |
s="" for i in sorted("hello"): s = s + "-" + i |
「in」のあとに「sorted(文字列)」を指定することで文字単位でソートされた順で1文字ごとに処理ができる
この処理は、「s」が「-e-h-l-l-o」になる
else
1 2 3 4 5 |
data = [20, 40, 60, 80] for d in data: sum_d += d else: print(sum_d) |
forループの処理が終わったら最後にelseを実行する
この処理は、最後にforループでdata内の数値を合計した「200」が出力される
break
1 2 3 4 5 |
data = [20, 40, 60, 80] for d in data: break else: print(sum_d) |
forループの処理を中断する
この場合はelseの処理は実行されない
while
1 2 3 4 |
n = 0 while n < 3: print(n) n += 1 |
条件文が正しい(true)の場合に繰り返し処理を実行する
この処理はn < 3が正しい間実行され、nが3になった時に繰り返し処理をぬける
結果、「0」「1」「2」が出力される
1 2 |
while True: print("a") |
条件文に「True」と記入することでずっと処理を繰り返す(無限ループ)が可能
取り扱い注意