Update palindrome.py (#1509)

* Update palindrome.py

Add Doctests.

* Use test_data to drive the testing
This commit is contained in:
percy07 2019-10-29 15:52:49 +05:30 committed by Christian Clauss
parent e3d4d2bb57
commit 1ed47ad6f4

View File

@ -1,9 +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:
"""
Return True if s is a palindrome otherwise return False.
>>> all(is_palindrome(key) is value for key, value in test_data.items())
True
"""
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:
@ -11,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")