Untitled

mail@pastecode.io avatar
unknown
python
a month ago
4.1 kB
2
Indexable
Never
import json
import os

# File paths
movies_file = "movies.json"
user_preferences_file = "user_preferences.json"

# Sample movie dataset
movies = [
    {"id": 1, "title": "The Shawshank Redemption", "genres": ["Drama"]},
    {"id": 2, "title": "The Godfather", "genres": ["Crime", "Drama"]},
    {"id": 3, "title": "The Dark Knight", "genres": ["Action", "Crime", "Drama"]},
    {"id": 4, "title": "Pulp Fiction", "genres": ["Crime", "Drama"]},
    {"id": 5, "title": "Forrest Gump", "genres": ["Drama", "Romance"]},
    {"id": 6, "title": "Inception", "genres": ["Action", "Adventure", "Sci-Fi"]},
    {"id": 7, "title": "The Matrix", "genres": ["Action", "Sci-Fi"]},
    {"id": 8, "title": "Interstellar", "genres": ["Adventure", "Drama", "Sci-Fi"]}
]

# Creating JSON Files and adding content
def initialize_files():
    if not os.path.exists(user_preferences_file):
        with open(user_preferences_file, "w") as file:
            json.dump({}, file, indent=4)

    if not os.path.exists(movies_file):
        with open(movies_file, "w") as file:
            json.dump(movies, file, indent=4)

def load_movies():
    try:
        with open(movies_file, "r") as file:
            return json.load(file)
    except json.JSONDecodeError:
        print("Error: Movies file is corrupted or empty.")
        return []
    except FileNotFoundError:
        return []

def load_user_preferences() -> dict:
    try:
        with open(user_preferences_file, "r") as file:
            return json.load(file)
    except json.JSONDecodeError:
        print("Error: User preferences file is corrupted or empty.")
        return {}
    except FileNotFoundError:
        return {}

def save_user_preferences(preferences: dict):
    try:
        # Convert sets to lists for JSON serialization
        preferences_serializable = {k: list(v) for k, v in preferences.items()}
        with open(user_preferences_file, "w") as file:
            json.dump(preferences_serializable, file, indent=4)
    except IOError as e:
        print(f"Error saving user preferences: {e}")

def recommend_movies(user_id: str) -> list:
    user_preferences = load_user_preferences()
    user_genres = set(user_preferences.get(user_id, []))
    
    if not user_genres:
        return ["No preferences found. Please set your preferences first."]
    
    recommended_movies = []
    for movie in load_movies():
        movie_genres = set(movie["genres"])
        # Recommend movie if it has any genre in common with the user's preferences
        if user_genres.intersection(movie_genres):
            recommended_movies.append(movie["title"])
    
    return recommended_movies if recommended_movies else ["No recommendations found."]

def update_user_preferences(user_id: str, genres: list):
    """Update user preferences."""
    user_preferences = load_user_preferences()
    user_preferences[user_id] = set(genres)
    save_user_preferences(user_preferences)

def main():
    initialize_files()  
    
    while True:
        print("\nMovie Recommendation System")
        print("1. Set preferences")
        print("2. Get recommendations")
        print("3. Exit")

        choice = input("Enter your choice: ")

        if choice == "1":
            user_id = input("Enter your user ID: ")
            genres = input("Enter your preferred genres (comma separated): ").split(",")
            genres = [genre.strip() for genre in genres]
            update_user_preferences(user_id, genres)
            print("Preferences updated.")
        
        elif choice == "2":
            user_id = input("Enter your user ID: ")
            recommendations = recommend_movies(user_id)
            print("\nRecommended Movies:")
            for movie in recommendations:
                print(f"- {movie}")

        elif choice == "3":
            print("Exiting...")
            break
        
        else:
            print("Invalid choice. Please try again.")

if __name__ == "__main__":
    main()
Leave a Comment