← クエスト一覧

クエスト77:ジェネレータ(yield)

スライド 1 / 5
コーデ
💻 コード例
実行結果
← クエスト一覧
🐍 Python / Quest 77 / 85

クエスト77:ジェネレータ(yield)

発展 +10 XP
🏠
今回の課題
1〜5 を1つずつ yield するジェネレータ count_up を作って、1行ずつ表示しよう。
📖 解説を見る
🔁 ジェネレータ(yield)って何?

yield を使うと、値を「1つずつ、必要になったときに」返す関数(ジェネレータ)が作れます。return が一度で終わるのに対し、yield は続きから何度も返せます。

✏️ 書き方:
def three_words():
    yield 'あ'
    yield 'い'
    yield 'う'

for w in three_words():
    print(w)
 → 
yield のたびに1つ値が取り出され、次の yield から続きが再開します。

📋 作るもの:
・関数名は count_up、引数 n を1つ受け取る
・1 から n までの数を、小さい順に1つずつ yield する
count_up(5)for でまわすと 1・2・3・4・5 が順に取り出せる

💡 どこで使う?

大量データや終わりのない列を、全部メモリに載せずに1つずつ処理したいときに使います。巨大なファイルを1行ずつ読む、ページを順番に取得する、無限に続く番号を作る、といった場面でメモリを節約できます。

⚠️ ポイント:
yield が1つでもあると、その関数はジェネレータになる
for でまわすと、yield された値が順に取り出される
ヒントを見る
1〜n の数は range(1, n + 1) で作れるよ。for でまわしながら、返したい値を return ではなく yield で返そう。
期待する出力
1
2
3
4
5
📄 見本
「答えを見る」を押すと、お手本のコードが出ます。クリックでコピーできます。
💻 コードエディタ
実行すると結果がここに表示されます
正解!見本と同じになりました。
次へ →
🏠 ホームへ

れんしゅうもんだい

☑ 0 / 3 正解 レッスンに戻る

全問正解でクエストクリア!

未挑戦

問題 1: 偶数だけを yield するジェネレータ even_gen(n) を作り even_gen(10) を表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
2 4 6 8 10
未挑戦

問題 2: フィボナッチ数列を yield するジェネレータで最初の6つを表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
0 1 1 2 3 5
未挑戦

問題 3: next() で yield の値を1つずつ取り出し、3回取り出した値の合計を表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
60
コピーしました!