福岡県だけどPythonを勉強する!

他言語を積極的に推奨する福岡県でPythonを勉強していく記録。

制御構文 - ループ

ちょっと日にちが空きましたが、

今回はループを勉強しました。

 

主題ではなく「not x (xが偽ならTrue)」の部分で躓いて無駄に時間を費やしてしまいました。

 

復習が足りてないですね。。。

 

以下、今回の備忘録です。

 

 

●4章 制御構文

 

■■ループ

 

■for

for ループ内変数名 in コンテナ

 

>>> for i in ["apple","orange","lemon"]:

...     print(i)

... 

apple

orange

lemon

 

forループで任意の回数処理を繰り返したい場合には

range()ビルトイン関数を使う。

 

>>> for i in range(5):

...     print(i)

... 

0

1

2

3

4

 

range関数は指定した数値の範囲内のiterableなオブジェクトを生成する。

※iterable・・・繰り返すことが出来る。

 

リストの要素を順に処理しつつ、インデックス番号も知りたい場合には

enumerate()ビルトイン関数を使う。

 

>>> for index, name in enumerate(["apple", "orange", "lemon"]):

...     print(index, name)

... 

0 apple

1 orange

2 lemon

 

ループが終わった後に実行したいプログラムがある場合は

elseを使う。

 

>>> for i in range(3):

...     print(i)

... else:

...     print("done")

... 

0

1

2

done

 

elseブロックはforループをしなかった場合にも実行される。

 

breakでループを出た場合はelseは実行されない。

>>> for i in range(1,4):

...     print(i)

...     if i == 2:

...         break

... else:

...     print("loop finished")

... 

1

2

 

continueはループ内のブロックを途中で終了し、次のループ処理へ飛ばす。

 

>>> for i in range(1, 4):

...     print(i)

...     if i == 2:

...         continue

...     print(i)

... 

1

1

2

3

3

 

■while

・whileは条件が条件が真の間だけループし続け、

条件が変わった時に終了する。

・whileはifのように評価される式をとる。

・whileはブロックを実行する前に毎回条件を評価し、

条件が真の場合にのみループを続ける。

 

>>> done = False

>>> while not done:

...     echo_text = input("echo > ")

...     if echo_text == "bye":

...         done = True

...         print("さようなら")

...     elif echo_text == "done":

...         done = True

...     else:

...         print(echo_text)

... 

echo > こんにちは

こんにちは

echo > どうもです

どうもです

echo > bye

さようなら

>>>

 

※ not x ・・・xが偽ならTrue、そうでなければFalse。

「done = False」でdoneが偽になる。

「not done」がFalseであり続ければ真なのでループし続ける。

 

 

・doneで抜けるケース

>>> done = False

>>> while not done:

...     echo_text = input("echo > ")

...     if echo_text == "bye":

...         done = True

...         print("さようなら")

...     elif echo_text == "done":

...         done = True

...     else:

...         print(echo_text)

... 

echo > done

>>>

 

ループの終了時にメッセージを表示するコード。

>>> done = False

>>> while not done:

...     echo_text = input("echo >")

...     if echo_text == "bye":

...         print("さようなら")

...         done = True

...     elif echo_text == "done":

...         done = True

...     else:

...         print(echo_text)

... else:

...     print("さようなら")

... 

echo >こんにちは

こんにちは

echo >てすと

てすと

echo >done

さようなら

>>>

 

for文と同様、whileのelseもループが回らなくても実行される。

>>> while False:

...     print("False")

... else:

...     print("done")

... 

done

 

※Falseは偽なのでループが実行されない。

 

for文と同様、breakで抜けた場合にはelseが適用されない。

>>> i = 0

>>> while 1:

...     i += 1

...     if i == 3:

...         break

...     print(i)

... else:

...     print('finished')

... 

1

2

 

※ 「while 1:」は「while True:」と同じで

breakするまで無限にループを繰り返す。

真を表せばいいので正の整数なら100でも999でもいい。

 

whileはfor文と同様、continueブロック内の処理を途中で終了して

次のループ処理にすすめる。

>>> i = 0

>>> while 1:

...     i += 1

...     if i == 3:

...         continue

...     else:

...         print(i)

...     if i == 5:

...         break

... 

1

2

4

5

>>>

 

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)