カナデKanade

8. 繰り返す(繰り返そう)

同じことを何度も、またはまとまりの値ごとに繰り返しましょう。

この章で学ぶこと

  • 決まった回数だけ繰り返す(1からNまで繰り返そう)
  • リスト・辞書・文字の値ごとに繰り返す(ごとに繰り返そう)
  • 条件が真の間繰り返す(間繰り返そう)
  • 途中で終わる、合計を求めるなど、よく使う形

「こんにちは」を100回出力するために、出力の行を100回書くわけにはいきませんよね?繰り返し文は、同じことを何度もさせてくれます。カナデの繰り返し文は3種類です。

繰り返し文 いつ 例
1からNまで繰り返そう(『回数』): 回数が決まっているとき 1から10まで数える
『リスト』の『値』ごとに繰り返そう: まとまりの値を1つずつ扱うとき 全員の点数を出力する
(条件)間繰り返そう: いつ終わるかを条件で決めるとき エネルギーが0になるまで

決まった回数だけ

1から3まで繰り返そう(『回数』):
    枠「{『回数』}回目のあいさつ: こんにちは!」を出力しよう
「おしまい」を出力しよう
  1. 『回数』に1が入り、字下げしたまとまりを実行します。
  2. 『回数』に2が入り、もう一度実行します。
  3. 『回数』に3が入り、もう一度実行します。
  4. 3までやったので繰り返しを終えて、おしまいを出力します。

かっこの中の『回数』は、今何回目かが入る名札です。名前は自由に付けてかまいません(『i』、『番号』…)。終わりの数も含むので、1から3までは3回回ります。

始めが終わりより大きいと、1つずつ減りながら回ります。

3から1まで繰り返そう(『数』):
    『数』を出力しよう
「発射!」を出力しよう

始めと終わりには、数字だけでなく名札や計算式も使えます。

『個数』を4にしよう
1から『個数』まで繰り返そう(『i』):
    枠「{『i』} x 2 = {『i』 * 2}」を出力しよう

よく使う形: 全部足す

繰り返しながら値を積み上げていく形は、本当によく使います。繰り返しの前で入れ物の名札を0にしておき、中で足していきます。

『合計』を0にしよう

1から10まで繰り返そう(『数』):
    『合計』に『数』を足そう

枠「1から10までの合計: {『合計』}」を出力しよう

55が出ます。繰り返しの中で『合計』を作ってはいけません。下の「繰り返しの中で作った名札」を見てください。


まとまりの値ごとに: ごとに繰り返そう

リストの値を前から1つずつ取り出して繰り返します。

『果物たち』を【「りんご」, 「バナナ」, 「ぶどう」】にしよう

『果物たち』の『果物』ごとに繰り返そう:
    枠「おいしい{『果物』}!」を出力しよう

『果物』に「りんご」、「バナナ」、「ぶどう」が順番に入ります。番目を数える必要がないので便利です。

辞書をごとに繰り返そうで回すと、キーが1つずつ出てきます。値はそのキーで取り出せばいいんです。

『点数』を{「国語」: 90, 「数学」: 80, 「英語」: 70}にしよう

『点数』の『教科』ごとに繰り返そう:
    枠「{『教科』}: {『点数』の『教科』}点」を出力しよう

キーは、数字は小さいものから、文字は辞書の順番(あいうえお順・ABC順)で出てきます。

文字列も、文字を1つずつ取り出して回せます。

『あいさつ』を「こんにちは」にしよう

『あいさつ』の『文字』ごとに繰り返そう:
    枠「文字: {『文字』}」を出力しよう

条件が真の間: 間繰り返そう

(条件)間繰り返そう:は、条件が真の間ずっと回ります。毎回まとまりを実行する前に条件を調べます。

『エネルギー』を3にしよう

(『エネルギー』が0より大きい)間繰り返そう:
    枠「エネルギー残り{『エネルギー』}」を出力しよう
    『エネルギー』から1を引こう

「エネルギーが尽きました!」を出力しよう

⚠️ 条件がいつか偽になるようにしてください。 上で『エネルギー』から1を引こうを忘れると、エネルギーが減らないので永遠に終わりません。 繰り返しの中で、条件に使った値が変わるかどうかを必ず確かめてください。

2つずつ数えるような、回数の繰り返しでは難しい形も間繰り返そうでできます。

『数』を0にしよう
(『数』が10以下だ)間繰り返そう:
    『数』を続けて出力しよう
    「 」を続けて出力しよう
    『数』に2を足そう

0 2 4 6 8 10が1行に出ます。


途中で終わる: 繰り返しを終わろう

繰り返しを終わろうに出会うと、いちばん内側の繰り返しからすぐに抜け出します。探していたものが見つかったら、それ以上回る必要はないからです。

『数たち』を【3, 8, 12, 5, 20】にしよう

『数たち』の『数』ごとに繰り返そう:
    もし(『数』が10より大きい)なら:
        枠「10より大きい最初の数: {『数』}」を出力しよう
        繰り返しを終わろう

12を見つけたとたんに終わるので、20は見ません。

ある値だけを飛ばしたいなら、やることをもしで囲めばいいんです。

1から6まで繰り返そう(『数』):
    もし(『数』 % 2が0と同じだ)なら:
        『数』を出力しよう

偶数の2、4、6だけが出ます。


繰り返しの中で作った名札

繰り返しは、回るたびに新しい空間を開きます。繰り返しの中で最初に作った名札は、その回が終わると消えてしまい、繰り返しの外では使えません。

1から2まで繰り返そう(『回数』):
    『二乗』を『回数』 * 『回数』にしよう
『二乗』を出力しよう

「変数『二乗』が見つかりません。」 が出ます。繰り返しが終わったあとも使う値は、繰り返しの前で作っておいて、中ではその値を変えてください(上の「全部足す」の形)。


組み合わせてみる

単語を数える: リストの単語がそれぞれ何回出てきたかを、辞書で数えます。

『単語たち』を【「りんご」, 「なし」, 「りんご」, 「みかん」, 「りんご」】にしよう
『数え』を{}にしよう

『単語たち』の『単語』ごとに繰り返そう:
    もし(『数え』の〈含むか確認〉(『単語』))なら:
        『数え』の『単語』に1を足そう
    それ以外なら:
        『数え』の『単語』を1にしよう

『数え』を出力しよう

辞書のリストを回る: 同じ形の辞書をいくつもリストに入れて、1つずつ扱います。

『クラス』を【{「名前」: 「花」, 「点数」: 90}, {「名前」: 「葉」, 「点数」: 85}, {「名前」: 「空」, 「点数」: 72}】にしよう
『合計』を0にしよう

『クラス』の『生徒』ごとに繰り返そう:
    枠「{『生徒』の「名前」}: {『生徒』の「点数」}点」を出力しよう
    『合計』に『生徒』の「点数」を足そう

枠「平均: {『合計』 / 『クラス』の『長さ』}点」を出力しよう

知っておくといいこと

  • 繰り返しが始まるときに、回る回数が決まります。 1から『終わり』までで、繰り返しの中で『終わり』を変えても、回る回数は変わりません。
  • ごとに繰り返そうは、始まったときのリストを回ります。繰り返しの中でそのリストに値を追加しても、新しい値は回らないので、終わらない繰り返しにはなりません。
『数たち』を【1, 2, 3】にしよう

『数たち』の『数』ごとに繰り返そう:
    『数たち』に『数』を追加しよう

枠「個数: {『数たち』の『長さ』}」を出力しよう

個数: 6が出ます。3回だけ回り、その間に3つ追加されました。


よくある間違い

1. 終わらない間繰り返そう

条件に使った値を繰り返しの中で変えないと、永遠に回ります。実行ボタンがずっと「実行中」なら、これを疑ってページを再読み込みしてください。

2. 繰り返しの中で合計の名札を作る

『合計』を0にしようを繰り返しの中に書くと、毎回0に戻り、繰り返しが終わると消えてしまいます。繰り返しの前に書いてください。

3. 字下げ

繰り返したい行は、すべて1段字下げします。字下げしていない行は、繰り返しが全部終わったあとに1回だけ実行されます。


まとめ

やりたいこと 書き方
N回繰り返す 1からNまで繰り返そう(『回数』):
逆から Nから1まで繰り返そう(『回数』):
リストの値ごとに 『リスト』の『値』ごとに繰り返そう:
辞書のキーごとに 『辞書』の『キー』ごとに繰り返そう:
文字ごとに 『文字列』の『文字』ごとに繰り返そう:
条件が真の間 (条件)間繰り返そう:
途中で終わる 繰り返しを終わろう
合計 繰り返しの前で『合計』を0にしよう、中で『合計』に…を足そう

練習問題

1. 3の段の九九を出力してみましょう。(3 x 1 = 3 … 3 x 9 = 27)

答えの例
1から9まで繰り返そう(『i』):
    枠「3 x {『i』} = {3 * 『i』}」を出力しよう

2. リストの中でいちばん大きい数を見つけて出力してみましょう。

『数たち』を【7, 3, 19, 4, 11】にしよう
答えの例
『数たち』を【7, 3, 19, 4, 11】にしよう
『最大』を『数たち』の1番目にしよう

『数たち』の『数』ごとに繰り返そう:
    もし(『数』が『最大』より大きい)なら:
        『最大』を『数』にしよう

枠「いちばん大きい数: {『最大』}」を出力しよう

最初の値を「今までの最大」にしておき、もっと大きい数に出会うたびに入れ替えます。

3. 1から100までの数のうち、3の倍数だけを全部足してみましょう。

答えの例
『合計』を0にしよう
1から100まで繰り返そう(『数』):
    もし(『数』 % 3が0と同じだ)なら:
        『合計』に『数』を足そう
『合計』を出力しよう

1683が出ます。

4. 二重の繰り返しで、九九の2の段から4の段までを出力してみましょう。(ヒント: 繰り返しの中に繰り返しを入れて、字下げをもう1段増やします。)

答えの例
2から4まで繰り返そう(『段』):
    枠「[{『段』}の段]」を出力しよう
    1から9まで繰り返そう(『i』):
        枠「{『段』} x {『i』} = {『段』 * 『i』}」を出力しよう

次の章では、よく使うコードをまとめて名前を付ける関数を学びます。

プレイグラウンド
結果
コードを書いて「実行」ボタンを押してください。