Palindrome Checker Project: Basic and Class-Based Python Solutions
Palindrome Checker:
Create a program that checks if a given word or phrase is a palindrome.
Input values:
User provides a word or phrase to be checked for palindrome.
Output value:
Feedback indicates whether the provided word or phrase is a palindrome or not.
Example:
Input values: Enter a word or phrase: radar Output value: "radar" is a palindrome. Input values: Enter a word or phrase: hello Output value: "hello" is not a palindrome. Input values: Enter a word or phrase: A man, a plan, a canal, Panama! Output value: "A man, a plan, a canal, Panama!" is a palindrome.
Here are two different solutions for creating a palindrome checker in Python. Each solution will take user input, check if the input is a palindrome, and provide feedback.
Solution 1: Basic Approach using String Manipulation
Code:
# Solution 1: Basic Approach Using String Manipulation
def is_palindrome(text):
"""Check if the given text is a palindrome."""
# Convert text to lowercase to make the check case-insensitive
text = text.lower()
# Remove non-alphanumeric characters from the text
filtered_text = ''.join(char for char in text if char.isalnum())
# Check if the filtered text is the same forwards and backwards
return filtered_text == filtered_text[::-1]
def main():
"""Main function to interact with the user and check for palindrome."""
# Get user input
user_input = input("Enter a word or phrase: ")
# Check if the input is a palindrome
if is_palindrome(user_input):
print(f'"{user_input}" is a palindrome.')
else:
print(f'"{user_input}" is not a palindrome.')
# Run the palindrome checker
main()
Output:
Enter a word or phrase: Madam "Madam" is a palindrome.
Enter a word or phrase: Orange "Orange" is not a palindrome
Explanation:
- is_palindrome(text) Function:
- Converts the input text to lowercase to ignore case differences.
- Removes non-alphanumeric characters (like spaces, punctuation) using a generator expression.
- Compares the filtered text with its reverse to check if it is a palindrome.
- main() Function:
- Gets user input and checks if it's a palindrome using the is_palindrome() function.
- Prints the appropriate message based on the result.
Solution 2: Class-Based Approach with Regular Expressions
This solution uses a class to encapsulate the palindrome checking functionality and uses regular expressions for filtering non-alphanumeric characters.
Code:
# Solution 2: Class-Based Approach with Regular Expressions
import re # Import the regex module to handle non-alphanumeric characters
class PalindromeChecker:
"""Class to handle palindrome checking functionality."""
def __init__(self, text):
"""Initialize with the text to be checked."""
self.text = text
def clean_text(self):
"""Remove non-alphanumeric characters and convert to lowercase."""
# Use regex to keep only alphanumeric characters and convert to lowercase
return re.sub(r'[^a-zA-Z0-9]', '', self.text).lower()
def is_palindrome(self):
"""Check if the cleaned text is a palindrome."""
# Clean the text using the clean_text method
cleaned_text = self.clean_text()
# Check if the cleaned text reads the same forwards and backwards
return cleaned_text == cleaned_text[::-1]
def check(self):
"""Check and print whether the original text is a palindrome."""
if self.is_palindrome():
print(f'"{self.text}" is a palindrome.')
else:
print(f'"{self.text}" is not a palindrome.')
def main():
"""Main function to get user input and check for palindrome."""
# Get user input
user_input = input("Enter a word or phrase: ")
# Create an instance of PalindromeChecker and check for palindrome
checker = PalindromeChecker(user_input)
checker.check()
# Run the palindrome checker
main()
Output:
Enter a word or phrase: Madam "Madam" is a palindrome.
Enter a word or phrase: Madam "Madam" is a palindrome.
Explanation:
- PalindromeChecker Class:
- __init__() Constructor: Initializes the class with the text to be checked.
- clean_text() Method: Uses a regular expression (re.sub) to remove all non-alphanumeric characters and converts the text to lowercase.
- is_palindrome() Method: Cleans the text and checks if it reads the same forwards and backwards.
- check() Method: Calls is_palindrome() and prints whether the text is a palindrome.
- main() Function:
- Gets user input and creates an instance of the PalindromeChecker class.
- Calls the check() method to determine if the input is a palindrome and print the result.
Differences Between the Two Solutions:
- Solution 1: Basic Approach Using String Manipulation:
- Uses basic string manipulation techniques.
- Simple and effective for basic palindrome checks.
- No additional libraries required.
- Solution 2: Class-Based Approach with Regular Expressions:
- Encapsulates the palindrome checking logic in a class.
- Uses regular expressions for more advanced text cleaning.
- More modular and extendable, suitable for larger applications.
Both solutions effectively check if a word or phrase is a palindrome, but the second solution offers a more structured and modular approach.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics