練習問題
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」の各要素を含むイテレータとして生成される。