From f438440ac54bbaad1557d5d8d2caa3331231f99b Mon Sep 17 00:00:00 2001 From: Bruno Simas Hadlich Date: Thu, 18 Jul 2019 14:05:14 -0300 Subject: [PATCH] Fixes for issue "Fix the LGTM issues #1024" (#1034) * Added doctest and more explanation about Dijkstra execution. * tests were not passing with python2 due to missing __init__.py file at number_theory folder * Removed the dot at the beginning of the imported modules names because 'python3 -m doctest -v data_structures/hashing/*.py' and 'python3 -m doctest -v data_structures/stacks/*.py' were failing not finding hash_table.py and stack.py modules. * Moved global code to main scope and added doctest for project euler problems 1 to 14. * Added test case for negative input. * Changed N variable to do not use end of line scape because in case there is a space after it the script will break making it much more error prone. * Added problems description and doctests to the ones that were missing. Limited line length to 79 and executed python black over all scripts. * Changed the way files are loaded to support pytest call. * Added __init__.py to problems to make them modules and allow pytest execution. * Added project_euler folder to test units execution * Changed 'os.path.split(os.path.realpath(__file__))' to 'os.path.dirname()' * Added Burrows-Wheeler transform algorithm. * Added changes suggested by cclauss * Fixes for issue 'Fix the LGTM issues #1024'. * Added doctest for different parameter types and negative values. * Fixed doctest issue added at last commit. --- project_euler/problem_02/sol4.py | 26 +++++++++++++++++++++++++- project_euler/problem_03/sol1.py | 27 +++++++++++++++++++++++++-- project_euler/problem_03/sol2.py | 27 +++++++++++++++++++++++++-- project_euler/problem_05/sol1.py | 27 +++++++++++++++++++++++++-- project_euler/problem_07/sol2.py | 24 ++++++++++++++++++++++++ project_euler/problem_09/sol1.py | 1 - project_euler/problem_19/sol1.py | 2 +- project_euler/problem_234/sol1.py | 1 - 8 files changed, 125 insertions(+), 10 deletions(-) diff --git a/project_euler/problem_02/sol4.py b/project_euler/problem_02/sol4.py index ba13b12a1..5e8c04899 100644 --- a/project_euler/problem_02/sol4.py +++ b/project_euler/problem_02/sol4.py @@ -11,7 +11,7 @@ n, find the sum of the even-valued terms. e.g. for n=10, we have {2,8}, sum is """ from __future__ import print_function import math -from decimal import * +from decimal import Decimal, getcontext try: raw_input # Python 2 @@ -33,7 +33,31 @@ def solution(n): 0 >>> solution(34) 44 + >>> solution(3.4) + 2 + >>> solution(0) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution(-17) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution([]) + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. + >>> solution("asd") + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. """ + try: + n = int(n) + except (TypeError, ValueError) as e: + raise TypeError("Parameter n must be int or passive of cast to int.") + if n <= 0: + raise ValueError("Parameter n must be greater or equal to one.") getcontext().prec = 100 phi = (Decimal(5) ** Decimal(0.5) + 1) / Decimal(2) diff --git a/project_euler/problem_03/sol1.py b/project_euler/problem_03/sol1.py index c2e601bd0..ab19d8b30 100644 --- a/project_euler/problem_03/sol1.py +++ b/project_euler/problem_03/sol1.py @@ -28,14 +28,38 @@ def isprime(no): def solution(n): """Returns the largest prime factor of a given number n. - + >>> solution(13195) 29 >>> solution(10) 5 >>> solution(17) 17 + >>> solution(3.4) + 3 + >>> solution(0) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution(-17) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution([]) + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. + >>> solution("asd") + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. """ + try: + n = int(n) + except (TypeError, ValueError) as e: + raise TypeError("Parameter n must be int or passive of cast to int.") + if n <= 0: + raise ValueError("Parameter n must be greater or equal to one.") maxNumber = 0 if isprime(n): return n @@ -54,7 +78,6 @@ def solution(n): elif isprime(i): maxNumber = i return maxNumber - return int(sum) if __name__ == "__main__": diff --git a/project_euler/problem_03/sol2.py b/project_euler/problem_03/sol2.py index 497db3965..f93a0b75f 100644 --- a/project_euler/problem_03/sol2.py +++ b/project_euler/problem_03/sol2.py @@ -6,7 +6,6 @@ of a given number N? e.g. for 10, largest prime factor = 5. For 17, largest prime factor = 17. """ from __future__ import print_function, division -import math try: raw_input # Python 2 @@ -16,14 +15,38 @@ except NameError: def solution(n): """Returns the largest prime factor of a given number n. - + >>> solution(13195) 29 >>> solution(10) 5 >>> solution(17) 17 + >>> solution(3.4) + 3 + >>> solution(0) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution(-17) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution([]) + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. + >>> solution("asd") + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. """ + try: + n = int(n) + except (TypeError, ValueError) as e: + raise TypeError("Parameter n must be int or passive of cast to int.") + if n <= 0: + raise ValueError("Parameter n must be greater or equal to one.") prime = 1 i = 2 while i * i <= n: diff --git a/project_euler/problem_05/sol1.py b/project_euler/problem_05/sol1.py index 609f02102..e2deb91fb 100644 --- a/project_euler/problem_05/sol1.py +++ b/project_euler/problem_05/sol1.py @@ -17,7 +17,7 @@ except NameError: def solution(n): """Returns the smallest positive number that is evenly divisible(divisible with no remainder) by all of the numbers from 1 to n. - + >>> solution(10) 2520 >>> solution(15) @@ -26,7 +26,31 @@ def solution(n): 232792560 >>> solution(22) 232792560 + >>> solution(3.4) + 6 + >>> solution(0) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution(-17) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution([]) + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. + >>> solution("asd") + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. """ + try: + n = int(n) + except (TypeError, ValueError) as e: + raise TypeError("Parameter n must be int or passive of cast to int.") + if n <= 0: + raise ValueError("Parameter n must be greater or equal to one.") i = 0 while 1: i += n * (n - 1) @@ -39,7 +63,6 @@ def solution(n): if i == 0: i = 1 return i - break if __name__ == "__main__": diff --git a/project_euler/problem_07/sol2.py b/project_euler/problem_07/sol2.py index 3dc0b1343..67336f7c1 100644 --- a/project_euler/problem_07/sol2.py +++ b/project_euler/problem_07/sol2.py @@ -36,7 +36,31 @@ def solution(n): 229 >>> solution(100) 541 + >>> solution(3.4) + 5 + >>> solution(0) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution(-17) + Traceback (most recent call last): + ... + ValueError: Parameter n must be greater or equal to one. + >>> solution([]) + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. + >>> solution("asd") + Traceback (most recent call last): + ... + TypeError: Parameter n must be int or passive of cast to int. """ + try: + n = int(n) + except (TypeError, ValueError) as e: + raise TypeError("Parameter n must be int or passive of cast to int.") + if n <= 0: + raise ValueError("Parameter n must be greater or equal to one.") primes = [] num = 2 while len(primes) < n: diff --git a/project_euler/problem_09/sol1.py b/project_euler/problem_09/sol1.py index 0f368e48d..20dedb84b 100644 --- a/project_euler/problem_09/sol1.py +++ b/project_euler/problem_09/sol1.py @@ -28,7 +28,6 @@ def solution(): if (a ** 2) + (b ** 2) == (c ** 2): if (a + b + c) == 1000: return a * b * c - break if __name__ == "__main__": diff --git a/project_euler/problem_19/sol1.py b/project_euler/problem_19/sol1.py index 6e4e29ec1..ab5936584 100644 --- a/project_euler/problem_19/sol1.py +++ b/project_euler/problem_19/sol1.py @@ -61,4 +61,4 @@ def solution(): if __name__ == "__main__": - print(solution(171)) + print(solution()) diff --git a/project_euler/problem_234/sol1.py b/project_euler/problem_234/sol1.py index 8298a7f8c..c0d294928 100644 --- a/project_euler/problem_234/sol1.py +++ b/project_euler/problem_234/sol1.py @@ -40,7 +40,6 @@ def solution(n): semidivisible = [] for x in range(n): l=[i for i in input().split()] - c1=0 c2=1 while(1): if len(fib(l[0],l[1],c2))