今回は、Python の基本的な下記方について、C#と比べながら、その違いを明確にしていきたいと思います。
基本的な書き方
まず、条件判断文を使って違いを見ていきましょう。
C#の場合は、変数の型を指定する必要があり、ifの条件式は ( ) で括る必要があります。
また、if の範囲は { } で括る必要があり、各行はセミコロン ; で終わらなければなりません。
1 2 3 4 5 6 7 8 9 10 |
//----------------------------------------- // C#の場合 //----------------------------------------- int data = 10; if(x > 100) { x += 1000; } Console.WriteLine(x); |
Pythonの場合、変数の型を宣言する必要はありません。
また、ifの条件式を( ) で括る必要もない代わりに、if の末尾にコロン ‘ : ‘ を付けます。
if の範囲はインデントを使って表します。
1 2 3 4 5 6 7 |
#----------------------------------------- #Pythonの場合 #----------------------------------------- x = 10 if x > 100 : x += 1000 print(x) |
以上のことをまとめると次のようになります。
- 変数を定義する場合、型を指定しない
- 行の終わりを表すセミコロン ‘ ; ‘ が不要で、改行までが1行として扱われる
- if の末尾にはコロン ’ : ‘ を付けて、制御範囲はインデントで表現する
- コメント行はハッシュタグ ‘ # ‘ を使う
このインデントですが、if文や for文の中に空白行が含まれている場合、その空白行に対してもインデントを入れなければエラーになります。

Python用の統合環境でプログラムを書いて実行する場合は、統合環境が自動的にインデントを入れてくれるので問題はありませんが、サクラエディタ等の汎用エディタでプログラムを書いてPythonインタープリタ上で実行する場合は注意が必要です。
if文(条件判断文)
では、if 文についてもう少し詳しく見ていきましょう。
まず、条件式に使える演算子は次のようになります。
意味 | C# | Python |
---|---|---|
値が等しい | == | == |
値が等しくない | != | != |
以上 | <= | <= |
以下 | >= | >= |
大きい | < | < |
小さい | > | > |
オブジェクトが等しい | is | is |
オブジェクトが等しくない | 該当なし | not is |
null 判定 | is null | is None |
真 | true | True |
偽 | false | False |
条件式の結合(〇〇且つ〇〇) | && | and |
条件式の結合(〇〇又は〇〇) | || | or |
Pythonの場合、null は None に、 trueとfalse は先頭が大文字になって True と False に、条件式の結合において、 && が and に、 || が or に代わるところがポイントです。
では、次に、条件文を連ねるために次のような if~ else if ~ else を考えてみます。
C#では以下のようになりますが・・・
1 2 3 4 5 6 7 8 9 10 11 12 |
if(str == "A") { res = 10; } else if (str == "B") { res = 20; } else { res = 0; } |
Pythonの場合、 else if の代わりに elif というキーワードを使います。
1 2 3 4 5 6 7 8 9 |
if str == "A" : res = 10 elif str == "A": res = 20 else: res = 0 |
Pythonの場合は { } が無いので行数が少なくなったように見えますが、逆に詰まってしまうことで圧迫感を感じるかもしれません。
まあ、慣れの問題かもしれませんが・・・
for文(繰り返し文)
C#には for文と foreach 文がありますが、Python は for文しかなく、その動作は foreach と同じです。
例えば、1000回ループする for文を考えた場合、C#なら
1 2 3 4 |
for(int i = 0;i < 1000;i ++) { Console.WriteLine(i); } |
と書きますが、Pythonの場合は
1 2 |
for i in range(1000) : print(i) |
と書きます。
C#で renge と言えば Enumerable.Range が思い浮かびますので、Pythonの for はC#で次のように書くことも出来そうです。
1 2 3 4 |
foreach(int i in Enumerable.Range(0,1000)) { Console.WriteLine(i); } |
上記の通り、単純に指定した回数をループするのであれば、PythonもC#も動作は同じです。
しかし、PythonとC#の range の仕様が異なるため、使い方によっては結果が違ってきます。
C# | Range(開始値,カウント数) | 開始値からカウント数分だけ値を生成する。 例えば Range(20,1000) の場合、20~10019 の値 (合計1000個)が生成される。 |
Python | range(開始値,終了値,ステップ数) | 開始値から終了値まで(終了値を含まない)の値を生成する。 例えば range(20,1000)の場合、20~999の値 (合計 1000-20=980個)が生成される。 ステップ数は省略可能で、引数が1つの場合は0が開始となる。 |
以上のことから、Pythonの range の仕様は、実は C#のfor文の仕様と同じであると解釈しておくのが分かりやすいと思います。
ちなみに、forループを強制的に抜ける場合は break 、ループの途中からループの先頭に戻る場合は continue を使うところは C#と全く同じです。
しかし、C#になくて Python に存在する機能が1つだけあって、それが else です。
1 2 3 4 |
for i in range(1000) : print(i) else : print("終了") |
for ループが終了したタイミングで else が実行されます。
では、下記のように書いても良いのではないかと思いますよね。
1 2 3 |
for i in range(1000) : print(i) print("終了") |
確かにこの使い方だと同じなのですが、ループの中に条件判断を行い、break で処理を抜ける場合、else のメリットが出てきます。
for の else はループを正常に抜けた時だけ実行され、break で抜けた場合は実行されない
という仕様になっているところがポイントです。
つまり、下記の例だと、i が 500を超えた場合、print(“終了”) は実行されません。
1 2 3 4 5 6 |
for i in range(1000) : if i > 500 : break print(i) else : print("終了") |
正常に終了した時だけ実行したい処理を else に書くという使い方になりますが、実用上はあまり登場することは無い気がします。
while,do while 文
Python の while文 は C#と同じです。
1 2 3 4 5 6 |
x = 0 while x < 50: print(x) x += 1 |
Python の while文 には、 for文と同様に break、continue、else が用意されています。
例えば、ループの途中で抜けたい場合は break を使って次のように書けます。
1 2 3 4 5 6 7 8 |
x = 0 while x < 50: print(x) x += 1 if x == 20: break |
逆に C#にあってPythonに無いものが do while です。
do while 自身、あまり使う機会が無く、while で代替が効くので実害はそんなに無いと思います。
どうしても書きたい場合は、while True で無限ループを作って、ループの最後に if 文で break をしましょう。
1 2 3 4 5 6 7 |
x = 0 while True: print(x) x += 1 if x > 49: break |
まとめ
今回はPythonの最も基本的な書き方と、条件判断文(if)、ループ文(for、while) についてC#と比較しながら解説しました。
C#に慣れていると { } が無いのがちょっと寂しいというか、逆にブロックが分かりづらい印象を受けます。
Pythonは直感的で読みやすい言語だとよく言われますが、どうなんでしょうねぇ。
好むと好まざるとに関わらず、機械学習をする場合はPythonが必須なので、覚えるしかありません。