# -*- coding: utf-8 -*-
# q1002_answer_2.py
# 使用した Python のバージョン:
# ・Python(Python 2.7.3)/Python3(Python 3.2.3)
# 工夫した点・苦労した点・感想等(ご自由にお書きください):
# ・組込関数 next() を利用して、シンプルにまとめてみました。
def fib():
a, b = 0, 1
while True:
yield b
a, b = b, a + b
def drop(iterable, n):
it = iter(iterable)
for i in range(n):
next(it)
for el in it:
yield el
# ※これ以降は変更しないこと。
if __name__ == '__main__':
import unittest
class AnswerQ1Test(unittest.TestCase):
def setUp(self):
self.fib = fib()
def test_fib(self):
expected = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
result = []
for n in self.fib:
result.append(n)
if len(result) == 10: break
self.assertEqual(result, expected)
def test_drop(self):
expected = [8, 13, 21, 34, 55]
result = []
for n in drop(self.fib, 5):
result.append(n)
if len(result) == 5: break
self.assertEqual(result, expected)
def test_100th_fib(self):
expected = 354224848179261915075
result = next(drop(self.fib, 99))
self.assertEqual(result, expected)
# run tests
unittest.main()