• Source
    1. # -*- coding: utf-8 -*-
    2.  
    3. # 使用した Python のバージョン:
    4. # ・Python(Python 2.7.x)/Python3(Python 3.x) ←どちらか選んでください。どちらでも動作する場合は両方書いてください。
    5. # 工夫した点・苦労した点・感想等(ご自由にお書きください):
    6. # ・
    7. # ・
    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. # ここを適切に実装してテストが通るようにしてください。
    17. # ただし、以下の条件を満たすこと:
    18. # ・iterable 引数を何らかの形で利用すること。
    19. # ・yield 式を必ず利用すること。
    20. # ・import 文を使用しないこと。
    21. pass
    22. # 桜先生からのワンポイントアドバイス:
    23. # ・fib() 関数の実装を参考にすれば、そんなに難しくはないはずよ♪
    24. # ・実装方法はいくつかあるけれど、テストが失敗しなければどれでも正解よ♪
    25.  
    26. # ※これ以降は変更しないこと。
    27. if __name__ == '__main__':
    28. import unittest
    29.  
    30. class AnswerQ1Test(unittest.TestCase):
    31. def setUp(self):
    32. self.fib = fib()
    33.  
    34. def test_fib(self):
    35. expected = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
    36. result = []
    37. for n in self.fib:
    38. result.append(n)
    39. if len(result) == 10: break
    40. self.assertEqual(result, expected)
    41.  
    42. def test_drop(self):
    43. expected = [8, 13, 21, 34, 55]
    44. result = []
    45. for n in drop(self.fib, 5):
    46. result.append(n)
    47. if len(result) == 5: break
    48. self.assertEqual(result, expected)
    49.  
    50. def test_100th_fib(self):
    51. expected = 354224848179261915075
    52. result = next(drop(self.fib, 99))
    53. self.assertEqual(result, expected)
    54.  
    55. # run tests
    56. unittest.main()
    57.