練習問題 解答

6.5 練習問題 解答

問1

① ○
② ×:int型やfloat型の変数ではiter関数を介してイテレータは生成できない。
③ 〇
④ 〇
⑤ ×:戻り値を何度でも返すことができる。

問2

① iter
② next

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

問3

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 >= len(self.books):
15            raise StopIteration
16 
17        #現インデックス番号の要素の値を格納
18        value = self.books[self.index]
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,'の書籍を購入します。')

問4

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

NEXT>> 第7章 ループの応用

f