for文とは
for文とはpythonの制御構造の一つで、処理を繰り返す時に使われる構文です。
制御構造に関しては前回の「if文」を参考にしてください。
当サイト(In-Output)におけるfor文の説明手順
for文はリストやタプル、辞書等と組み合わせて使うことが多いのですが、In-Outputではfor文の基礎→リストやタプル→for文の応用と説明致します。
このページではfor文の基礎しか扱っておりませんので、ご了承ください。
また、range関数だけ少し用いて解説を致します。
また、「In-Output」では「変数」は「h」と扱いますが、for文における(カウンタ)変数は「i」や「j」を用います。これは慣習的に「i」や「j」を用いることが多い為です。
for文の基本的な書き方
for文の基本的な書き方は、
実行する処理
となります。まず簡単なコードを見てみましょう。
for i in "あいうえお": print(i)
い
う
え
お
上記のコードだと、「あ」「い」「う」「え」「お」と文字が一つずつ繰り返し出力されました。
この場合、「繰り返す範囲」が「あいうえお」となっており、変数「i」に「あ」を代入して出力→「i」に「い」を代入して出力と繰り返して出力されています。
一文字づつ代入されていますが、この場合「あいうえお」という範囲の中だと、「あ」「い」「う」「え」「お」が要素とされる為です。
ではコチラのコードを見てみましょう。本来なら、リスト等を用いますが、リストを使わなくてもこのように繰り返しの範囲を記述することもできます。
for i in "あいうえお","かきくけこ": print(i)
かきくけこ
ブロックの中でfor文
for文もif文と同じようにブロックの中で処理が行われますが、このブロックの中にfor文を書くこともできます。
下のコードを見てみましょう。
for i in "あいうえお","かきくけこ": print(i) for j in i: print(j)
このコードの出力結果を予測してみましょう。
- 答えを見る
- あいうえお
あ
い
う
え
お
かきくけこ
か
き
く
け
こ
最初のfor文では「あいうえお」が変数「i」に代入されます。
print(i)によって、「あいうえお」が出力されました。
ブロック内のfor文では変数「i」の中から、要素を取得して出力されますので、変数「i」の「あいうえお」の要素「あ」「い」「う」「え」「お」を出力しています。
変数「j」の出力が終わると、また、初めに戻り、2番目の要素の「かきくけこ」を取得して、出力した後、「か」「き」「く」「け」「こ」を出力しています。
range関数を使ってfor文を繰り返す
range関数とは
range関数は連続した数字を作成する関数で、リストを作成するときや、for文で繰り返したい回数を指定する時によく用いられます。
詳しくは「range関数」の項目で説明しますので、ここではざっとした説明を記載します。
書き方はこのようになっております。
「start」と「step」は省略することができます。その場合「start」には、「0」、「step」には「1」が代入されたとして、処理されます。
range関数を使って簡単なfor文を書いてみます
for i in range(5): print(i)
1
2
3
4
数字が一つづつ増えています。これは「step」に指定した数字が1なので、1ずつ増えたわけです。これが2なら「0」「2」「4」と増えていきます。
0から開始されているのは、「start」が省略されて、「0」が代入されているからなのですが、「stop」で表示した5が表示されていません。これは「5」に達すると数字を生成しないからです。「5」を表示させたいなら「6」にする必要があります。
range関数を使って文字を繰り返し表示させる
range関数で連続した数字を生成して、文章を繰り返す方法です。
まずはコードを見てみましょう。
for i in range(3): print("りんご")
りんご
りんご
この場合は、連続した数字が「0」「1」「2」と3つ作られましたので、3回繰り返されています。少しややこしいですが、少しわかりやすいようにコチラのコードを見てみましょう。
for i in range(3): print("りんご" + str(i) + "個")
りんご1個
りんご2個
変数「i」を出力する事によって、数字の流れが分かりやすくなりましたね、これを「りんご1個」「りんご2個」「りんご3個」と出力する為にはどのようにコードを書けばいいか予想してみましょう。
- 答えを見る
-
for i in range(1,4): print("りんご" + str(i) + "個")
りんご2個
りんご3個
これでりんごを順番ずつ出力できました。
for文内のelse
if文で使用したelseをfor文でも使用することができます。
for文でのelseはループ処理が終了した後に発生させる処理を書くことができます。
for i in range(1,4): print("りんご" + str(i) + "個売れました。") else: print("りんごはなくなりました。")
りんごが2個売れました。
りんごが3個売れました。
りんごがなくなりました。
range関数で指定した回数繰り返した後に「else」の処理が行われました。
しかし、これだけではわざわざ「else」を使わず同じことが書けます。
for i in range(1,4): print("りんご" + str(i) + "個売れました。") print("りんごはなくなりました。")
このコードで出力の結果は同じになります。でわ、どのような場合に「else文」を使うのかというと、詳しくは「for文の応用編」で説明しますが、break文という構文があるのですが、これはループ処理を抜け出す場合等に用いられます。
breakで抜け出した場合はelseは実行されなくなります。コードを見てみましょう。
for i in range(1,4): print("りんご" + str(i) + "個売れました。") if i >= 3: break else: print("りんごはなくなりました。")
りんごが2個売れました。
りんごが3個売れました。
これで、for文の基礎は終了です。
for文の基礎問題
最後にfor文の基礎問題です。今まで同様コードの結果を予測してください。
エラーが発生する場合はエラーを予測してください(インデントの間違いによるエラーはありませんので、インデント数を数える必要はありません)
問1:
for i in "りんご","みかん": print("バナナと" + i)
- 答えを見る
- バナナとりんご
バナナとみかん (りんごとみかんが繰り返されています)
問2:
for i in "りんご","みかん","バナナ": if i == "みかん": print(i)
- 答えを見る
- みかん (for文とif文の組み合わせです。変数「i」がりんごとバナナの時は、何も行われません。「i」がみかんの時だけ変数が出力されました。)
問3:
h = "りんご" if h == "みかん": for i in 1,2,3: print("みかん" + str(i)+ "個です") elif h == "りんご": for i in 1,2,3: print("りんご" + str(i)+ "個です")
- 答えを見る
- りんご1個です
りんご2個です
りんご3個です (if文とfor文の組み合わせです。変数「h」がりんごの時にりんごの個数を繰り返しています。)
問4:
h = 0 for i in range(5,10,2): h = h + i print(h)
- 答えを見る
- 5
12
21
(range関数で生成される数字は「5」「7」「9」です。変数「h」に5を足して出力、「5」となった変数「h」に「7」を足して出力、最後に「9」を足して出力と繰り返しています。)
問5:
i = 0 for i <= 5: print(i) i = i + 1
- 答えを見る
- エラー (この書き方はもう一つの繰り返し分「while文」の書き方です。forをwhileに変更すると0~5までが出力されます。)