とらりもんHOME  Index  Search  Changes  Login

とらりもん - python入門: 繰り返し処理 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

プログラミングでは, 多くのデータを扱うので, 似たような処理を何百回も何千回も繰り返すことが多い。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をまわすという発想である。