Control horari

Una fàbrica utilitza un sistema de marcatge horari que controla l’hora d’entrada i de sortida dels empleats, quedant enregistrades les dades diàriament en un fitxer. Cada entrada o sortida d’un empleat resulta en una línia del fitxer amb les dades del NIF, nom i cognoms, l’hora d’entrada o sortida (amb el format HH:MM) i un caràcter que indica si l’empleat ha entrat a o sortit de treballar ('E' o 'S'). En cada línia, les dades estan separades per ', ' (coma-espai) i les línies estan ordenades temporalment. El fitxer conté dues primeres línies inicials que descriuen els camps. Per exemple:

NIF,       Nom/Cognoms,         Hora, E/S
-----------------------------------------
11223344F, Ramon Pladevall Homs, 8:00, E
44337799P, Santiago Forns Cheng, 8:01, E
77722212M, Corneli Perez Simon, 8:33, E
11122233V, Anna Pi Fort, 9:30, E
44337799P, Santiago Forns Cheng, 10:31, S 

Pots descarregar-te el fitxer exemple sencer entradasortida.txt

Desa les següents funcions al fitxer control.py.

  1. Dissenya la funció suma_temps() que donats 4 enters corresponents a les hores i minuts d’un primer temps i les hores i minuts d’un segon temps, retorna dos enters corresponents a les hores i minuts del temps suma dels dos donats. Exemples:

    >>> suma_temps(2, 45, 3, 35)
    (6, 20)
    >>> suma_temps(1, 20, 4, 15)
    (5, 35)
    >>> suma_temps(3, 50, 1, 55)
    (5, 45)
    

    Nota

    Podeu descarregar el fitxer amb tests suma_temps.txt

  2. Dissenya la funció resta_temps() que donats 4 enters corresponents a les hores i minuts d’un primer temps i les hores i minuts d’un segon temps, retorna dos enters corresponents a les hores i minuts de la diferència entre el primer temps i el segon. Exemples:

    >>> resta_temps(3, 45, 2, 35)
    (1, 10)
    >>> resta_temps(2, 20, 2, 15)
    (0, 5)
    >>> resta_temps(3, 5, 1, 55)
    (1, 10)
    >>> resta_temps(5, 15, 2, 35)
    (2, 40)
    

    Nota

    Podeu descarregar el fitxer amb tests resta_temps.txt

  3. Dissenyeu la funció control_1() que, donat el nom d’un fitxer que conté dades en el format descrit i el NIF d’un treballador de l’empresa, calculi et temps que aquest ha estat treballant. La funció ha de retornar dos enters corresponents a les hores i els minuts. Aquesta funció ha d’usar les dues anteriors. Un treballador pot haver entrat i sortit més d’un cop. Exemples:

    >>> control_1 ('entradasortida.txt', '11223344F')
    (8, 15)
    >>> control_1 ('entradasortida.txt', '44337799P')
    (5, 19)
    >>> control_1 ('entradasortida.txt', '77722212M')
    (7, 16)
    >>> control_1 ('entradasortida.txt', '11122233V')
    (6, 5)
    

    Nota

    Podeu descarregar el fitxer amb tests control_1.txt

  4. Dissenyeu la funció control_2() que, donat el nom d’un fitxer que conté dades en el format descrit i el NIF del director de la fàbrica, retorni True si, i només si, el director ha estat el darrer d’entrar a treballar. Si el director aquell dia no ha treballat, la funció també ha de retornar True. Amb les dades de l’exemple, si la directora és la Maria Sans, la funció ha de retornar True; en canvi, si el director és qualsevol dels altres quatre empleats, la funció ha de retornar False. Suggeriment: construiu primer un diccionari on la clau sigui el NIF i el valor el primer temps en què el treballador ha entrat a treballar. Exemples:

    >>> control_2 ('entradasortida.txt', '11223344F')
    False
    >>> control_2 ('entradasortida.txt', '44337799P')
    False
    >>> control_2 ('entradasortida.txt', '77722212M')
    False
    >>> control_2 ('entradasortida.txt', '11122233V')
    False
    >>> control_2 ('entradasortida.txt', '52458425H')
    True
    >>> control_2 ('entradasortida.txt', '12345678X')
    True
    

    Nota

    Podeu descarregar el fitxer amb tests control_2.txt

Solucions

Disposeu de solucions al fitxer control.py