From 8279f8e20ca45d85eef238e966c0ff4a05011cf6 Mon Sep 17 00:00:00 2001 From: percy07 <56677891+percy07@users.noreply.github.com> Date: Tue, 29 Oct 2019 14:23:41 +0530 Subject: [PATCH 1/2] Update palindrome.py Add Doctests. --- other/palindrome.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/other/palindrome.py b/other/palindrome.py index 2ca453b64702..22e6a7c49d02 100644 --- a/other/palindrome.py +++ b/other/palindrome.py @@ -1,5 +1,25 @@ # Program to find whether given string is palindrome or not def is_palindrome(str): + """ + This function return True is given string is Palindrom other wise return False. + + >>> is_palindrome('MALAYALAM') + True + >>> is_palindrome('String') + False + >>> is_palindrome('rotor') + True + >>> is_palindrome('level') + True + >>> is_palindrome('A') + True + >>> is_palindrome('BB') + True + >>> is_palindrome('ABC') + False + """ + + start_i = 0 end_i = len(str) - 1 while start_i < end_i: From 88c6e2cdef253a9b29c51cf614b877789c1c00a6 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Tue, 29 Oct 2019 11:22:35 +0100 Subject: [PATCH 2/2] Use test_data to drive the testing --- other/palindrome.py | 75 +++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/other/palindrome.py b/other/palindrome.py index 22e6a7c49d02..dd1fe316f479 100644 --- a/other/palindrome.py +++ b/other/palindrome.py @@ -1,29 +1,31 @@ -# Program to find whether given string is palindrome or not -def is_palindrome(str): +# Algorithms to determine if a string is palindrome + +test_data = { + "MALAYALAM": True, + "String": False, + "rotor": True, + "level": True, + "A": True, + "BB": True, + "ABC": False, + "amanaplanacanalpanama": True, # "a man a plan a canal panama" +} +# Ensure our test data is valid +assert all((key == key[::-1]) is value for key, value in test_data.items()) + + +def is_palindrome(s: str) -> bool: """ - This function return True is given string is Palindrom other wise return False. + Return True if s is a palindrome otherwise return False. - >>> is_palindrome('MALAYALAM') - True - >>> is_palindrome('String') - False - >>> is_palindrome('rotor') + >>> all(is_palindrome(key) is value for key, value in test_data.items()) True - >>> is_palindrome('level') - True - >>> is_palindrome('A') - True - >>> is_palindrome('BB') - True - >>> is_palindrome('ABC') - False """ - - + start_i = 0 - end_i = len(str) - 1 + end_i = len(s) - 1 while start_i < end_i: - if str[start_i] == str[end_i]: + if s[start_i] == s[end_i]: start_i += 1 end_i -= 1 else: @@ -31,21 +33,34 @@ def is_palindrome(str): return True -# Recursive method -def recursive_palindrome(str): - if len(str) <= 1: +def is_palindrome_recursive(s: str) -> bool: + """ + Return True if s is a palindrome otherwise return False. + + >>> all(is_palindrome_recursive(key) is value for key, value in test_data.items()) + True + """ + if len(s) <= 1: return True - if str[0] == str[len(str) - 1]: - return recursive_palindrome(str[1:-1]) + if s[0] == s[len(s) - 1]: + return is_palindrome_recursive(s[1:-1]) else: return False -def main(): - str = "ama" - print(recursive_palindrome(str.lower())) - print(is_palindrome(str.lower())) +def is_palindrome_slice(s: str) -> bool: + """ + Return True if s is a palindrome otherwise return False. + + >>> all(is_palindrome_slice(key) is value for key, value in test_data.items()) + True + """ + return s == s[::-1] if __name__ == "__main__": - main() + for key, value in test_data.items(): + assert is_palindrome(key) is is_palindrome_recursive(key) + assert is_palindrome(key) is is_palindrome_slice(key) + print(f"{key:21} {value}") + print("a man a plan a canal panama")