""" Implementa Fibonacci. """ def fib(n): """Fibonacci: Se n <= 1, fib(n) = 1 Se n > 1, fib(n) = fib(n - 1) + fib(n - 2) Exemplos de uso: >>> fib(0) 1 >>> fib(1) 1 >>> fib(10) 100 >>> [ fib(x) for x in xrange(10) ] [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] >>> fib('') Traceback (most recent call last): File "", line 1, in ? File "", line 19, in fib TypeError >>> """ if not type(n) is int: raise TypeError if n > 1: return fib(n - 1) + fib(n - 2) else: return 1 def _doctest(): """ Evoca o doctest. """ import doctest doctest.run_docstring_examples(fib, globals()) if __name__ == "__main__": _doctest() """ Usa unittest para testar fib.py. """ import fib import unittest class TestSequenceFunctions(unittest.TestCase): def setUp(self): self.seq = range(10) def test0(self): self.assertEqual(fib.fib(0), 1) def test1(self): self.assertEqual(fib.fib(1), 1) def test10(self): self.assertEqual(fib.fib(10), 89) def testseq(self): fibs = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] for x, y in zip(fibs, [ fib.fib(x) for x in self.seq ]): self.assert_(x is y) def testtype(self): self.assertRaises(TypeError, fib.fib, '') if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions) unittest.TextTestRunner(verbosity=2).run(suite)