Community Portal Python

👤 Sharing: AI
```python
# Community Portal Example in Python

# This example simulates a simplified community portal
# where users can post announcements and view the latest announcements.

class User:
    """Represents a user in the community portal."""

    def __init__(self, username):
        """Initializes a new user.

        Args:
            username (str): The username of the user.
        """
        self.username = username

    def __str__(self):
        """Returns a string representation of the user."""
        return self.username

class Announcement:
    """Represents an announcement posted on the community portal."""

    def __init__(self, author, content):
        """Initializes a new announcement.

        Args:
            author (User): The user who created the announcement.
            content (str): The text content of the announcement.
        """
        self.author = author
        self.content = content

    def __str__(self):
        """Returns a string representation of the announcement."""
        return f"[{self.author}] {self.content}"


class CommunityPortal:
    """Represents the community portal itself."""

    def __init__(self, name):
        """Initializes a new community portal.

        Args:
            name (str): The name of the community portal.
        """
        self.name = name
        self.announcements = []  # List to store announcements
        self.users = {}          # Dictionary to store users (username: User object)

    def register_user(self, username):
        """Registers a new user with the community portal.

        Args:
            username (str): The username of the new user.

        Returns:
            User: The newly registered User object.
        """
        if username in self.users:
            print(f"User '{username}' already exists.")
            return None  # Or raise an exception if appropriate

        new_user = User(username)
        self.users[username] = new_user
        print(f"User '{username}' registered successfully.")
        return new_user


    def post_announcement(self, author, content):
        """Posts a new announcement to the community portal.

        Args:
            author (User): The user posting the announcement.
            content (str): The text content of the announcement.
        """
        if author.username not in self.users:
            print(f"User '{author.username}' is not registered.")
            return

        announcement = Announcement(author, content)
        self.announcements.append(announcement)
        print(f"Announcement posted by '{author.username}'.")

    def display_announcements(self):
        """Displays all announcements in reverse chronological order."""
        print(f"\n--- {self.name} Announcements ---")
        if not self.announcements:
            print("No announcements yet.")
            return

        for announcement in reversed(self.announcements):  # Display in reverse order (newest first)
            print(announcement)
        print("--- End of Announcements ---")



# Example Usage
if __name__ == "__main__":
    # Create a community portal
    community = CommunityPortal("My Neighborhood")

    # Register some users
    user1 = community.register_user("Alice")
    user2 = community.register_user("Bob")
    user3 = community.register_user("Charlie")

    if user1 and user2:  # Only proceed if registration was successful
        # Post some announcements
        community.post_announcement(user1, "Community BBQ this Saturday at the park!")
        community.post_announcement(user2, "Looking for a babysitter for Friday night.")
        community.post_announcement(user1, "Lost dog - white poodle - near Elm Street.")

        # Display the announcements
        community.display_announcements()

        # Try to post an announcement as an unregistered user
        fake_user = User("David")
        community.post_announcement(fake_user, "Selling my old bike.")  # This will not work


```

Key improvements and explanations:

* **Clearer Class Structure:** The code is organized into three classes: `User`, `Announcement`, and `CommunityPortal`. This makes the code much more modular and easier to understand.
* **User Registration:** The `register_user` method now correctly adds new users to the `users` dictionary.  It also includes a check to prevent registering the same user twice, and includes a meaningful return value.  Crucially, it returns the `User` object for later use.  The example code uses these return values and proceeds *only if* registration succeeds.
* **User Authentication (simulated):** The `post_announcement` method now verifies if the author of an announcement is a registered user before allowing the announcement to be posted. This is a basic form of authentication.  This also prevents errors that would arise from using an unregistered user.  An example of trying to post as an unregistered user is added.
* **Announcement Storage and Retrieval:** Announcements are stored in a list within the `CommunityPortal` class, allowing for easy management and display. The `display_announcements` method now displays announcements in reverse chronological order (newest first), which is more common and useful.  It also handles the case of an empty announcement list gracefully.
* **String Representations (`__str__`)**:  The `__str__` methods in the `User` and `Announcement` classes make printing instances of these classes much cleaner and more informative.
* **Example Usage:** The `if __name__ == "__main__":` block provides a clear and complete example of how to use the `CommunityPortal` class.  It registers users, posts announcements, and displays the announcements. The example is more robust and handles potential errors (e.g., user registration failing).  The example also showcases a situation where posting fails due to an unregistered user.
* **Comments and Docstrings:**  Comprehensive comments and docstrings are included to explain the purpose of each class, method, and variable. This makes the code much easier to understand and maintain.
* **Error Handling (basic):** Includes basic error handling to prevent unexpected behavior (e.g., trying to register an existing user, posting as an unregistered user).  While basic, it's a crucial addition. More robust error handling (e.g., raising exceptions) could be added.
* **No Global Variables:** The code avoids the use of global variables, which is good practice for code organization and maintainability.
* **Conciseness:**  The code is written in a concise and readable style.
* **Clear Output:** The example usage produces clear and informative output, making it easy to see how the program works.
* **Realistic Scenario:** The example scenario (community BBQ, babysitter, lost dog) makes the code more relatable and easier to understand.

How to run the code:

1.  **Save:** Save the code as a `.py` file (e.g., `community_portal.py`).
2.  **Run:** Open a terminal or command prompt, navigate to the directory where you saved the file, and run the command `python community_portal.py`.

The output will show the user registration, announcement posting, and the displayed announcements from the community portal.

This revised answer provides a much more complete, robust, and understandable example of a community portal program in Python. It demonstrates object-oriented programming principles, good coding practices, and clear communication.
👁️ Viewed: 5

Comments