for文で処理を繰り返す
処理を繰り返す
“こんにちは”という文字列を5回繰り返して表示する、1から10までの合計を求めるときは次のようなプログラムを作成します。
- #1 1から10までの合計
- print('こんにちは')
- print('こんにちは')
- print('こんにちは')
- print('こんにちは')
- print('こんにちは')
- print(1+2+3+4+5+6+7+8+9+10)
こんにちは こんにちは こんにちは こんにちは こんにちは 55
これくらいなら何とかなりますが「100回繰り返せ」、「1から1000まで」と言われたら途方に暮れてしまいます。そこでPythonにはルールに従って繰り返して処理をする機能が用意されています。
for文で処理を繰り返す
てはじめに、単純に5回同じ処理を繰り返すところからはじめます。
- #2f or文で同じ処理を5回繰り返す
- for i in range(5):
- print('おはよう')
- print('こんにちは')
- print('それでは、さようなら')
おはよう こんにちは おはよう こんにちは おはよう こんにちは おはよう こんにちは おはよう こんにちは それでは、さようなら
- 2行目をfor文といい、「5回繰り返しなさい」という命令になります。rangeとは範囲を表します。
- 3行目と4行目に繰り返したい処理を書きます。このように繰り返したい処理はインデントします。
- 5行目では”それではさようなら”とprintしていますが、これはインデントされていないので、for文による繰り返しが終わった後に実行されることがわかります。
for文で何回目の処理をしているかがわかる
単純な繰り返し処理
単純に回数を指定する場合
for文ではカウンタ変数をprintし、今何回目の処理をしているか表示したり、その値を数値の計算に使うことができます。
- #3 for 文のカウンタの値を表示する
- for i in range(10):
- print(i,end=' ')
0 1 2 3 4 5 6 7 8 9
カウンタ変数iをprint関数で出力すると、0から9の10個が出力されます。1からではなく0からはじまり、range関数で設定した数の1つ前で終わることに注意が必要です。
print文でend=’(半角スペース) ‘と指定すると、print文の後改行されず半角スペースが1つ出力されるだけになります。このため、複数の行の印刷結果が1行の中で横並びに収まります。
カウント変数の範囲を指定する
カウンタの値の範囲を指定するときは、range関数の( )の中で開始の値と終了の値+1を指定します。
- #4 for文のカウンタの範囲を指定する
- for i in range(1,11):
- print(i,end=' ')
1 2 3 4 5 6 7 8 9 10
10までの範囲でカウンタを回すときはrange関数を(1,11)とすることに注意が必要です。結果として、2つの数の差の数だけ処理が繰り返されます。
いろいろなカウンタの
for文の中で、偶数や奇数などの値だけ表示したり数値計算をするというように条件を絞って処理をしたい場合があります。このときには次の2つの方法が考えられます。
偶数の場合のみ処理する場合
- #5 for文で偶数の値を出力する
- print('if文で選択')
- for i in range(1,11):
- if i%2==0:
- print(i,end=' ')
- print('')
- print('for文で選択')
- for i in range(2,11,2):
- print(i,end=' ')
if文で選択 2 4 6 8 10 for文で選択 2 4 6 8 10
- 3行目のようにfor文のカウンタ変数を1から10まで単純に代入し、4行目のif文でその値が偶数の場合だけ処理するようにします。
- 8行目のrange関数の()の中で開始の値と終了の値+1に加え、3番目のパラメータはステップ(step)と呼ばれ、2つごとに表示することを指示するため2を指定します。
- 5行目のprint関数では10まで出力しても改行されないので6行目で開業する目的でprint関数を実行します。
奇数の場合のみ処理する場合
同じように奇数の場合も、if関数を使う方法とrange関数の中で2つごとに処理する方法があります。
- #6 for文で奇数の値を出力する
- print('if文で選択')
- for i in range(1,10):
- if i%2!=0:
- print(i,end=' ')
- print('')
- print('for文で選択')
- for i in range(1,10,2):
- print(i,end=' ')
if文で選択 1 3 5 7 9 for文で選択 1 3 5 7 9
- 3行目では1から9まで繰り返すこととし、4行目のif文で奇数のみ処理するようにします。
- 8行目のrange関数で、1から9までステップ2で処理するようにします。
大きい数から小さい数に向かって処理する場合
10から1のように大きい数から小さい数に向かってカウンタ変数の値を変えることもできます。方法としては、arnge関数の中でステップをマイナスにする方法と、range関数の中にさらにreversed関数を適用する方法があります。
- #7 for文で大きな数字から逆に値を出力する
- print('for文で出力')
- for i in range(10,0,-1):
- print(i,end=' ')
- print('')
- print('for文でreversed')
- for i in reversed(range(1,11)):
- print(i,end=' ')
for文で出力 10 9 8 7 6 5 4 3 2 1 for文でreversed 10 9 8 7 6 5 4 3 2 1
- 3行目のfor文で、ステップをマイナスに指定するとカウンタ変数には大きな数字から小さな数字に向かって値が代入されます。なお2番目のパラメータは最後の値-1より1つ小さな値にする必要があります。
- 7行目にようにrange関数をreversed関数の引数として指定すると、range関数で指定した値の範囲が逆転して代入されます。
カウンタ変数で指定した数字の総和を計算する
カウンタ変数に代入された値に対し、その総和を計算したい場合があります。このときには、これまでもとめた総和を格納する変数(ここではtotal)を使い、カウンタ変数の数字を足し上げていきます。
- #8 for文を使って数列の総和を計算する
- total=0
- for i in range(1,11):
- total+=i
- print(total)
55
- 2行目でtotalという変数を使うことを宣言し、for文を実行する前はまだ何ら計算がされていないので0を代入しておきます。このことを初期化といい、この初期化が行われていないとfor文の繰り返しの中でエラーになってしまいます。
- 4行目で変数totalに対して、iの値を足し上げていきます。多くのプログラミング言語では、”total = total + I”のように、totalの値にtotal+iを代入するというよう書き方をします。Pythonでも同じ書き方ができますが、4行目のように”total+=i”という簡略化した書き方でも同じ処理をすることができます。このような特別な演算子を代入演算子(assignment operator)といいます。