コンテンツにスキップ

Python基礎その2(繰り返し)

この章のキーワード

  • for文
  • range()
  • +=
  • while文
  • !=

1.10回繰り返そう

Pythonで繰り返しをするには for文(フォーぶん) を使います。

for i in range(10):
print("Hello")

実行すると、 「Hello」が10回表示されます。

「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):

やってみよう1

「晴れ」「曇り」を順番に5回繰り返し表示してみよう

2.10回繰り返そう その2

for文の中に入った変数 i の役割を理解するために、 iprint() で表示してみましょう。

for i in range(10):
print(i)

実行すると、0から9まで表示されます。

Untitled

解説

range(10) は0から9までの数を順々に返し、変数iにそれが順番に代入されていくことがわかります。

やってみよう2

数字を0からはじまって、2、4、6・・・18まで出してみよう。

3.1から10まで足してみよう

繰り返しを利用して、1+2+3+4+…10をやってみましょう。

total = 0
for i in range(1,11):
total = total + i
print(total)

実行すると、55が表示されます。

55が表示される

55が表示される

解説

初期化

1行目では total という変数を作って0を代入しています。totalに1から10まで数字を足していきますが、最初は足す前なので0に設定しました。このように変数の 値(あたい) を初期状態にすることを 初期化 と呼びます。

total = 0

range(1,11)

range(1,11) という書き方をすると、1から始まって10までの数字が順番に返されます。 range(11) でも0から10が返されて同じ結果になりますが、0は不要なので1から始めています。

for i in range(1,11):

totalにiを足していく

この行では、変数 total に、 total+i を代入しています。つまり、 totalにiを足している ということです。このため、totalがどんどん増えていくことになります。

total = total + i

やってみよう3

最後の行で print(total) としてtotalを表示しています。この行はインデントしていませんが、もし下記のようにインデントしてしまうとどうなるでしょうか?

total = 0
for i in range(1,11):
total = total + i
print(total)

4.1から100までの中の偶数だけ足してみる

次に、1から100の中の偶数だけ足してみましょう。

total = 0
for i in range(1,101):
if i % 2 == 0:
total += i
print(total)

2550が表示される

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

やってみよう4

1から100までの中に7で割り切れる数が いくつあるか を計算してください。

5.毎日貯金!

1日目は100円を貯金、2日目は200円を、3日めは300円というふうにしてどんどん額を増やしながら貯金を増やしていくとします。このとき、何日目に10000円を越えるかを調べるプログラムを書いてみましょう。

okane = 0
nissu = 0
while okane < 10000:
nissu += 1
okane += nissu * 100
print(nissu)

実行すると、14と表示されます。14日目で10000円を超えるみたいです。日数が長いような短いような・・・。

Untitled

解説

このプログラムでは、何回繰り返すとよいかを求めるので、何回繰り返されるかが決まっているfor文はあまり適していません。こういうときは while文(ホワイルぶん) を使います。

変数の初期化

1,2行目では、貯金額を入れる変数 okane と日数を表す変数 nissu を両方とも初期化しています。

okane = 0
nissu = 0

while文

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) を入れて貯金額がどう変化していくかを見てみるとよいでしょう。

やってみよう5

一日に貯金する額が1円から始まって、2円、4円、8円、16円と毎日倍になるとして、何日で合計額が10000円を越えるかを計算してみよう。

6.いじわるクイズを作ろう

while文を利用して、答えが出るまで聞き続けるクイズを作りましょう。

year = 0
while year != 2012:
year = int(input("ロンドン五輪の年は?"))
print("正解")

ロンドン五輪の年を聞いて、正解の2012を入力するとプログラムが終わります。正解するまでずっと聞き続けます。

2012という答えが出るまで問題が出され続ける

2012という答えが出るまで問題が出され続ける

解説

変数の初期化

ユーザの解答を入れるための変数 year を0で初期化します。2行目のwhile文で year を使っているのでその前に行う必要があります。

year = 0

while文

whle文は、条件が当てはまっている限り繰り返します。この行では、 year != 2012 が条件になります。 != は「違う」という意味です。つまり、「yearが2012ではなければ繰り返す」ことになります。

while year != 2012:

while文を抜けたら「正解」と言う

while文の外側に print("正解") があることに注目してください。正解するとwhile文の繰り返しが終わるので、while文の外側にprint文を置いています。

while year != 2012:
year = int(input("ロンドン五輪の年は?"))
print("正解")

やってみよう6

1から100まで足した答えを出すプログラムを、for文ではなくwhile文を使って作ってみよう。

まとめ課題

100から始めて、次は99、98というふうに1ずつ小さくして1まで順番に表示するプログラムを作ってください。for文でもwhile文でもどちらでもOKです。

※いろいろな方法があります。興味がある人は複数種類のプログラムを作ってみましょう。ネットで調べていろいろな人の例を探してみるのも良いでしょう。例えば、rangeの 第3引数 を負の数にするという手もあります。各自で調べてみてください。