初心者のためのPython入門~繰り返し処理:For文,While文~

どうも~むるむるです~

今回の記事では「繰り返し処理:For文,While文」について学んでいきたいと思います.

このシリーズではプログラミング初心者が最低限のPythonの知識を最短で身に着けることを目標としています.

このシリーズでは以下の順番でPythonの基本的な知識を学習していきます.

繰り返し:For文

For文は同じ処理を繰り返し行いたい場合に使われます.構文は以下のようになります.

for 変数 in イテラブルオブジェクト(例:List, Tuple…):
   処理

イテラブルオブジェクトとは,ザックリ言うとリストやタプルなどの複数の要素を含み,そこから一つずつ取り出せるものです.

for文を使うと,そのイテラブルオブジェクトの入っている要素を一つずつ取り出して変数に代入していきます.

例を見てみた方がわかりやすいでしょう.

list1 = [0, 1 ,2 ,3]
for i in list1:
    print(i)
'''
出力結果:
0
1
2
3
'''

if-else文の時と同じで for文の中身を書くときも1つ分だけインデントを下げなくてはいけません.

上の例では「[0, 1, 2, 3]」というリストの前から一つずつ変数「i」に代入して出力をしています.

もちろん,リストの要素は整数である必要はなく,文字列や小数,真偽値の他,リストのリストを作ることもできます.

# listのlist
listOflist = [[1,2,3], [4,5], [6,7,8]]
for li in listOflist:
    print(li)
'''
出力結果:
[1, 2, 3]
[4, 5]
[6, 7, 8]
'''   

range関数

毎回上のようにリストを自分で書くのは面倒だと思う方も多いでしょう.そういうときはrange関数の出番です.

range関数を使えば簡単に数字の連番などが作れます.

以下の表とコードを見てください.

range関数意味
range(n)0からn-1までの連番range(5): 0, 1, 2, 3, 4
range(n, m)nからm-1までの連番range(2,5): 2, 3, 4
range(n, m, l)nからm-1までのl飛びの数字range(2, 10, 3): 2, 5, 8
## range
for i in range(3):
    print(i)
print('==========')
for i in range(3, 5):
    print(i)
print('==========')  
for i in range(1, 10, 2):
    print(i)
'''
出力結果:
0
1
2
==========
3
4
==========
1
3
5
7
9
'''

最後の数字が含まれないことに気を付けてください.

数字を小さい順に並べたいときもrange関数を使って以下のように書くことができます.

## 逆順
for i in range(10, 0, -2):
    print(i)
print("=======================")
for i in reversed(range(2, 11, 2)):
    print(i)
'''
出力結果:
10
8
6
4
2
=======================
10
8
6
4
2
''' 

2つ目のfor文ではreversed関数を使っています.これを使うことでrange関数をそのままひっくり返すことができます.

breakとcontinue

for文を書いているうえで,途中で条件を満たしたときだけ繰り返し処理をスキップしたり,その場でストップしたいときもあると思います.

そういう時は「break」と「continue」を使います.

下の例を見るのが一番わかりやすいでしょう.

# continue と break
print('continueを使った場合')
for i in range(5):
    if i == 2:
        continue
    print(i)
    
print('=================')

print('breakを使った場合')
for i in range(5):
    if i == 2:
        break
    print(i)
'''
出力結果:
continueを使った場合
0
1
3
4
=================
breakを使った場合
0
1
'''

for文の中で「continue」を使うと,その回だけ繰り返し処理がスキップして次の回にいきます.

上の例では変数「i」が2の時だけ,繰り返し処理をスキップし次に進んでいるので0, 1, 3, 4は出力されていますが,2は出力されていないのがわかると思います.

「break」は「continue」と少し似ていますが,「break」のときは,その場でfor文から抜けてしまうので,上の例では0, 1だけ出力されて,それ以降は出力されていません.

リスト内包表記

新しいリストを作るときに,リスト内表記というのを使うと,簡単にリストが作れます.リスト内包表記は以下のように書くことができます.

[式 for 変数名 in イテラブルオブジェクト] 

例を見てみましょう.

sq = [i**2 for i in range(10)]
print(sq)
'''
出力結果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
'''

リスト内表記の書き方と上のコードを見比べてみてください.

上のコードでは0から9まで(「range(10)」)の値を2乗した値(「i**2」)がリストに入っています.

また,リスト内包表記には条件を追加することもできます.書き方と例を見てみましょう.

[式 for 変数名 in イテラブルオブジェクト if 条件式]
sq_even = [i**2 for i in range(10) if i % 2 == 0]
print(sq_even)
'''
出力結果:
[0, 4, 16, 36, 64]
'''

上の例では条件(「i % 2 == 0」)のときだけ「i**2」を要素とするリストを作っています.つまり,偶数の2乗のリストになっています.

繰り返し:While文

for文ではイテラブルオブジェクトの要素がなくなるまで繰り返し処理を行いましたが,繰り返し処理を行う別の方法としてWhile文を使う方法があります.

While文は設定した条件がTrueである限り繰り返し処理を続けます.書き方とコード例は以下です.

while 条件式:
  条件式がTrueのとき実行される処理
count = 0 
while count < 5:
    count += 1 # count = count + 1 と同じ
print(count)
'''
出力結果:
5
'''

上では「count < 5」を満たしている間は繰り返し処理が行われ,そうでなくなったときに繰り返し処理をやめます.上にある「+=」はコメントにもあるとおり,自身の値に右辺の値をさらに足したものを代入することを意味する代入演算子です.

While文を使うときに気を付けたいのが条件式がずっと「True」のままだと,繰り返し処理から抜け出せなくなります.例えば以下の例を見てみてください.

# 無限ループ
count = 1
while count > 0:
    count += 1

上のコードでは「count > 0」を満たす限り繰り返し処理が続けられますが,自身の値に毎回1を足していっても,いつまでたっても条件式「count > 0」は「False」になりません.

このように繰り返し処理のループから抜け出せなくなることを無限ループと言ったりしますが,たまに気づかずにやってしまうので気を付けましょう.

確認クイズ

クイズ1

以下のコードで出力される値を考えてみてください.考えたら実際にコードを書いてみて当たっているか確認してみましょう.

for i in range(100):
    if i % 2 == 0:
        continue
    if i % 3 == 0:
        print(i)
    if i == 21:
        break

クイズ2

リスト内包表記を使って,0~100まで3の倍数だけを含むリストを作ってください.

次回

次回は「関数の定義,関数の呼び出し,ラムダ式」について学習します.

次の記事はこちら.

機械学習のためにしっかりとPythonを勉強したいなら,ある程度の基礎を身に着けた後に下の本を読むのがお勧めです.この本をこなせば,より高いレベルへ到達できるでしょう.

最新情報をチェックしよう!