こんにちは。
今回は繰り返し構文のうち for 文の基本に関する内容を学習します。
本題に入る前に、これまでの学習の流れにについてまとめておきます。
四則演算、数値列、文字列についてまとめた記事については、以下の記事を参照ください。
【Python】数値と文字列について【初心者向け】
続きを見る
変数・論理値・演算子については以下の記事をご参照ください。
【Python】変数・論理値・演算子について【初心者向け】
続きを見る
関数の基本については以下の記事をご参照ください。
【Python】関数の基本について【初心者向け】
続きを見る
オブジェクトとメソッドの使い方については以下の記事をご参照ください。
【Python】オブジェクトとメソッドについて【初心者向け】
続きを見る
if, elif, else文の使い方【制御構文】については以下の記事をご参照ください。
【Python】制御構文・条件分岐の基本について【動画・画像付きで解説】
続きを見る
while文の使い方【繰り返し構文】については以下の記事をご参照ください。
【Python】while文の使い方について【繰り返し構文の基本】
続きを見る
前回の while文
に引き続いて、繰り返しの動作を行う構文について学習していきます。while文
の他に、もうひとつ、繰り返し処理を実現する方法が for文
です。
「入力した数値を加算して、ある所で入力値の平均値を求める」課題のように参加者の人数がプログラムを実行する度に毎回変わる様なケースでは while文
を使用するのが便利です。
一方でfor文
は最初からプログラムを繰り返す回数が決まっている様な場合には非常に便利です。
今回はその様な場合について学習していきましょう。for文
と while文
の使い方は非常に似ていますが、大きく異なる点はcodeの記載方法のみです。
for文
と while文
も同じ「繰り返し処理」ですので、for文
でも break
や continue
を使用する事ができます。
for文の使い方
早速 for
を使った繰り返し処理を記述してみましょう。
1 2 | for i in range(20): print(i) |
以下が出力画面です。
ここでfor i in range(11):
だけ見ても良く分からないかと思いますので、詳しく見ていきましょう。
for
は繰り返し処理を行います。i
は 繰り返し処理で使える変数(カウンタ変数)です。
処理が繰り返される度にi
の中身が上書きされます。
in
は、後ろに続く range()
から1件ずつ取り出して i
に格納するという意味を持ちます。
その in
の後ろに続く要素は、通常だとリストが該当します。今回は range()
という関数を使いますが、この使い方は頻用されるので覚えておきましょう。
range()
は連続した数値を順番どおり並べて、そこから数値を取得するための関数です。
range()
で取得した数値を1件ずつ取得して i
に格納します。range()
の最後の数値が取得され、繰り返し処理が終了すると for文
によって作られたループが終了します。
なお、range(20)
と書きましたが、引数を20
とすることで「0 以上 20 未満」の連続する数値を取得することになります。
注意ポイント
最後のコロン :
は忘れないようにしましょう。
range()関数について
ここから range()
関数についての説明です。
基本的に range()
は 0以上となりますが、 5以上としたい場合には、引数を2つにして、最初の引数を 開始の数値
すなわち 5 として, 次の引数を 終了の数値
すなわち 20 としましょう。
では早速 code を書いてみましょう。
1 2 | for i in range(5, 20): print(i) |
出力結果は以下の様になります。
これにより「5以上 20未満(5から19まで)」となります。
また 「3つずつ数値を飛ばしたい」としたいときは、3つ目の引数を追加します。
1番目と2番目は先程の 開始の数値
終了の数値
と同じですが、3つ目は 数値間の増分
です。増分を 3
とすることで、+3 ずつの数値の並びにすることができます。
In[]
1 2 | for i in range(5, 20, 3): print(i) |
以下出力結果です。
取り出す数値の大きさを 「開始の数値」 の方が 「終了の数値」よりもお大きい
様ににし、3つ目の引数である 増分
をマイナスの数値にすることで数値の大きい順で1件ずつ i
に収納することもできます。
In[]
1 2 | for i in range(20, 5, -3): print(i) |
出力結果です。
for文
の中に for文
を記述することもできます。
その場合、まずは「内側の処理」→次に「外側の処理」→再度、「内側の処理を print」、という流れになります。例えば以下の様な形になります。
In[]
1 2 3 | for x in range(1, 5): for y in range(1, 5): print(f"{x} + {y} = {x + y}") |
出力結果
カウンタ変数 i
について
x
や y
は for
の処理のために用意した変数です。for
の外側で x
や y
を参照してはいけません。これは if
や while
でも同様の事が言えます課題|エラトステネスのふるいをPythonで実装
課題| エラトステネスのふるい
課題:「エラトステネスのふるいを実装して下さい。※ エラトステネスのふるいは、素数を求める方法です。」
仕様:
for
を使って 1から200までの連続する整数値を画面に表示する。- 素数でないものは表示しない様にする。
まずはご自身でコードを書いてみてください。
※ 2020/01/05に解答をUP予定です。
解答一例| エラトステネスのふるい
以下、解答の一例です。
In[]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | for i in range(1 ,201): if i == 1: continue if i != 2 and i % 2 == 0: continue if i != 3 and i % 3 == 0: continue if i != 5 and i % 5 == 0: continue if i != 7 and i % 7 == 0: continue if i != 11 and i % 11 == 0: continue print(i) |
単純にエラトステネスの定義にしたがって、ふるいにかけたのみの code です。
1〜100までの素数の場合には 7 を除いた 7 の倍数は素数ではないとしてふるいにかけると全ての素数が出てきます。
出力後の結果は左の様になります。(最も上にある2, 3が切れてしまっています)
また、他にも試し割り法や SymPy というライブラリを使用して簡単に列挙する方法など、色々な方法がありますので試してみて下さい。