Python Project - Simple Chatbot Solutions and Explanations
Basic Chatbot:
Create a simple chatbot that responds to user input with predefined answers.
Input values:
Input or questions are provided by the user to the chatbot.
Output value:
Predefined responses generated by the chatbot.
Example:
Input values: User: How are you? Output value: Chatbot: I'm doing well, thank you!
Here are two different solutions for a basic chatbot in Python. The chatbot will respond to user input with predefined answers.
Solution 1: Basic Chatbot using Conditional Statements
Code:
 # Solution 1: Basic Chatbot Using Conditional Statements
def chatbot_response(user_input):
    """Function to provide predefined responses based on user input"""
    # Convert the user input to lowercase to handle different cases
    user_input = user_input.lower()
    # Provide predefined responses based on user input using conditional statements
    if "hello" in user_input or "hi" in user_input:
        return "Hello! How can I help you today?"
    elif "how are you" in user_input:
        return "I'm doing well, thank you!"
    elif "what is your name" in user_input:
        return "I'm a simple chatbot, and I don't have a name yet!"
    elif "bye" in user_input or "goodbye" in user_input:
        return "Goodbye! Have a great day!"
    else:
        return "I'm sorry, I don't understand. Can you please rephrase?"
# Main loop to interact with the user
print("Welcome to the chatbot! Type 'bye' to exit.")
while True:
    # Get input from the user
    user_input = input("User: ")
    # If the user types 'bye', exit the chat
    if user_input.lower() == "bye":
        print("Chatbot: Goodbye! Have a great day!")
        break
    # Get the chatbot's response
    response = chatbot_response(user_input)
    print(f"Chatbot: {response}")
Output:
Welcome to the chatbot! Type 'bye' to exit. User: Hello Chatbot: Hello! How can I help you today? User: How are you? Chatbot: I'm doing well, thank you! User: bye Chatbot: Goodbye! Have a great day!
Explanation:
- The chatbot logic is handled by a function 'chatbot_response()' that checks the user's input against predefined phrases using conditional statements ('if-elif').
- If a match is found, the corresponding response is returned; otherwise, a default response is provided.
- The chatbot runs in a 'while' loop, allowing continuous interaction with the user until the user types "bye" to exit.
- This approach is simple and easy to understand, but it can become cumbersome to maintain if many responses are added.
Solution 2: Using a Dictionary-Based approach for Chatbot Responses
Code:
# Solution 2: Using a Dictionary-Based Approach for Chatbot Responses
class SimpleChatbot:
    """Class to handle chatbot interactions"""
    def __init__(self):
        """Initialize the chatbot with predefined responses"""
        # Define predefined responses in a dictionary
        self.responses = {
            "hello": "Hello! How can I help you today?",
            "hi": "Hello! How can I help you today?",
            "how are you": "I'm doing well, thank you!",
            "what is your name": "I'm a simple chatbot, and I don't have a name yet!",
            "bye": "Goodbye! Have a great day!",
            "goodbye": "Goodbye! Have a great day!"
        }
    def get_response(self, user_input):
        """Get a response from the chatbot based on user input"""
        # Convert the user input to lowercase and remove leading/trailing whitespace
        user_input = user_input.lower().strip()
        # Check if the user input matches any predefined responses
        for key in self.responses:
            if key in user_input:
                return self.responses[key]
        # Default response if the input is not recognized
        return "I'm sorry, I don't understand. Can you please rephrase?"
    def start_chat(self):
        """Start the chatbot interaction with the user"""
        print("Welcome to the chatbot! Type 'bye' to exit.")
        while True:
            # Get input from the user
            user_input = input("User: ")
            # If the user types 'bye', exit the chat
            if user_input.lower() == "bye":
                print("Chatbot: Goodbye! Have a great day!")
                break
            # Get the chatbot's response
            response = self.get_response(user_input)
            print(f"Chatbot: {response}")
# Create an instance of the SimpleChatbot class
chatbot = SimpleChatbot()
# Start the chatbot interaction
chatbot.start_chat()
Output:
Welcome to the chatbot! Type 'bye' to exit. User: Hello Chatbot: Hello! How can I help you today? User: How are you? Chatbot: I'm doing well, thank you! User: What is your name? Chatbot: I'm a simple chatbot, and I don't have a name yet! User: bye Chatbot: Goodbye! Have a great day!
Explanation:
- Defines a SimpleChatbot class to handle all chatbot functionality, making the code more organized and modular.
- The predefined responses are stored in a dictionary (self.responses), with keys representing trigger phrases and values representing responses.
- The get_response() method iterates over the dictionary keys to find a match in the user input and returns the corresponding response.
- The start_chat() method manages the interaction loop, allowing the user to continue chatting until they type "bye".
- This approach is more scalable and maintainable, as new responses can easily be added or modified in the dictionary.
Note: 
  Both solutions provide a basic chatbot that responds to user input with predefined answers, with Solution 1 offering a functional, straightforward approach and Solution 2 using a more structured, class-based implementation for better organization and extensibility.
Go to:
