練習問題 解答
6.5 練習問題 解答
問1
① ○
② ×:int型やfloat型の変数ではiter関数を介してイテレータは生成できない。
③ 〇
④ 〇
⑤ ×:戻り値を何度でも返すことができる。
問2
① iter
② next
books = ['Java','PHP','Python','Javascript'] #booksをイテレータに変換する books2 = iter(books) #books2の最初の2つの要素を飛ばして次の次の要素(Python)から参照させます。 next(books2) next(books2) print('私はJavaとPHPの書籍は購入しません。') for book in books2: print('私は',book,'の書籍を購入します。')
問3
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 >= len(self.books): raise StopIteration #現インデックス番号の要素の値を格納 value = self.books[self.index] #次のインデックス番号を指定 self.index += 1 return value books = ['Java','PHP','Python','Javascript'] books1 = Book(books) next(books1) print('私はJavaの書籍は購入しません。') for book in books1: print('私は',book,'の書籍を購入します。')
問4
#ジェネレータbooksを定義する def books(): #解答欄 yield 'Java' yield 'PHP' yield 'Python' yield 'Javascript' #イテレータbook1を定義する books1 = books() #第1の要素Javaの次の要素を参照させる next(books1) print('私はJavaの書籍は購入しません。') for book in books1: print('私は',book,'の書籍を購入します。')