Skip to content

Commit ac5f9bb

Browse files
Andrew hung nguyen (#34)
* hacktoberfest contribution - binary to hexadecimal * Adding regexp to detect invalid expressions and unit test cases * Added a function that converts from binary to octal and included unit tests for it * Refactored the Fibonacci function to use dynamic programming
1 parent d22e782 commit ac5f9bb

3 files changed

Lines changed: 79 additions & 3 deletions

File tree

easyPythonpi/TestFibRefactored.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import unittest
2+
import easyPythonpi
3+
from easyPythonpi import InvalidNumberFibException
4+
5+
class TestFibRefactored(unittest.TestCase):
6+
7+
def test_fibonacci_0(self):
8+
with self.assertRaises(easyPythonpi.InvalidNumberFibException):
9+
easyPythonpi.fibonacci(0)
10+
11+
def test_fibonacci_negative_number(self):
12+
with self.assertRaises(easyPythonpi.InvalidNumberFibException):
13+
easyPythonpi.fibonacci(-10)
14+
15+
def test_fibonacci_1(self):
16+
self.assertEqual( easyPythonpi.fibonacci(1), 0)
17+
18+
def test_fibonacci_2(self):
19+
self.assertEqual( easyPythonpi.fibonacci(2), 1)
20+
21+
def test_fibonacci_3(self):
22+
self.assertEqual( easyPythonpi.fibonacci(3), 1)
23+
24+
def test_fibonacci_4(self):
25+
self.assertEqual( easyPythonpi.fibonacci(4), 2)
26+
27+
def test_fibonacci_5(self):
28+
self.assertEqual( easyPythonpi.fibonacci(5), 3)
29+
30+
def test_fibonacci_6(self):
31+
self.assertEqual( easyPythonpi.fibonacci(6), 5)
32+
33+
def test_fibonacci_7(self):
34+
self.assertEqual( easyPythonpi.fibonacci(7), 8)
35+
36+
def test_fibonacci_8(self):
37+
self.assertEqual( easyPythonpi.fibonacci(8), 13)
38+
39+
def test_fibonacci_9(self):
40+
self.assertEqual( easyPythonpi.fibonacci(9), 21)
41+
42+
def test_fibonacci_10(self):
43+
self.assertEqual( easyPythonpi.fibonacci(10), 34)
44+
45+
if __name__ == '__main__':
46+
unittest.main()
17.5 KB
Binary file not shown.

easyPythonpi/easyPythonpi.py

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,42 @@ def Perimeter_circle(r:'float')->'float': # To find the perimeter of a circle us
4141
PI = 3.142
4242
return 2 * PI * r
4343

44+
4445
def fibonacci(n:'int')->'int': #To find the nth fibonacci series
45-
if n<0:
46-
print("Incorrect input")
46+
"""Finds the fibonacci of the nth sequence.
47+
48+
This function calculates the fibonacci sequence. This function calculates
49+
the nth fibonacci of a number by finding the sum of two numbers in the
50+
fibonacci sequence before n
51+
52+
Args:
53+
n ('int') : The number to find the fibonacci sequence of, assumes n >=1
54+
as valid numbers to find the fibonacci of n.
55+
56+
Returns:
57+
The fibonacci of arg n.
58+
59+
Raises:
60+
No errors
61+
"""
62+
if n<=0:
63+
raise InvalidNumberFibException(n)
4764
# First Fibonacci number is 0
4865
elif n==1:
4966
return 0
5067
# Second Fibonacci number is 1
5168
elif n==2:
5269
return 1
5370
else:
54-
return fibonacci(n-1)+fibonacci(n-2)
71+
fib1 = 0
72+
fib2 = 1
73+
74+
for i in range(2,n-1):
75+
fibN = fib1 + fib2
76+
fib1 = fib2
77+
fib2 = fibN
78+
79+
return fib1 +fib2
5580

5681
def sort(list:'list'): # To bubble sort and array or list
5782
for i in range(len(list) - 1, 0, -1):
@@ -462,3 +487,8 @@ def count_vowels(ip_str:'str')->'int':
462487
# define exception for invalid Binary Strings
463488
class InvalidBinaryException(Exception):
464489
pass
490+
491+
class InvalidNumberFibException(Exception):
492+
def __init__(self, n, message="n is not valid, must be greater than or equal to 1"):
493+
self.n = n
494+
self.message = message

0 commit comments

Comments
 (0)