練習問題 解答
6.5 練習問題 解答
問1
① ○
② ×:int型やfloat型の変数ではiter関数を介してイテレータは生成できない。
③ 〇
④ 〇
⑤ ×:戻り値を何度でも返すことができる。
問2
① iter
② next
1 | books = ['Java','PHP','Python','Javascript'] |
2 | #booksをイテレータに変換する |
3 | books2 = iter(books) |
4 |
5 | #books2の最初の2つの要素を飛ばして次の次の要素(Python)から参照させます。 |
6 | next(books2) |
7 | next(books2) |
8 | print('私はJavaとPHPの書籍は購入しません。') |
9 |
10 | for book in books2: |
11 | print('私は',book,'の書籍を購入します。') |
問3
1 | class 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 |
24 | books = ['Java','PHP','Python','Javascript'] |
25 | books1 = Book(books) |
26 | next(books1) |
27 | print('私はJavaの書籍は購入しません。') |
28 |
29 | for book in books1: |
30 | print('私は',book,'の書籍を購入します。') |
問4
1 | #ジェネレータbooksを定義する |
2 | def books(): |
3 | #解答欄 |
4 | yield 'Java' |
5 | yield 'PHP' |
6 | yield 'Python' |
7 | yield 'Javascript' |
8 |
9 | #イテレータbook1を定義する |
10 | books1 = books() |
11 | #第1の要素Javaの次の要素を参照させる |
12 | next(books1) |
13 |
14 | print('私はJavaの書籍は購入しません。') |
15 |
16 | for book in books1: |
17 | print('私は',book,'の書籍を購入します。') |