Python

Pythonの繰り返し処理

By 2021年2月25日March 25th, 2021No Comments

人間にとって面倒な作業でもPythonを使えば簡単に繰り返しのループ処理を行うことも、演算結果によって処理内容を変えることも出来ます。ここではPythonの繰り返し処理について詳しくみていきたいと思います。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト

if文を使った処理

if文は英語のifという語が表す通り「もしAだったらBをする」という条件分岐を作るプログラムです。そのためif文が成り立った場合とそうでない場合の2通りのプログラムの流れを作ることができます。

if文を使って偶数と奇数を分岐させる簡単なプログラムを書いてみます。今回はaに代入した値が4(偶数)なので「偶数です」と表示されます。aに代入した数値が奇数の場合は奇数と表示されます。

a = 4
print(a,'は')
if a % 2 == 0:
    print('偶数です')
else:
    print('奇数です')

実行結果

4は
偶数です

<関連リンク>

if文の基本的な使い方

for文を使った繰り返しの処理

プログラムにおける繰り返しの処理(ループ)に便利なのが、for文です。

for 変数名 in オブジェクト:

      繰り返しの処理

リストやタプルから値を1つづつ取り出したい時はfor文を使います。指定したリストの要素の分だけ同じ処理を繰り返します。

animal_listから要素を一つづつ取り出してprint()関数で表示させるプログラムを書いてみます。

animal_list = ['dog','cat','lion','elephant','snake']
for animals in animal_list:
    print(animals)

実行結果

dog
cat
lion
elephant
snake

for文などで作った1つの処理のかたまりを「ブロック」と言います。上記のプログラムではforからprint(animals)までがひとつのブロックになります。

for文にelseブロックを追加することで、繰り返しが終了したときに実行される処理を指定できます。またbreakブロックを追加すると、処理を途中で止めることもできます。

<関連リンク>

for文を使った繰り返しの処理

繰り返しの回数を指定する

for文で繰り返しの回数を指定する際には、指定した範囲の数値を取得できるrange()関数を使って指定した範囲の繰り返し処理を実行します。

5回までHello worldを表示する処理を繰り返すプログラムを書いてみると以下のようになります。range()関数では開始位置と終了位置を指定でき(開始位置は指定しない場合は0から始まる)、この場合1から5までの数字をrange()関数で指定しています。

for i in range(1,6):
    print ("Hello world")

実行結果

Hello world
Hello world
Hello world
Hello world
Hello world

このプログラムでは変数iにrange(1,6)で指定した数字(1から5)を代入しながらprint(“Hello world”)を5回まで繰り返す処理を行っています。

while文を使った繰り返しの処理

繰り返しの処理の回数や範囲があらかじめ決まっていない場合はwhile文を使います。while文はある条件が成り立っている間だけ、特定の処理を繰り返し行うプログラムです。for文と異なり、繰り返す回数が分からないときに使える制御文です。

while 条件:

条件を満たしたときに行う処理

aが5以下の条件(a > 5)を満たすときにaに1づつ加算していく(a += 1)プログラムを書いてみます。

a = 0
while a < 5:
    print(a)
    a += 1

実行結果

0
1
2
3
4

for文の繰り返し処理と同じようにwhile文でも繰り返しが終わった後に実行する処理をelseブロックで追加することができます。上記のプログラムで1から5までの処理が終わったときに「終了しました」と表示するプログラムを書くにはelseブロックを追加するだけです。

a = 0
while a < 5:
    print (a)
    a += 1
else:
    print("終了しました")

実行結果

0
1
2
3
4
終了しました

while文で注意すべきは「無限ループ」です。誤ったプログラムを書くと永遠に繰り返しが成立する無限ループが、プログラムのバグの一つとなるので注意が必要です。

誤ってループをしてしまった際はCtrl+Cボタンで実行を停止できます。

<関連リンク>

無限ループを抜ける方法

ループの中断

繰り返しの処理で流れを変えるときに使えるのがbreak文とcontinue文です。breakは実行途中のループ処理を中断し、break文以降に書かれたブロックの処理は実行されません。

while 条件:

  ループ処理

break

  ループ処理2(breakが実行されたときには実行しないブロック)

ここではa-bの値が0になるとbreakを実行して処理を中断するプログラムを書いてみます。

a = 0
b = 5
while a < 5:
    if (b - a) <= 0:
        break
    print(b - a)
    a += 1

実行結果

5
4
3
2
1

b-aの結果が0になったときにbreakの処理が行われました。(b – a)<=0 の条件を満たしてないとき(b-aが0ではない時)にはb-aの値がprint(b – a)の命令によって表示され、aに値を1づつ足している(a += 1)のが分かると思います。

ループを中断するbreak文に対し、continue文は繰り返しのその回の処理を中断し、中断した箇所の一番近いループのブロックから処理を再開するという特徴があります。

while 条件:

if continueを実行させる条件

continue

ループ処理

ここではnumber_listのリストに文字列が入っている時のみメッセージを表示し、それ以外の時はリストの内容を表示させる繰り返し処理を書いてみたいと思います。

number_list = [1,2,3,'四',5,6]
for a in number_list:
    if type(a) == str:
        print("これは文字列です")
        continue
    print(a)

実行結果

1
2
3
これは文字列です
5
6

break文と違いリストの4番目の’四’が文字列だった場合に処理が中断されずに、5と6の処理が実行されているのが分かると思います。

ここでは文字列だった場合(type(a) == str)のみprint(“これは文字列です”)が実行され、それ以外の場合は、print(a)が実行されるようになっています。

途中で文字列が検出され処理が中断されても、それ以降はprint(a)の処理が進むようになっているのがbreak文との大きな違いです。

内包表記を使った繰り返し

リストの内包表記では、リストの要素を順番に変数に代入し、その変数を使った式を実行することで、その結果をリストの要素として順番に格納します。リスト内包表記にはfor文やif文を使った条件式を書き込むことができ、for文やif文よりもシンプルなコードでプログラムを実行できるのが特徴です。

リストから取り出した数を2乗するプログラムを書く際にfor文を使うと以下のようになりますが、

a = [1,2,3,4,5,6]
a_list = []
for x in a:
    a_list.append(x**2)
print(a_list)

実行結果

[1, 4, 9, 16, 25, 36]

内包表記を使うとすっきりと簡潔なプログラムになります。

a = [1,2,3,4,5,6]
a_list = [x**2 for x in a]
print(a_list)

実行結果

[1, 4, 9, 16, 25, 36]

またリストの内包表記ではif文やfor文を使って条件を分岐させることも可能です。

[式 for 変数 in イテラブルなオブジェクト (if 条件)]

イテラブル(iterable)とは要素を順番に取り出せるリストや文字列、タプル、辞書などのことです。このようなオブジェクトをイテラブルなオブジェクトと言います。内包表記はインテラブルなオブジェクトから新しいデータ構造を制作するための方法で、Python独特の書き方です。

ここでは上記のa_listでできた数字のリストの中から10以上の数字を取り出して2倍にするプログラムを書いてみます。

a = [1,4,9,16,25,36]
a_double = [x*2 for x in a if x >= 10]
print(a_double)

実行結果

[32, 50, 72]

リストの数字の中から10以上の16,25,36だけが取り出され2倍(x*2)されたのが分かると思います。

<関連リンク>

リストの内包表記

まとめ

pythonにはさまざまな繰り返しの処理があり、条件に応じて使い分けることができます。

・一番基本となる条件分岐はif文

・for文とrange()関数を組み合わせることで繰り返しの回数を指定できる

・while文では無限ループに注意してbreakで無限ループを抜ける処理を作っておく

・continueとbreakを使えばループ処理を分岐させることができる

・内包表記を使うとシンプルなコードで繰り返しの処理ができる

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL