とらりもんHOME  Index  Search  Changes  Login

python入門: 繰り返し処理

プログラミングでは, 多くのデータを扱うので, 似たような処理を何百回も何千回も繰り返すことが多い。pythonでそのような処理をやる方法のひとつに「for」という命令がある。

まずpythonシェルを立ち上げて, 以下を打ってみよう。

for i in range(0,10):
   print("I am happy!")

その結果, I am happy!という文字列が10回, 表示されただろう。

課題: for文を使って, I am happy!という文字列を5回, 表示せよ。

では, 次はどうだろう?

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

その結果は以下のようになるはずだ:

0
1
2
...(中略)...
8
9

ここに表示されたのは, 0から9までの数を表示したものである。

課題: for文を使って, 3から12までの整数を表示せよ。

では, 次はどうだろう?

for i in range(0,10):
   print(i*i)

その結果は以下のようになるはずだ:

0
1
4
...(中略)...
64
81

ここに表示されたのは, 0から9までの整数を2乗したものである。

どうだろう? forという命令を使った繰り返し処理の仕組みがわかっただろうか?

課題: 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に代入するのだ。

課題: 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をまわすという発想である。

Last modified:2019/01/22 07:01:34
Keyword(s):
References:[python入門]