練習問題

6.4 練習問題

本章で習った内容を元に練習問題を解いてください。

問1 次の設問①~⑤について○か×で答えなさい。

設問
① イテレータは「__iter__メソッド」と「__next__メソッド」を含むものである。
② イテレータは、全てのデータ型の変数に対してiter関数を使えば生成できる。
③ イテレータにnext関数を使うと次の要素が参照できる。
④ ジェネレータは定義する際にはreturnの代わりにyieldを使用する。
⑤ yieldを使うと戻り値は一つしか返すことができない。

問2 以下に示すソースコードの①、②の内容を以下のソースコードの仕様に従って埋めなさい。

ソースコード

ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第6章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第6章.ipynb

    books = ['Java','PHP','Python','Javascript']
    #booksをイテレータに変換する
    books2 = ①(books)

    #books2の最初の2つの要素を飛ばして次の次の要素(Python)から参照させます。
    ②(books2)
    ②(books2)
    print('私はJavaとPHPの書籍は購入しません。')

    for book in books2:
        print('私は',book,'の書籍を購入します。')
	

実行結果

	私はJavaとPHPの書籍は購入しません。
	私は Python の書籍を購入します。
	私は Javascript の書籍を購入します。
	

ソースコードの仕様

① 変数booksをイテレータに変換しbooks2に格納させる(3行目)
② 変数books2の値を参照する際、1番目と2番目の要素(Java、Python)をスキップさせ、3番目の要素(Python)から参照させる(5、6行目)

問3 以下に示すソースコードにおいてイテレータ生成するクラスBookになるよう①、②の内容を、以下のソースコードの仕様に従って埋めなさい

ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第6章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第6章.ipynb

    class Book:
        def __init__(self,books):
            self.books = books
            self.index = 0

        #__iter__メソッドの定義
        def __iter__(self):
            return self

        #__next__メソッドの定義
        def __next__(self):

            #全ての要素を参照しイテレータ終了させる条件分岐
            if self.index >= ①:
                raise StopIteration

            #現インデックス番号の要素の値を格納
            value = ②
            #次のインデックス番号を指定
            self.index += 1

            return value

    books = ['Java','PHP','Python','Javascript']
    books1 = Book(books)
    next(books1)
    print('私はJavaの書籍は購入しません。')

    for book in books1:
        print('私は',book,'の書籍を購入します。')
	

実行結果

	私はJavaの書籍は購入しません。
	私は PHP の書籍を購入します。
	私は Python の書籍を購入します。
	私は Javascript の書籍を購入します。
	

ソースコードの仕様

① インスタンス変数booksの全ての要素を参照しイテレータ終了させるために、self.booksの要素の数と現インデックス番号(self.index)を比較させる条件分岐を設定する(14行目)
② self.booksの現インデックス番号の要素の値を格納させる(18行目)

問4 次のソースコードで以下の条件を満たすイテレータbooks1を生成できるジェネレータBooksを記述しなさい。

ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第6章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第6章.ipynb

    #ジェネレータbooksを定義する
    def books():
        #回答欄





    #イテレータbook1を定義する
    books1 = books()
    #第1の要素Javaの次の要素を参照させる
    next(books1)

    print('私はJavaの書籍は購入しません。')

    for book in books1:
        print('私は',book,'の書籍を購入します。')
	

実行結果

	私はJavaの書籍は購入しません。
	私は PHP の書籍を購入します。
	私は Python の書籍を購入します。
	私は Javascript の書籍を購入します。
	

ジェネレータBooksの仕様

代入先のbooks1が「Java」、「PHP」、「Python」、「Javascript」の各要素を含むイテレータとして生成される。


NEXT>> 6.5 練習問題 解答