0から学ぶ【Python基礎】

Pythonのforループとwhileループを徹底解説!繰り返し処理の実装

前のページ|次のページ

10章では『for文』と『while文』による繰り返し処理について解説します。

for文の書き方、while文の書き方、range関数、break、continueを扱っています。

本連載講座【Python 基礎編】では、「プログラミング未経験の方」が挫折せずにPythonの基礎を学ぶことができます。

プログラミングを始めて学ぶ方が理解できるよう、丁寧に解説しています。

さらに、学んだ内容を身につけるための演習問題も用意しています。

・Pythonを挫折せずに学習したい

・無料でPythonを確実に習得したい

このような考えを持っている方は、Tech Teacherが運営する【Python 基礎編】を用いて、Pythonの学習をすることをお勧めします!

<目次>

1章:Pythonの特徴・概要
2章:環境構築と基本操作
3章:出力関数print()
4章:数値の型(int、float)と算術演算子
5章:文字列の操作(len・抽出・結合)
6章:真偽値(True・False)・論理演算(AND、OR、NOT)・比較演算子
7章:変数
8章:if文による条件分岐
9章:リストと辞書
10章:for・whileによる繰り返し(ループ)処理
11章:関数の作り方・使い方
12章:クラスとモジュール

繰り返し処理とは

繰り返し処理

引用:https://note.com/ryosuke_kamei/n/n845d99f3ba37

まず、プログラミングにおける繰り返し処理について解説します。

繰り返し処理とは、名前の通り特定の処理を繰り返すことを意味し、Pythonではfor文while文を用いて実現することができます。

それでは、実際にfor文やwhile文の使い方を見てみましょう。

for文の使い方

まず、『for文』の使い方を見てみましょう。

for文は以下のように記述します。

for (変数) in range (range関数・リスト・文字列など):
    (処理)

for文は変数を連続的に変化させ、変化するたびにfor文内に書かれた処理を1回実行します。

変数が最後まで変化したら、for文全体の処理が終了します。

〇 1行目の最後にコロン(:)を付けるのを忘れないようにしましょう。
〇 if文と同じように、for文の処理を書く部分は2文字または4文字のインデント(字下げ)をする必要があるので注意しましょう。

これだけではピンとこない方も多いと思うので、具体的な使用例を見ていきましょう。

今回はrange関数・リスト・辞書・文字列を用いた繰り返し処理を紹介します。

range関数による繰り返し

終了値のみを指定した場合

まずは例として、range関数を用いて0から9までの整数を順に出力するプログラムを見てみましょう。

for i in range(10):
    print(i)
0
1
2
3
4
5
6
7
8
9

上の例ではi=0から始まり、iの値が1回だけ出力されたらループが1周したことになります。

次にi=1となり、また1回だけiの値が出力されます。その後も同じようにループが続いていきます。

最後にi=9の場合の処理が完了したらループから抜け出します。

range関数range(開始値, 終了値, 増加量)のように記述し、開始値から終了値まで増加量で指定した間隔で増えていくような整数列を返します。

r1 = range(10)
r2 = range(2, 8)
r3 = range(3, 12, 3)

print(list(r1))
print(list(r2))
print(list(r3))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7]
[3, 6, 9]

開始値・終了値を指定した場合

では次に、for文においてrange関数の開始値と終了値を指定した場合の例を見てみましょう。

for i in range(4, 8):
    print(i)
4
5
6
7

開始値と終了値のみを指定した場合、変数は開始値から(終了値)-1まで1ずつ増加していきます。

開始値・終了値・増加量を指定した場合

最後に開始値・終了値・増加量を指定した場合の例を見てみましょう。

増加量を負の値に指定すれば、変数の値を小さくしながら繰り返し処理を行うこともできます。

nums1 = []
nums2 = []

# 値が2ずつ増加していく
for i in range(3, 10, 2):
    nums1.append(i)

print(nums1)

# 増加量に負の値を指定すると、変数の値を減らしていく処理ができる
for j in range(10, 0, -1):
    nums2.append(j)

print(nums2)
[3, 5, 7, 9]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

リストの要素・文字列による繰り返し

for文ではリストの要素を1つずつ取り出して繰り返し処理を行うことができます。

以下はリストの各要素を2倍したリストを出力するプログラムです。

nums = [1, 2, 3, 4, 5]
nums_double = []

for x in nums:
    nums_double.append(x * 2)

print(nums_double)
[2, 4, 6, 8, 10]

inの後にリストを書くことで、リストの中身を1つずつ取り出して繰り返し処理を行うことができます。

また、文字列の各文字に対しても同様の処理を行うことができます。

name = 'Alice'

for c in name:
    print(c)
A
l
i
c
e

辞書の要素による繰り返し

キーによる繰り返し

辞書のキーを1つずつ取り出して繰り返し処理を行うためには、『keys』メソッドを使います。

price = {'apple': 100, 'grape': 500, 'banana': 300}

for fruit_name in price.keys():
    print(fruit_name)
apple
grape
banana

また、inの後に辞書そのものを指定しても同様の処理を行うことができます。

price = {'apple': 100, 'grape': 500, 'banana': 300}

for fruit_name in price:
    print(fruit_name)
apple
grape
banana

値による繰り返し

辞書のを1つずつ取り出して繰り返し処理を行うためには、『values』メソッドを使います。

price = {'apple': 100, 'grape': 500, 'banana': 300}

for fruit_price in price.values():
    print(fruit_price)
100
500
300

キーと値を同時に取り出す繰り返し

辞書からキーと値の組を1つずつ取り出して処理を行うためには、『items』メソッドを使います。

変数を2つ指定することで、左側の変数にキーが、右側の変数に値がそれぞれ取り出されます。

price = {'apple': 100, 'grape': 500, 'banana': 300}

for fruit_name, fruit_price in price.items():
    print(fruit_name, fruit_price)
apple 100
grape 500
banana 300

for文を用いたリストの定義

for文を用いてリストを定義する方法を紹介します。この方法はよく使われるので、しっかり覚えておきましょう。

リストを定義するときにfor文を用いる場合、以下のように記述します。

# 0から9までの値が順に並んだリスト
li = [x for x in range(10)]

print(li)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

上の例では、0から9までの整数値が順に並んだリストを定義しています。

for文の前の部分に式を書くことでさまざまなリストを定義できるので便利です。

li = [i * 3 + 1 for i in range(10)]

print(li)
[1, 4, 7, 10, 13, 16, 19, 22, 25, 28]

while文の使い方

続いて『while文』の使い方を見てみましょう。

while文は以下のように記述します。

while 条件式:
    処理

while文では、1行目の条件式が真(True)の間、処理を繰り返します。

以下は、while文を用いて0から9までの整数を順に出力するプログラムです。

i = 0

while i < 10:
    print(i)
    i += 1
0
1
2
3
4
5
6
7
8
9

i=0から始まり、各ループの最後でiに1が加算されていきます。

iが10になったときに初めて条件式が偽(False)となるので、ループから抜け出して処理が終了します。

while文は条件式が真の間処理を繰り返すという性質上、無限ループが生じてしまうことがあります。

無限ループが生じた場合、『Ctrl+C』で実行を中断できます。

break文・continue文・pass文

for文やwhile文を使う中で、ある条件を満たしたときにループを抜けたり処理をスキップしたりすることがあります。

そのようなときに使用するのが『break文』『continue文』『pass文』です。

それぞれ、実際の例とともに確かめてみましょう。

break文

『break文』は、ループを抜け出したいときに使用します。

以下は、リストに格納された数値を取り出して出力していき、100以上の値が取り出されたら処理を終了するプログラムです。

nums = [1, 39, 42, 20, 128, 10, -10, 200]

for x in nums:
    if x >= 100:
        break
    print(x)
1
39
42
20

実際に、128以降の値は出力されていないことが分かります。

continue

『continue文』は、ループをスキップし、次のループの処理を開始したいときに使用します。

以下は、リストに格納された数値のうち3の倍数以外を出力していくプログラムです。

li = [i for i in range(15)]
print(li)

for x in li:
    if x % 3 == 0:
        continue
    print(x)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
1
2
4
5
7
8
10
11
13
14

xが3の倍数のとき、continue以下の部分(print(x))をスキップして次のループに入っていることが分かります。

pass

『pass文』は、文法上処理を書く必要があるにもかかわらず何も処理を行いたくないときに使用します。

たとえば以下のコードで、取り出した値が0のとき何も処理を行わないようにしたいとします。

data_list = [10, -5, 0]

for data in data_list:
    if data > 0:
        print("正の値です: {}".format(data))
    elif data == 0:
        # 何も処理しない
    else:
        print("負の値です: {}".format(data))

しかし文法上else ifの後に処理を書く必要があり、何も書かないとエラーが出てしまいます。

そこで、pass文を用いることでエラーを発生させずに目的の処理を記述することができます。

data_list = [10, -5, 0]

for data in data_list:
    if data > 0:
        print("正の値です: {}".format(data))
    elif data == 0:
        pass
    else:
        print("負の値です: {}".format(data))
正の値です: 10
負の値です: -5

ちなみに以下のように記述することでpass文を使わなくても目的の処理を行うプログラムが書けます。

data_list = [10, -5, 0]

for data in data_list:
    if data > 0:
        print("正の値です: {}".format(data))
    elif data < 0:
        print("負の値です: {}".format(data))
正の値です: 10
負の値です: -5

しかし、プログラムを読みやすくしたり、何も処理を行わない関数(関数については11章で解説)を定義したい場合などにpass文が用いられるので、しっかり覚えておきましょう。

10章の練習問題

以下の練習問題を解いてみましょう。

練習問題

問1. for文を用いて、以下の(1)~(3)のプログラムを書いてください。

(1) 1から10までの整数を順に表示するプログラム
(2) 1から100までの整数の総和を出力するプログラム
(3) リストfruits = ['apple', 'banana', 'orange', 'grape']の要素を先頭から1つずつ出力するプログラム(ただし、'orange'が現れたら出力する前にループを抜けて終了する)

問2. while文を用いて、以下の(1)~(3)のプログラムを書いてください。

(1) 1から10までの整数を順に表示するプログラム
(2) 1から100までの整数のうち、3の倍数以外の総和を出力するプログラム
(3) リストfruits = ['apple', 'banana', 'orange', 'grape']の要素を先頭から1つずつ出力するプログラム(ただし、'orange'は出力しない)

(3)のヒント: len(fruits)fruits要素数を取得できます。

解答

問1(クリックして解答を表示)

(1)

for i in range(1, 11):
    print(i)
1
2
3
4
5
6
7
8
9
10

(2)

sum = 0

for i in range(1, 101):
    sum += i

print(sum)
5050

(3)

fruits = ['apple', 'banana', 'orange', 'grape']

for fruit in fruits:
    if fruit == 'orange':
        break
    print(fruit)
apple
banana

問2(クリックして解答を表示)

i = 1

while i < 11:
    print(i)
    i += 1
1
2
3
4
5
6
7
8
9
10

(2)

sum = 0
i = 1

while i <= 100:
    if i % 3 == 0:
        i += 1
        continue
    sum += i
    i += 1

print(sum)
3367

(3)

fruits = ['apple', 'banana', 'orange', 'grape']
i = 0

while i < len(fruits):
    if fruits[i] == 'orange':
        i += 1
        continue
    print(fruits[i])
    i += 1
apple
banana
grape


次の記事へ

Python|関数の基本を徹底解説!戻り値・引数を理解しよう 前のページ|次のページ 11章ではPythonにおける『関数』について解説します。 本記事では、「関数とは何か?」「関数の使い方...