【Python学習記④】繰り返しはお任せ!for文でリストや数字を楽々処理!基本のキから躓きポイントまで

Python基礎ノート

はじめに:プログラミングは「楽」をするためのもの!

こんにちは、くぴです!『39歳からのPython学習ノート』へようこそ!

前回、プログラムに「もしも~なら~する」という判断をさせるif文を学びました。今回は、プログラミングのもう一つの超重要要素、「繰り返し処理」に挑戦です!Pythonでは主にfor文(フォーぶん)を使うそうです。

同じような処理を何度も繰り返すのって、人間がやると面倒だし、ミスも起こりやすいですよね。プログラミングは、そういう面倒なことをコンピューターに任せて「楽」をするための技術でもあるんだな、と今回すごく感じました!

リストの中身を全部チェックしたり、決まった回数だけ何かを実行したり…。for文の使い方と、僕が実際に試してみて「おお!」と思ったこと、そしてやっぱり「あれ?」となったポイントを、今回は少し詳しくまとめてみます!

リストの中身を一つずつ取り出す!:基本のfor文

fruits = ["apple", "banana", "cherry"] みたいなリストがある時、中身を全部表示するのに print(fruits[0]), print(fruits[1])… って書くのは大変!そこで for文です。

基本的な形(公式みたいに言うと)はこうです↓

Python

for 一時的な変数名 in リストなどの集まり:
    繰り返したい処理(※インデントを忘れずに!)
  • for の後に、取り出した要素を一時的に入れておくための変数名を書きます(名前は自由!itemとかfruitとか分かりやすいものが◎)。
  • 次に in と書き、その後に要素を取り出したいリストなどの変数名を書きます。
  • 最後にコロン : をつけます。
  • 次の行から、リストの要素一つ一つに対して繰り返したい処理を、**インデント(字下げ)**して書きます。

例:果物リストの中身を順番に表示する

Python

fruits = ["apple", "banana", "cherry"]

print("好きな果物リスト:")
# fruitsリストから要素を一つずつ取り出して、変数 fruit に入れて繰り返す
for fruit in fruits:
    # ↓このインデントされた部分が繰り返される
    print(fruit)

print("--- リスト終わり ---") # ループが終わった後に実行される

これを実行すると、ターミナルにはこう表示されます↓

好きな果物リスト:
apple
banana
cherry
--- リスト終わり ---

リストの要素が一つずつ fruit という変数に順番に入り、print(fruit) が3回繰り返された、というわけですね!これは便利!

決まった回数だけ繰り返したい!: range() との合わせ技

「リストの中身全部」ではなく、「単純に5回繰り返したい」という時は、range()(レンジ) という関数と組み合わせると便利です。

  • range(5) → 0, 1, 2, 3, 4 という5つの数字を作ってくれます。
  • range(1, 6) → 1, 2, 3, 4, 5 という数字を作ってくれます(6の手前まで!)。

これをfor文と組み合わせます。

例:1から5までの数字を合計する

Python

total = 0 # 合計を入れる変数を最初に0で用意
for num in range(1, 6): # 変数 num に 1, 2, 3, 4, 5 が順番に入る
    total = total + num # totalにnumを足していく
    # ↓ここで使ってるのが f-string! 便利!
    print(f"{num}まで足した合計: {total}")

print(f"最終的な合計: {total}") # 結果: 最終的な合計: 15

【ここで脱線?】超便利な f-string について ところで、さっきの printf"..." っていう書き方が出てきましたよね? これは『f文字列(f-string)』と言って、文字列の中に {変数名} を書くと、その部分が自動的に変数の値に置き換わって表示される、超便利な書き方なんです! 以前やったみたいに print("合計:" + str(total)) って書くより、ずっと簡単で見やすいと思いませんか? ポイントは文字列の最初の引用符("')の『直前』に f を付けること! これだけです! これから僕も積極的に使っていこうと思います。

僕が間違えて書いたコードも載せておきますね。
どこを間違えてるか探してみてくださいね。

繰り返しの中で条件分岐!: for文 と if文 のコンボ

これができるようになると、一気にプログラムっぽくなりますね! forで繰り返しながら、ifで条件に合うものだけを選んで処理する、という合わせ技です。

【大事なイメージ】
for文とif文が組み合わさった時の動き
ここで大事なイメージ! for 変数 in リスト: って書くと、ループが1周するごとに、まずリストから要素が1個『取り出されて』、それが『変数』にポンッと入るんです。その『変数』に入ったものを使って、インデントされた部分の処理が行われます。 だから、例えばループの中で if 文を使う時、if がチェックする時点では、もうその周回の要素は変数の中に入って準備OK!な状態なんですね。「if文の段階では、もう値は取り出されてる」という僕のイメージ、これでスッキリしました!

【練習問題①:偶数だけ数えてみた!】 data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] から偶数だけ表示して、その数を数える、というのをやりました。

Python

data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
even_count = 0 # カウンター用変数を0で準備
print("リストの中の偶数:")
for number in data:
    # ↓ここで「余り」を求める % が登場!
    if number % 2 == 0: # 2で割った余りが0なら偶数
        print(number)
        even_count = even_count + 1 # ← 偶数が見つかったら+1!
print(f"偶数の合計個数: {even_count}") # 結果:3

【ここで脱線?】「余り」を求める演算子 % ここで出てきた『%』(パーセント記号)ですが、これはプログラミングでは『割り算の余り』を求めるための演算子なんです。「A % B」と書くと、「AをBで割った時の余り」を計算してくれます。例えば 10 % 3 は、10割る3は3余り1なので、結果は 1 になります。偶数かどうかを知りたいときは、「2で割った余りが0かどうか」を見れば良いので、number % 2 == 0 という条件式が使えるんですね!これも便利!

【僕のつまづきポイント】カウンターが増える仕組み 僕が最初「あれ?」ってなった、even_count が増える仕組みも復習です。even_count = even_count + 1 は、『イコールの右側を先に計算する』のがポイントでしたね! ①まず『現在の even_count の値 + 1』を計算して、②その『計算結果』を改めて変数 even_count に上書き保存する。この処理が、偶数が見つかるたびに行われるから、ちゃんと個数が数えられる、というわけでした。数学のイコールとは違う、『代入(値を入れ直す)』という考え方、少しずつ慣れてきました!

【練習問題②:FizzBuzzやってみた!】 1から30まで数えながら、3の倍数で”Fizz”、5で”Buzz”、15で”FizzBuzz”って表示する有名なやつです。if, elif, else の順番と、and の使い方がポイントでした!

この問題は意外と頭にすぐ流れてきたんですが、問題は15の倍数ですよね。
15の倍数とは書きましたが指示では、3でも5でも割り切れる。それをFizzBuzzと・・・
それを、この「and」が解決してくれました!

「〇〇で、かつ、△△でもある」という条件は `and` を使って繋げられます。
例: num % 3 == 0 and num % 5 == 0)

これで、すっきりコードを書くことができました!


【練習問題③:長い単語だけ探してみた!】
words = ["python", "is", "fun", "programming", "list", "variable", "challenge"] から5文字以上の単語を探す練習。len() の使い方でやらかしました(笑)

Python

words = ["python", "is", "fun", "programming", "list", "variable", "challenge"]
print("5文字以上の単語:")
for word in words:
    # if len(words) >= 5: ← リスト全体の長さを見ちゃダメ!
    if len(word) >= 5: # ← こっち!「今見てる単語」の長さ!
        print(word)

ループの中では、ちゃんとループ変数(ここではword)を使う、という基本、しっかり覚えました!

ちなみに、この問題のつまづきポイントが先ほど書いた、
【大事なイメージ】for文とif文が組み合わさった時の動き、につながるんです。

まとめ:繰り返し処理、マスターへの道は続く!

今回は for文を使った繰り返し処理を、少し詳しく見てみました。リストの中身を順番に処理したり、range()で決まった回数繰り返したり、その中でif文で条件分岐させたり…前回学んだif文と合わせると、一気にできることが増えた気がします!

まだまだ基本的なことだけですが、この「繰り返し」と「条件分岐」を使いこなせれば、色々なプログラムが作れそうな予感がしますね!

今回もエラーや勘違いはありましたが(笑)、それもまた一歩前進の証! これからも、楽しみながらPythonの世界を探検していきたいと思います!

ここまで読んでくださり、ありがとうございました!