python入門: 6. 繰り返し処理
プログラミングでは, 多くのデータを扱うので, 似たような処理を何百回も何千回も繰り返すことが多い。pythonでそのような処理をやる方法のひとつに「for」という命令がある。
まずpythonシェルを立ち上げて, 以下を打ってみよう。
for i in range(0,10): print("I am happy!")
その結果, I am happy!という文字列が10回, 表示されただろう。
[レポート課題6-1] for文を使って, I am happy!という文字列を5回, 表示する命令を作り, 実行せよ。
では, 次はどうだろう?
for i in range(0,10): print(i)
その結果は以下のようになるはずだ:
0 1 2 ...(中略)... 8 9
ここに表示されたのは, 0から9までの数を表示したものである。
[レポート課題6-2] for文を使って, 3から12までの整数を表示する命令を作り, 実行せよ。
では, 次はどうだろう?
for i in range(0,10): print(i*i)
その結果は以下のようになるはずだ:
0 1 4 ...(中略)... 64 81
ここに表示されたのは, 0から9までの整数を2乗したものである。
どうだろう? forという命令を使った繰り返し処理の仕組みがわかっただろうか?
[レポート課題6-3] for文を使って, 3から12までの整数のそれぞれを3乗した数を表示する命令を作り, 実行せよ。ヒント: iの3乗はi*i*iまたはi**3。たまにi^3とする人がいるが, それはうまくいかないだろう。^はpythonでは「べき乗」ではなくて別の意味の計算である。
もうわかったように,
for i in range(p, q): 何か命令
は, 「変数iに整数pから整数q-1までの数値を順々に格納し, そのたびごとに以下の命令を実行せよ」というものである。なぜqまででなくてq-1までなのか? それはpythonの慣習であり, 作った人のポリシーというか好みである。変なポリシーだなあ...と思うかも知れないが, やっているうちに, 「なるほどこれもアリだな」と思うようになってくるから, とりあえず辛抱しよう。
さて, このforを使うと, 「数列の和」などが計算できる。例えば, 1から10までの整数の和を計算するには,
x=0 for i in range(1,11): x=x+i print(x)
とやればよい(やってみよう!)。まず最初に変数xを0という値で定義しておく。そして, forを使ってxに, 整数iをどんどん足していくのだ(rangeの終わりが10ではなく11であることに注意!!)。ここで,
x=x+i
というのは, 数学的にはおかしな式である(両辺からxをひくとi=0になってしまう!)。これはプログラミング言語に特有の書き方であり, この=は「左辺と両辺が等しい」という「条件」とか「事実」ではなく, 「右辺を計算してその結果を左辺に代入せよ」という「命令」である。たとえばx=1でi=2のとき, この右辺は1+2=3になる。その3を, 改めてxに代入するのだ。
[レポート課題6-4]: 1/(1*1)+1/(2*2)+1/(3*3)+...+1/(n*n)の値を, n=10までとn=10000までのそれぞれについて計算表示する命令を作り, 実行せよ。なお, 既に学んだように, この数列の和は, (π^2)/6=1.644934...に収束するはずである。
ところで, forで使う変数は, iでなく別の名前のものでもOKである。テキストや実際のプログラムではiをよく使うが, それは単なる慣習であり, ルールではない。
さて, forはリストを対象に回すこともできる。以下の例をやってみよう:
for i in ['happy!', 'lucky!', 'sleepy!', 'hungry!']: print('I am '+i)
その結果は以下のようになる:
I am happy! I am lucky! I am sleepy! I am hungry!
つまり、リストの各要素をひとつずつ取り出して変数に入れながら、forの下の命令を繰り返すのだ。これと同じ処理は, 以下のようにもできる(やってみよう!):
feeling=['happy!', 'lucky!', 'sleepy!', 'hungry!'] for i in feeling: print('I am '+i)
これは, リストをいちどfeelingという名前のものとして定義して, それに対してforをまわすという発想である。
Keyword(s):
References:[python入門]