練習問題 解答

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,'の書籍を購入します。')
	

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