From 020de4d94cc958eb8dcaea7001f81cfb7f7af9c3 Mon Sep 17 00:00:00 2001 From: blackboxprogramming <118287761+blackboxprogramming@users.noreply.github.com> Date: Fri, 8 Aug 2025 14:17:17 -0700 Subject: [PATCH] Update feedback_mechanisms.py --- human_machine/feedback_mechanisms.py | 60 +++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/human_machine/feedback_mechanisms.py b/human_machine/feedback_mechanisms.py index ad35e5a..47cb55d 100644 --- a/human_machine/feedback_mechanisms.py +++ b/human_machine/feedback_mechanisms.py @@ -1 +1,59 @@ -print("Hello World") +from __future__ import annotations + +from dataclasses import dataclass +from typing import List, Optional + + +@dataclass +class Feedback: + """Represents a piece of user feedback with an optional numeric rating. + + Attributes + ---------- + user_id : str + Identifier of the user providing feedback. + message : str + The textual content of the feedback. + rating : Optional[int] + Optional numeric rating (e.g., 1–5) associated with the feedback. + """ + user_id: str + message: str + rating: Optional[int] = None + + +class FeedbackManager: + """ + Collects and processes feedback from users. + + This manager stores feedback entries and can compute simple statistics + over them. + """ + + def __init__(self) -> None: + self._feedback: List[Feedback] = [] + + def submit(self, feedback: Feedback) -> None: + """Submit new feedback.""" + self._feedback.append(feedback) + + def average_rating(self) -> Optional[float]: + """Compute the average rating across all feedback that has a rating.""" + ratings = [f.rating for f in self._feedback if f.rating is not None] + if ratings: + return sum(ratings) / len(ratings) + return None + + def messages(self) -> List[str]: + """Return a list of all feedback messages.""" + return [f.message for f in self._feedback] + + +if __name__ == "__main__": + mgr = FeedbackManager() + mgr.submit(Feedback(user_id="u1", message="Great job!", rating=5)) + mgr.submit(Feedback(user_id="u2", message="Could be better.", rating=3)) + mgr.submit(Feedback(user_id="u3", message="Loved the experience!")) + + print("Average rating:", mgr.average_rating()) + print("Messages:", mgr.messages())