練習問題 解答
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,'の書籍を購入します。')