8. 繰り返す(繰り返そう)
同じことを何度も、またはまとまりの値ごとに繰り返しましょう。
この章で学ぶこと
- 決まった回数だけ繰り返す(
1からNまで繰り返そう)- リスト・辞書・文字の値ごとに繰り返す(
ごとに繰り返そう)- 条件が真の間繰り返す(
間繰り返そう)- 途中で終わる、合計を求めるなど、よく使う形
「こんにちは」を100回出力するために、出力の行を100回書くわけにはいきませんよね?繰り返し文は、同じことを何度もさせてくれます。カナデの繰り返し文は3種類です。
| 繰り返し文 | いつ | 例 |
|---|---|---|
1からNまで繰り返そう(『回数』): |
回数が決まっているとき | 1から10まで数える |
『リスト』の『値』ごとに繰り返そう: |
まとまりの値を1つずつ扱うとき | 全員の点数を出力する |
(条件)間繰り返そう: |
いつ終わるかを条件で決めるとき | エネルギーが0になるまで |
決まった回数だけ
1から3まで繰り返そう(『回数』):
枠「{『回数』}回目のあいさつ: こんにちは!」を出力しよう
「おしまい」を出力しよう
『回数』に1が入り、字下げしたまとまりを実行します。『回数』に2が入り、もう一度実行します。『回数』に3が入り、もう一度実行します。- 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』}」を出力しよう
次の章では、よく使うコードをまとめて名前を付ける関数を学びます。