スポンサーリンク

コードが書ける!数式が書ける!AAが書ける!スタンプが貼れる!

無料の匿名掲示板型SNS「このはちゃんねる

新規会員募集中!

【Python】よくわかるfor文の書き方、break, continue, elseなど【入門第22回】

106, 2019-08-15

目次

for文の書き方

こんにちは、narupoです。

今回は前回に引き続き、for文の書き方をやりたいと思います。
前回までの内容で、みなさんは十分for文を書くことが出来ます。
しかし、この記事を読めば、さらにPythonのfor文がわかるようになります。

具体的には↓を見ていきます。

  • break
  • continue
  • else
  • 文字列とfor文
  • enumerate

これらを知ればもはや皆さんはfor文マスターです。
ではいってみましょう。

break文

for文を使ってると、ループの途中でfor文から抜け出したい時があります。
for文の中の退屈な毎日に飽きが来て、外に飛び出したいわけですね。

そういう時はbreak(ブレーク)文が使えます。
break文を使えばループの途中でfor文の外にジャンプすることができます。
たとえば↓のようなループを見てみましょう。

for i in range(10):
    print(i)

↑のコードは10回ループしてカウント変数を出力する簡単なサンプルです。
↑のコードで「i5以上になったらループから抜ける」という処理を書きたくなったとします。
そういう時は↓のように書きます。

for i in range(10):
    if i >= 5:
        break
    print(i)

if文の中でbreakと書いてますが、これがループから脱出する命令です。
↑のコードを実行すると↓のような結果になります。

0
1
2
3
4

break文が実行されるとどこにジャンプするのかというと、for文の直後です。
たとえば↓のようなコードを見てみましょう。

print('ループを開始します')
for i in range(10):
    if i >= 5:
        break
    print(i)
print('ループが終わりました')

↑のコードの実行結果は↓のようになります。

ループが開始します
0
1
2
3
4
ループが終わりました

カウント変数i5以上になったら、for文の直後にジャンプしているのがわかります。

break文の有効範囲

for文がネスト(入れ子)になっていたらどうなるのでしょうか。
たとえば↓のようなコードです。

for i in range(4):
    for j in range(4):
        if j >= 2:
            break

↑のコードで、break文がどのfor文から抜け出すのかということです。
この場合、break文はbreak文が書かれているfor文から抜け出します。
ためしに↓のコードを実行してみましょう。

for i in range(4):
    for j in range(4):
        if j >= 2:
            break
        print('わんわん')
    print('にゃんにゃん')

↑のコードの実行結果は↓のようになります。

わんわん
わんわん
にゃんにゃん
わんわん
わんわん
にゃんにゃん
わんわん
わんわん
にゃんにゃん
わんわん
わんわん
にゃんにゃん

わかりづら!

わかりづらいですが、内側のfor文が2回のループで終了して、その内側のfor文の直後にジャンプしているのがわかります。

continue文

To Be Continued...

for文を書いていると、ループをスキップしたい時があります。
そういう時はcontinue(コンティニュー)文が使えます。

たとえば↓のようなコードを見てみましょう。

for i in range(4):
    print('こんにちは', i)

    if i >= 2:
        continue

    print('ご機嫌いかが?')

↑のコードの実行結果は↓のようになります。

こんにちは 0
ご機嫌いかが?
こんにちは 1
ご機嫌いかが?
こんにちは 2
こんにちは 3

カウント変数が2以上になったらcontinue文で、それ以降の処理をスキップしています。
↑のコードでスキップしているのはprint('ご機嫌いかが?')という処理です。

continue文はbreak文と違い、ループから抜け出す命令ではないので、実行結果のようにループは最後まで実行されます。

continue文もcontinue文が書かれたfor文の中でループをスキップします。

else文

for文を書いていると、breakされずに最後までループが完了したときに実行したい処理を書きたい時があります。
その場合、else(エルス)文が使えます。

たとえば↓のようなコードを見てみましょう。

for i in range(4):
    print(i)
else:
    print('ループが完了しました')

↑のコードの実行結果は↓のようになります。

0
1
2
3
ループが完了しました

このように、for文の直後にelse文を書くと、ループが完了したときの処理を書くことができます。
しかし、ふつうにfor文の直後にprintなどを書くのと何が違うのでしょうか。
for文のelse文は、for文がbreak文などで終了したときは実行されません。
たとえば↓のようなケースです。

for i in range(4):
    if i >= 2:
        break
    print(i)
else:
    print('ループが完了しました')

↑のコードの実行結果は↓のようになります。

0
1

↑このようにfor文をbreak文などで終了した場合、else文は実行されません。

サンプルコード

いまいち、このelse文は使い道がわかりません。
なのでサンプルコードを書いてみました。
たとえば、ループ中に特定の数を見つけたいとします。
で、見つけた場合と見つけられなかった場合で処理を分けたいとします。
そういう時にelse文はうってつけです。

たとえば↓のようなコードです。

target = 2

for i in range(4):
    if i == target:
        print(f'{target}が見つかりました')
        break
else:
    print(f'{target}が見つかりませんでした')

↑のコードでは、targetがループ中に見つかるので実行結果は、

2が見つかりました

と表示されます。
target8などに変更すると、

8が見つかりませんでした

と表示されます。
このサンプルコードは特定のデータ群の中から特定のデータを見つけたい処理に応用することが出来ます。
今はまだ解説していませんが、リストやタプルの中から特定のデータを見つけたい場合などに有効なコードと言えるでしょう。

文字列とfor文

じつは、文字列はfor文で回すことができます。
たとえば↓のようにです。

for c in 'The cat':
    print(c)

↑のコードの実行結果は↓のようになります。

T
h
e

c
a
t

このように文字列は、rangeなどを使わなくても文字(要素)を取り出していくことが可能です。
もちろん、rangeを使って文字列の文字を参照することも出来ます。
たとえば↓のようにです。

s = 'The cat'

for i in range(len(s)):
    print(s[i])

実行結果は先ほどのコードと同じです。
len関数を使ってrangeに文字列の長さを渡します。
そうすれば、文字列の長さ分、ループが回ります。
その時の添え字で文字列にアクセスすれば、順々に文字を参照することができます。

たとえば文字列を逆順に出力したいとします。
そういう場合は、rangeを使って↓のようにします。

s = 'The cat'

for i in range(len(s)-1, -1, -1):
    print(s[i])

↑のコードの実行結果は↓のようになります。

t
a
c

e
h
T

しかし、文字列を逆順にしたい場合は、こういったrangeで書くということはあまりしません。
もっと簡単に文字列のスライス機能を使います。
たとえば↓のようにです。

s = 'The cat'

for c in s[::-1]:
    print(c)

速度的にどちらが速いのかということはこの記事では言及しませんが、どちらの方法も使えるようになっておくといいでしょう。

enumerateクラス

さきほどの文字列の例で、添え字と文字を同時に取り出せると便利な場合があります。
そういう時はenumerate(イーニューメレート)クラスを使います。

s = 'The cat'

for i, c in enumerate(s):
    print(i, c)

↑のコードの実行結果は↓のようになります。

0 T
1 h
2 e
3
4 c
5 a
6 t

for i, c in enumerate(s):のようにして、添え字と文字を同時に取り出すことができます。
iが添え字でcが文字です。

おわりに

いかがでしたでしょうか。
for文でよく使うのはbreak文とcontinue文あたりです。
この辺を覚えておくといいかもしれません。

次回に続きます。

また見てね

投稿者名です。64字以内で入力してください。

必要な場合はEメールアドレスを入力してください(全体に公開されます)。

投稿する内容です。

スポンサーリンク

スポンサーリンク

スポンサーリンク

スポンサーリンク