from copy import copy from collections import defaultdict from functools import reduce from itertools import product from typing import Generator from parametros import RUTA_PELICULAS, RUTA_GENEROS from utilidades import ( Pelicula, Genero, obtener_unicos, imprimir_peliculas, imprimir_generos, imprimir_peliculas_genero ) # ---------------------------------------------------------------------------- # Parte 1: Cargar dataset # ---------------------------------------------------------------------------- def cargar_peliculas(ruta: str) -> Generator: # TODO: Completar pass def cargar_generos(ruta: str) -> Generator: # TODO: Completar pass # ---------------------------------------------------------------------------- # Parte 2: Consultas sobre generadores # ---------------------------------------------------------------------------- def obtener_directores(generador_peliculas: Generator) -> set: # TODO: Completar pass def obtener_str_titulos(generador_peliculas: Generator) -> str: # TODO: Completar pass def filtrar_peliculas( generador_peliculas: Generator, director: str | None = None, rating_min: float | None = None, rating_max: float | None = None ) -> filter: # TODO: Completar pass def filtrar_peliculas_por_genero( generador_peliculas: Generator, generador_generos: Generator, genero: str | None = None ) -> Generator: # TODO: Completar pass # ---------------------------------------------------------------------------- # Parte 3: Iterables # ---------------------------------------------------------------------------- class DCCMax: def __init__(self, peliculas: list) -> None: self.peliculas = peliculas def __iter__(self): # TODO: Completar pass class IteradorDCCMax: def __init__(self, iterable_peliculas: list) -> None: self.peliculas = copy(iterable_peliculas) def __iter__(self): # TODO: Completar pass def __next__(self) -> tuple: # TODO: Completar # Se levanta la excepción correspondiente raise StopIteration() if __name__ == '__main__': print('> Cargar películas:') imprimir_peliculas(cargar_peliculas(RUTA_PELICULAS)) print() print('> Cargar géneros') imprimir_generos(cargar_generos(RUTA_GENEROS), 5) print() print('> Obtener directores:') generador_peliculas = cargar_peliculas(RUTA_PELICULAS) print(list(obtener_directores(generador_peliculas))) print() print('> Obtener string títulos') generador_peliculas = cargar_peliculas(RUTA_PELICULAS) print(obtener_str_titulos(generador_peliculas)) print() print('> Filtrar películas (por director):') generador_peliculas = cargar_peliculas(RUTA_PELICULAS) imprimir_peliculas(filtrar_peliculas( generador_peliculas, director='Christopher Nolan' )) print('\n> Filtrar películas (rating min):') generador_peliculas = cargar_peliculas(RUTA_PELICULAS) imprimir_peliculas(filtrar_peliculas(generador_peliculas, rating_min=9.1)) print('\n> Filtrar películas (rating max):') generador_peliculas = cargar_peliculas(RUTA_PELICULAS) imprimir_peliculas(filtrar_peliculas(generador_peliculas, rating_max=8.7)) print() print('> Filtrar películas por género') generador_peliculas = cargar_peliculas(RUTA_PELICULAS) generador_generos = cargar_generos(RUTA_GENEROS) imprimir_peliculas_genero(filtrar_peliculas_por_genero( generador_peliculas, generador_generos, 'Biography' )) print() print('> DCC Max') for (estreno, pelis) in DCCMax(list(cargar_peliculas(RUTA_PELICULAS))): print(f'\n{estreno:^80}\n') imprimir_peliculas(pelis)