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