練習問題

6.4 練習問題

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

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

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

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

ソースコード

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

1books = ['Java','PHP','Python','Javascript']
2#booksをイテレータに変換する
3books2 = ①(books)
4 
5#books2の最初の2つの要素を飛ばして次の次の要素(Python)から参照させます。
6②(books2)
7②(books2)
8print('私はJavaとPHPの書籍は購入しません。')
9 
10for book in books2:
11    print('私は',book,'の書籍を購入します。')

実行結果

1私はJavaとPHPの書籍は購入しません。
2私は Python の書籍を購入します。
3私は 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

1class Book:
2    def __init__(self,books):
3        self.books = books
4        self.index = 0
5 
6    #__iter__メソッドの定義
7    def __iter__(self):
8        return self
9 
10    #__next__メソッドの定義
11    def __next__(self):
12 
13        #全ての要素を参照しイテレータ終了させる条件分岐
14        if self.index >= ①:
15            raise StopIteration
16 
17        #現インデックス番号の要素の値を格納
18        value =
19        #次のインデックス番号を指定
20        self.index += 1
21 
22        return value
23 
24books = ['Java','PHP','Python','Javascript']
25books1 = Book(books)
26next(books1)
27print('私はJavaの書籍は購入しません。')
28 
29for book in books1:
30    print('私は',book,'の書籍を購入します。')

実行結果

1私はJavaの書籍は購入しません。
2私は PHP の書籍を購入します。
3私は Python の書籍を購入します。
4私は 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

1#ジェネレータbooksを定義する
2def books():
3    #回答欄
4 
5 
6 
7 
8 
9#イテレータbook1を定義する
10books1 = books()
11#第1の要素Javaの次の要素を参照させる
12next(books1)
13 
14print('私はJavaの書籍は購入しません。')
15 
16for book in books1:
17    print('私は',book,'の書籍を購入します。')

実行結果

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

ジェネレータBooksの仕様

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


NEXT>> 6.5 練習問題 解答

f