この章のキーワード
- for文
- range()
- +=
- while文
- !=
この章のキーワード
Pythonで繰り返しをするには for文(フォーぶん) を使います。
for i in range(10): print("Hello")
実行すると、 「Hello」が10回表示されます。
「Hello」が10回表示される
range(10)
は、0から9までの範囲を表す関数です。変数i
にはこの0から9までの数字が順々に入り、その回数繰り返します。そのため、このfor文は10回繰り返されることになります。もし range(5)
なら0から4までの5回、 range(100)
なら0から99までの100回の繰り返しになります。
for i in range(10):
「晴れ」「曇り」を順番に5回繰り返し表示してみよう
for文の中に入った変数 i
の役割を理解するために、 i
を print()
で表示してみましょう。
for i in range(10): print(i)
実行すると、0から9まで表示されます。
range(10)
は0から9までの数を順々に返し、変数i
にそれが順番に代入されていくことがわかります。
数字を0からはじまって、2、4、6・・・18まで出してみよう。
繰り返しを利用して、1+2+3+4+…10をやってみましょう。
total = 0for i in range(1,11): total = total + iprint(total)
実行すると、55が表示されます。
55が表示される
1行目では total
という変数を作って0を代入しています。totalに1から10まで数字を足していきますが、最初は足す前なので0に設定しました。このように変数の 値(あたい) を初期状態にすることを 初期化 と呼びます。
total = 0
range(1,11)
という書き方をすると、1から始まって10までの数字が順番に返されます。 range(11)
でも0から10が返されて同じ結果になりますが、0は不要なので1から始めています。
for i in range(1,11):
この行では、変数 total
に、 total+i
を代入しています。つまり、 totalにiを足している ということです。このため、totalがどんどん増えていくことになります。
total = total + i
最後の行で print(total)
としてtotalを表示しています。この行はインデントしていませんが、もし下記のようにインデントしてしまうとどうなるでしょうか?
total = 0for i in range(1,11): total = total + i print(total)
次に、1から100の中の偶数だけ足してみましょう。
total = 0for i in range(1,101): if i % 2 == 0: total += iprint(total)
2550が表示される
3行目のif文を見てみましょう。まず、 i % 2
は「iを2で割った余り」という意味です。計算式についてはPythonリファレンス:数値計算【未生成】 を参照してください。
==
は、「同じ」という意味です。 =
は代入を表しましたが、 ==
は数学と同じ使い方になります。この3行目は「もしiを2で割った余りが0だったら」という意味になります。つまり、「もし偶数だったら」ということです。
if i % 2 == 0:
4行目も見慣れない書き方があります。この書き方 total += i
は、実は total = total + i
と同じ意味になります。 total = total + i
よりも短く書けるので覚えておきましょう。このような書き方を代入演算子と言います。詳しくはPythonリファレンス:数値計算【未生成】 を参照してください。
なお、PythonではProcessingやC言語などで使われている++は使えません。
total += i
1から100までの中に7で割り切れる数が いくつあるか を計算してください。
1日目は100円を貯金、2日目は200円を、3日めは300円というふうにしてどんどん額を増やしながら貯金を増やしていくとします。このとき、何日目に10000円を越えるかを調べるプログラムを書いてみましょう。
okane = 0nissu = 0while okane < 10000: nissu += 1 okane += nissu * 100print(nissu)
実行すると、14と表示されます。14日目で10000円を超えるみたいです。日数が長いような短いような・・・。
このプログラムでは、何回繰り返すとよいかを求めるので、何回繰り返されるかが決まっているfor文はあまり適していません。こういうときは while文(ホワイルぶん) を使います。
1,2行目では、貯金額を入れる変数 okane
と日数を表す変数 nissu
を両方とも初期化しています。
okane = 0nissu = 0
while文は、繰り返す条件が当てはまっている限り繰り返すという特徴があります。繰り返す回数は決まっていません。3行目は、「okaneが10000よりも小さい限り繰り返す」という意味になります。okaneが10000よりも小さければ繰り返しを続け、超えたら繰り返しが終わります。
while okane < 10000:
while文の中で、変数 nissu
を1増やしています。一回の繰り返しごとに日数が経過するということです。また、貯金は、毎日100円ずつ増えていくので、日数 x 100円が毎日の貯金額になります。変数 okane
には nissu * 100
を毎日加えます。
nissu += 1 okane += nissu * 100
お金がどのように増えるかピンとこない場合は、while文の中に print(okane)
を入れて貯金額がどう変化していくかを見てみるとよいでしょう。
一日に貯金する額が1円から始まって、2円、4円、8円、16円と毎日倍になるとして、何日で合計額が10000円を越えるかを計算してみよう。
while文を利用して、答えが出るまで聞き続けるクイズを作りましょう。
year = 0while year != 2012: year = int(input("ロンドン五輪の年は?"))print("正解")
ロンドン五輪の年を聞いて、正解の2012を入力するとプログラムが終わります。正解するまでずっと聞き続けます。
2012という答えが出るまで問題が出され続ける
ユーザの解答を入れるための変数 year
を0で初期化します。2行目のwhile文で year
を使っているのでその前に行う必要があります。
year = 0
whle文は、条件が当てはまっている限り繰り返します。この行では、 year != 2012
が条件になります。 !=
は「違う」という意味です。つまり、「yearが2012ではなければ繰り返す」ことになります。
while year != 2012:
while文の外側に print("正解")
があることに注目してください。正解するとwhile文の繰り返しが終わるので、while文の外側にprint文を置いています。
while year != 2012: year = int(input("ロンドン五輪の年は?"))print("正解")
1から100まで足した答えを出すプログラムを、for文ではなくwhile文を使って作ってみよう。
100から始めて、次は99、98というふうに1ずつ小さくして1まで順番に表示するプログラムを作ってください。for文でもwhile文でもどちらでもOKです。
※いろいろな方法があります。興味がある人は複数種類のプログラムを作ってみましょう。ネットで調べていろいろな人の例を探してみるのも良いでしょう。例えば、rangeの 第3引数 を負の数にするという手もあります。各自で調べてみてください。