ここではプログラミング言語”Python”の初心者向けに、基本の文法について説明していきます。Python入門の初心者向けの進み方は以下をクリック。(print関数やコメント機能などの基本機能について知らない方は先に読むことをお勧めします。)
この回では、同じ作業を繰り返すループ処理について説明していきます。
キーワード:ループ、シーケンス、for、インデント、range、二重for文
ループ処理とは、ある作業を一定のルールの中で繰り返すことをいいます。
例えば、あるリストの中に格納されているデータを繰り返し変数と呼ばれるものに代入していき、ある作業が終了したら、次のデータを繰り返し変数に代入といように、続いていきます。
繰り返し変数はループ処理の中で、一時的にデータを保管しておく箱のようなものです。
またリスト(リストについてはこちら → リスト)のような複数のデータが格納されているデータ型をシーケンスと呼び、ループ処理で利用することができます。文字列(文字列についてはこちら → 文字列)もシーケンスです。
今は、同じ作業を繰り返すのがループ処理なんだと思ってもらえればOKです。
リストのような複数のデータをもつものをシーケンスと呼びます。
これらをプログラミングで使うとき、同じような処理を必要とする場合があります。
このループ処理を行ってくれるのが for 文です。定義は以下になります。
for 繰り返し変数 in シーケンス:
ループしたい内容
for のあとの繰り返し変数とは、ループ処理をするときにシーケンス(リストなど)の要素を一時的に入れる箱のようなものです。また、シーケンスの後には必ずコロン( : )をつけて下さい。
そして次の行からループしたい内容を入れていくわけですが、その前にインデントを忘れないようにしましょう。これは、半角で4個分の空白のことで、Pythonではインデントを入れないとエラーになるので注意して下さい。
では、例題を使って体感的に理解していきましょう。
month = ["1","2","3","4","5","6","7","8","9","10","11","12"]
for i in month: #for 繰り返し変数 in シーケンス(リストなど):
print("今月は"+i+"月です。")
#結果
今月は1月です。
今月は2月です。
今月は3月です。
今月は4月です。
今月は5月です。
今月は6月です。
今月は7月です。
今月は8月です。
今月は9月です。
今月は10月です。
今月は11月です。
今月は12月です。
上のコードは1月から12月までをfor文によって表示しています。
処理順序を見ていくとまず、リストであるmonth(inの後にある)の先頭の要素が、繰り返し変数i(forの後にある)に一時的に代入されます。その後、内部のprint関数が実行され、これで一回目のループが終了です。二回目のループは、monthの次の要素がiに代入され、同様にprint関数が実行されます。この作業をmonthの最後の要素まで行ってループ処理の完了です。
図で見ると
1回目のループ
2回目のループ
このように続き、最後はi=”12″で終了です。
このようにfor文では、繰り返し変数を利用することで、ループ処理を再現しています。
なお繰り返し変数名は変数のルールを満たしていれば基本的に何でも良いですが、特に意図が無い場合は、伝統的にiやjを使うきまりになっています。
もう一つ例を見てみましょう。
site = "tomolog"
for i in site:
print(i)
#結果
t
o
m
o
l
o
g
上の例では文字列を一文字ずつ取り出して出力しています。
このように文字列もシーケンスの一種であることを覚えておきましょう。
for文を使ってループ処理させたいとき、その回数もまた指定することができます。これを行ってくれるのが、range関数です。定義は以下になります。
・回数指定
for 繰り返し変数 in range(繰り返したい回数):
・範囲指定
for 繰り返し変数 in range(繰り返したい初めの数, 繰り返したい最後の数+1)
例えば範囲指定では、range(3,10)とすれば3から 9の範囲で処理が行われます。
このとき、二つ目の引数は、繰り返したい数+1になることに注意して下さい。
例で見ていきましょう。
for i in range(5):
print("iの値:", i)
print("Hello World!")
#結果
iの値: 0
Hello World!
iの値: 1
Hello World!
iの値: 2
Hello World!
iの値: 3
Hello World!
iの値: 4
Hello World!
上の例では”Hello World!”という文字列を合計5回出力しています。これはrange(5)によって、ループが5回行われたことを表しています。
またiに着目すると、その値は0から始まり4で終わっていることが分かります。ここから、iには0から、rangeで指定した数字-1の値が順に代入されていることが分かります。
範囲指定ではどうでしょうか?
for i in range(0,6):
print("iの値:", i)
#結果
iの値: 0
iの値: 1
iの値: 2
iの値: 3
iの値: 4
iの値: 5
上の例では、range(0,6)によって0から5の範囲でループを行っています。
iの値は、0から始まり5で終わっています。これはrangeで指定した二つの数字の内、最初の数字から、二つ目の数字-1までの値が順に代入されていることが分かります。
二重for文とは、for文の中にfor文を入れる構造を指します。
for i in シーケンス or range():
for j in シーケンス or range():
これは具体例からじっくり解説していきます。
for i in range(1,11):
for j in range(i):
print("*",end="")
print()
#結果
*
**
***
****
*****
******
*******
********
*********
**********
上の例は、アスタリスクの数が一つずつ増えながら出力されるプログラムです。
まず、一行目のfor文から見てみます。これはrange(1,11)より、1から10までの範囲でループ処理を行うという意味です。よってiには1から順番に数字が代入されていきます。
i = 1のとき、二つ目のfor文ではrange(i)より、i回つまり、1回ループ処理されることになります。つまり、3行目のprint関数が一回実行されるということです。これが終わると二つ目のループ処理から抜け出して、改行(4行目)を挟んだ後、再び一つ目のfor文に戻ってきます。
次にi = 2のとき、二つ目のfor文は二回処理、つまりアスタリスクが二つ表示され、その後一つ目のfor文に戻り、次にi = 3のとき、二つ目のfor文は三回処理、…というように続いていきます。
ここで意識すると分かりやすくなるのが、そのfor文はどこを対象としているのかという点です。
この場合、最初のfor文は、二つ目のfor文から以下が対象となり、二つ目のfor文は3行目のみが対象となります。
これに気づくにはインデントとコロンに着目してみましょう。Pythonではコロンの次の行は必ずインデントしなければならないというルールがあります。
コードを見ると、2行目がまずインデントされています。これは、1行目のfor文によるものだと分かります。
次に、3行目がインデントされています。これは2行目のインデントよりもさらに深いインデントであるため、二つ目のfor文にかかっていると分かります。
また、4行目のprint( )の前のインデントは2行目のインデントと同じ分だけ空いています。つまりこれは、最初のfor文にかかっていると分かります。
もう一度見てみましょう。
for i in range(1,11): #このfor文は以下全てにかかる(2行目のfor文も含まれている)
for j in range(i): #このfor文はprint("*",end="")だけにかかる
print("*",end="")
print()
このように考えると、最初のfor文は、もう一つのfor文を繰り返しているということに気づけます。
これが二重for文と呼ばれる所以です。
また、さらにfor文を追加していけば三重for文と、繰り返していくことができます。
最初のうちは、分かりにくいかもしれませんが、インデントの位置を確認し、forがどこまでを対象としているのかを考えることを意識しましょう。
1.for文は以下によって定義される。
for 繰り返し変数 in シーケンス:
ループしたい内容
コロンの次の行は必ずインデントを入れる。
2.インデントとはコードの前に半角で4つ分空白を入れることである。
3.ループ回数を指定できる。
・回数指定
for 繰り返し変数 in range(繰り返したい回数):
・範囲指定
for 繰り返し変数 in range(繰り返したい初めの数, 実際に繰り返したい最後の数+1)
4.二重for文は以下で定義される。
for i in シーケンス or range():
for j in シーケンス or range():
クイズは全部で5問あり、正解するごとに難しくなります。
復習してみてね。
Question
Your answer:
Correct answer:
Your Answers
This website uses cookies.