こんにちは、なりなりです(^_^)
C/C++でのプログラミングはそこそこ出来るけど、Pythonは初心者という立場でPythonに関するチップスを、マイペースでまとめていきます(^-^)
Pythonの特徴は変数宣言が無いことの他、様々ありますが、他のプログラミング言語では全く見られない特徴は、インデントが文法になっていることでしょう。
if 文の場合
条件判断文であるif文は、Cであれば
if (a > b) { printf("aはbより大きい¥n"); } else if (a > c) { printf("aはb以下だがcより大きい¥n") } else { printf("aはb、c以¥n") }
といった書き方をします(上記例では中括弧は必須ではありません)が、printf()の行のインデントは、人間が見やすいように入れているだけであって、コンパイラは認識していません。
つまり、Cのというか、大抵のプログラミング言語のインデントは記述マナーであって文法では有りません。
しかし、これがPythonの場合だと
if a > b : print("aはbより大きい") elif a > c : print("aはb以下だがcより大きい") else : print("aはb、c以下")
となり、print()文のインデントは文法であり、しないとインタプリタがエラーを返してきます。
if文とelifやelseの間の文はインデントで識別されるため、if文の実行分(この場合print()文)が何行になろうとも、Cの様な中括弧は使いません。
if行の末尾の':'や、'else if'を'elif'と大胆に略しているもの特徴的ですね。
これらの規則の結果、Cのプログラムの様にプログラマーの個性によって、いろいろな書き方がされることが無くなります。
尚、Pythonでは文字列を囲む''(クオーテーション)と""(ダブルクオーテーション)は全く同じ扱いですが、CやExcellでは、文字は''文字列は""で囲むので、合わせた方が違和感がないです。
for文の場合
for文も中々個性的です。
Cなら
for(i = 0; i < a; i++){ 実行分1; 実行分2; }
と記述しますが、Pythonになると
for i in range(a): 実行分1 実行分2
となります。
range関数が見慣れませんよね。
それに、inってどういうこと?
実はinの後ろはlist、Cなどでの配列です。
range()はrange([start,]stop[,step])という書き方が出来て、startとstepは省略可能です。
range()はstartからstopより小さい最大整数までをstep刻みでリスト(配列)化したオブジェクトを返しますから、上の例のrange(5)は[0,1,2,3,4]というリストを返します。
for i in range(5)で、リストの頭から順に最後までiに代入してループを繰り返します。
inの後ろはリストならOKなので、文字列のリストなどでもfor文が組めますから、
b = ["1st","2nd","3rd","4th"] for i in b: print(i)
と言った記述が可能です。
while文の場合
上のfor文をwhile文で書くと
i = 0 while i < a: 実行分1 実行分2 i += 1
となります。
Cと違ってi++という記法はサポートされていません。
関数の場合
例えば、x + yを返す関数なら
def add(x, y): ans = x + y return ans
これだけです。
引数xとyを使ってansを計算します。
ansはadd関数内のローカル変数となり、「return 値」で関数が値を返します。値を返さないならreturn文は不要です。
>>> def add(x, y): ... ans = x + y ... return ans ... >>> add(2,3) 5
実行結果がこちら。
つまらない例ですが、これが分かれば大抵の関数が作れます。簡単ですね(^-^)
関数には無名関数というものもあり、同じものをキーワードlambdaを使ってラムダ式で表すと
lambda x, y : x + y
となります。まさに名前の無い関数ですが、これ自体がオブジェクトとなっており
>>> (lambda x, y : x + y)(2,3) 5 >>> add2 = lambda x, y : x + y >>> add2(2,3) 5
こういった使い方が出来ます。
これの何が良いかピンと来ないのですが、プログラミングを続けていくと出くわすのでしょう。
プログラミングの基本構文である、if文、for文、while文、関数だけとっても、なかなか面白いですね、Pythonは(^-^)