• Source
    1. # -*- coding: utf-8 -*-
    2. # q1002_answer_1.py
    3.  
    4. # 使用した Python のバージョン:
    5. # ・Python(Python 2.7.3)/Python3(Python 3.2.3)
    6. # 工夫した点・苦労した点・感想等(ご自由にお書きください):
    7. # ・カウンタ変数を利用し、n になるまでは iterable で列挙される要素 el を無視するようにしました。
    8. # ・index を n 未満である間だけインクリメントするようにしました。
    9.  
    10. def fib():
    11. a, b = 0, 1
    12. while True:
    13. yield b
    14. a, b = b, a + b
    15.  
    16. def drop(iterable, n):
    17. index = 0
    18. for el in iterable:
    19. if index < n:
    20. index += 1
    21. continue
    22. yield el
    23.  
    24. # ※これ以降は変更しないこと。
    25. if __name__ == '__main__':
    26. import unittest
    27.  
    28. class AnswerQ1Test(unittest.TestCase):
    29. def setUp(self):
    30. self.fib = fib()
    31.  
    32. def test_fib(self):
    33. expected = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
    34. result = []
    35. for n in self.fib:
    36. result.append(n)
    37. if len(result) == 10: break
    38. self.assertEqual(result, expected)
    39.  
    40. def test_drop(self):
    41. expected = [8, 13, 21, 34, 55]
    42. result = []
    43. for n in drop(self.fib, 5):
    44. result.append(n)
    45. if len(result) == 5: break
    46. self.assertEqual(result, expected)
    47.  
    48. def test_100th_fib(self):
    49. expected = 354224848179261915075
    50. result = next(drop(self.fib, 99))
    51. self.assertEqual(result, expected)
    52.  
    53. # run tests
    54. unittest.main()
    55.