for break continue

Python学習【365日チャレンジ!】41日目のマスターU(@Udemy11)です。

Python学習をするときは、iPhoneだけでなく、Macも使っていますが、音楽を聞きながらのほうが気分良く学習することができます。

といっても日本語の音楽を聴いていると無意識に歌詞が頭の中に入ってきてしまうので、洋楽かクラシックを聴いていますが、Amazonプライムがあれば十分聴きたい曲はカバーされています。

Amazonプライムに加入すれば、Amazonでの買い物が送料無料に加え、お急ぎ便が使えるし、独占配信の映画や200万曲の音楽が見放題に聴き放題です。

その上、30日間は無料お試しができちゃうんです!

ほんとおすすめですよ!

Amazonプライムの紹介はここまでにして、本日のPython学習をすすめていきましょう!

昨日の復習

昨日は、input関数で値を取得して、その値によって、ループを繰り返したり、ループを抜けるコードを学習しました。

while True:
    word = input('Enter word:')
    if word == 'ok':
        print('Nice answer!')
        break
    print('It\'s wrong')

出力結果

Enter word:

出力結果のコンソール画面に’ok’以外の値を入力したときは、’It’s wrong’と表示されて入力を求めるループに戻り、’ok’が入力されたときは、’Nice answer’と出力し、ループを抜けます。

input関数で取得できる値は、string型(文字列)になりました。

整数を取得する場合は、取得する変数をint型(整数)に変換するとうまくいきました。

while True:
    word = input('Enter number:')
    num = int(word)
    if num == 10:
        print('You\'ve got it!')
        break
    print('It\'s wrong')

出力結果

Enter number:

出力結果は同じですが、指定した数字(10)以外が入力されると’It’s wrong’が出力されてループに戻り、10が入力された時点で、’You’ve got it!’と出力して、ループを終了します。

アルファベットなどの文字列を入力をした場合はエラーが起こってしまいます。

文字を入力したときにエラーが起こらないようにするには、【str.isdigit()】メソッドを使うとエラーを回避することができました。

詳しいことは、昨日の記事をごらんください。

それでは、今日のPython学習にはいっていきます。

for文の使い方

今日は、for文の使い方ですが、while文でfor文と同じ動作をさせることができるので、まずはその違いを確認してみます。

box = [1, 2, 3, 4, 5]
i = 0
while i < len(box):
    print(box[i])
    i += 1

出力結果

1
2
3
4
5

リスト型変数boxに1〜5までの値を入れて、その値を出力するコードですが、for文を使うことでコードをスッキリすることが可能です。

num = [1, 2, 3, 4, 5]
for i in num:
    print(i)

出力結果は同じになります。

何をしているかというと、リスト型変数numに入っている値を最初から順番に変数iに代入して、変数iをprint出力しています。
すべての値の代入が完了すれば、ループを抜けるようになっています。

この変数numのように、繰り返し値を取り出せるものを【イテレーター】と呼び、Pythonではよく出てくるので、憶えておきましょう。

リスト型やタプル型、辞書型などがイテレーターと思ってしまうのですが、【Python公式サイトの用語集】によると、リスト型やタプル型、辞書型などは、「反復可能オブジェクト」と定義されていて、イテレーターは、「データの流れを表現するオブジェクト」と解説されています。

小難しいことはよくわかりませんが、用語集の解説を読み解くと、反復可能オブジェクトの中にイテレーターが格納されているような感じでした。

車のエンジンの構造はわからないけど、アクセルを踏めば車は走り出して、ブレーキを踏んだら止まるのと同じように、Pythonには、【イテレーター】というものと【反復可能オブジェクト】というものがあって、繰り返しループのfor文では反復可能オブジェクトのイテレータが使われている程度に憶えておけばいいでしょう。

文字列でも大丈夫

例えば、これを文字列で試してみるとどうなるでしょうか?

for i in 'abcde':
    print(i)

出力結果

a
b
c
d
e

文字列’abcde’の前から順番に値を取り出して変数iに代入してprint出力を繰り返し、最後の値まで入れてループが終了します。

文字列のリストでも試してみた

次に、文字列のリストでも試してみました。

最初に、文書の文字列を変数に代入して、それをリスト化したあと、for文で一つづつ取り出してみました。

sentence = 'My name is Mike'
for i in sentence.split():
    print(i)

出力結果

My
name
is
Mike

splitメソッドはPython学習16日目にやりましたね。

ついついやってしまいがちなのが、

list(sentence)

これをやってしまうと、変数sentenceの文章を一文字づつ切り刻んでリストにしてしまいますので、注意しましょう!

['M', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'M', 'i', 'k', 'e']

break文とcontinue文も使える

もちろんwhile文と同じように、break文もcontiue文も使うことが可能です。

for word in ['My', 'name', 'is', 'Mike',]:
    if word == 'is':
        break
    print(word)

出力結果

My
name

変数wordがisだったときに、breakでループを抜けるので、最初の2つの文字列を出力した時点でループが終了します。

もちろんcontinue文も使えますし、while True文の場合は、breakと組み合わせる必要がありましたが、for文の場合は、終了時点が指定されるので、continue単体で使うことが可能です。

for i in ['My', 'name', 'is', 'Mike',]:
    if i == 'name':
        continue
    print(i)

出力結果

My
is
Mike

continueは、ループを途中で中断して、次のループに進みます。

このコードは、変数iがnameのときに、print出力せずに次にループに入るので、nameだけ出力されません。

失敗は成功のもと?

いろいろと試してみると、エラーが起こったり、思ったような出力にならなかったりして好奇心がそそられます。

私の場合、無限ループも結構な頻度で起こしてしまいます。

人って失敗からしか学べない」なんてことを言ってる人もいるくらいなので、失敗って重要なんですよね。

Panasonicの創業者である松下幸之助は、失敗したことがないらしいですが、これは、成功するまでやれば、失敗は失敗でなくなり、成功への過程になるということです。

起業家に投資するエンジェルは、どれだけ失敗を経験しているかを重要視しているらしいですし、失敗することでしか学べないことがたくさんあるわけです。

とにもかくにも、たくさんコードを書いて、たくさん失敗して、経験を積み上げていかないことには、自分自身の引き出しが増えないので、疑問に思ったことはどんどん試していきましょう!

それでは、明日もGood Python!