# -*- coding: utf-8 -*-
# q1002_answer_1.py
# 使用した Python のバージョン:
# ・Python(Python 2.7.3)/Python3(Python 3.2.3)
# 工夫した点・苦労した点・感想等(ご自由にお書きください):
# ・カウンタ変数を利用し、n になるまでは iterable で列挙される要素 el を無視するようにしました。
# ・index を n 未満である間だけインクリメントするようにしました。
def fib():
a, b = 0, 1
while True:
yield b
a, b = b, a + b
def drop(iterable, n):
index = 0
for el in iterable:
if index < n:
index += 1
continue
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()