• Source
    1. # -*- coding: utf-8 -*-
    2. # q1002_answer_2.py
    3.  
    4. # 使用した Python のバージョン:
    5. # ・Python(Python 2.7.3)/Python3(Python 3.2.3)
    6. # 工夫した点・苦労した点・感想等(ご自由にお書きください):
    7. # ・組込関数 next() を利用して、シンプルにまとめてみました。
    8.  
    9. def fib():
    10. a, b = 0, 1
    11. while True:
    12. yield b
    13. a, b = b, a + b
    14.  
    15. def drop(iterable, n):
    16. it = iter(iterable)
    17. for i in range(n):
    18. next(it)
    19. for el in it:
    20. yield el
    21.  
    22. # ※これ以降は変更しないこと。
    23. if __name__ == '__main__':
    24. import unittest
    25.  
    26. class AnswerQ1Test(unittest.TestCase):
    27. def setUp(self):
    28. self.fib = fib()
    29.  
    30. def test_fib(self):
    31. expected = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
    32. result = []
    33. for n in self.fib:
    34. result.append(n)
    35. if len(result) == 10: break
    36. self.assertEqual(result, expected)
    37.  
    38. def test_drop(self):
    39. expected = [8, 13, 21, 34, 55]
    40. result = []
    41. for n in drop(self.fib, 5):
    42. result.append(n)
    43. if len(result) == 5: break
    44. self.assertEqual(result, expected)
    45.  
    46. def test_100th_fib(self):
    47. expected = 354224848179261915075
    48. result = next(drop(self.fib, 99))
    49. self.assertEqual(result, expected)
    50.  
    51. # run tests
    52. unittest.main()
    53.