なりなり日記

Appleと折りたたみ自転車(BROMPTON / Tern Vektron S10 / BESV PSF1)の情報を中心に発信中!

【Python入門】if文、for文、while文、関数でのインデントが特徴的


スポンサーリンク

こんにちは、なりなりです(^_^)

f:id:narinarissu:20170802190006p:plain

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は(^-^)

関連するエントリー

www.narinarissu.net

www.narinarissu.net