4. Tendències de borsa (2,5 punts)

Una llista de cotitzacions en borsa d’una empresa és una llista on el primer element és un string amb el nom de l’empresa i la resta una sèrie de valors numèrics amb les cotitzacions diàries ordenades cronològicament. Per exemple:

>>> lc1 = ['ACME', 100, 102, 108, 103, 101, 99, 94, 98, 100]

Un màxim significatiu és una cotització més gran que la cotització anterior i que la posterior i que també és més gran que la mitjana de les cotitzacions anteriors i la mitjana de les cotitzacions posteriors.

Un mínim significatiu és una cotització més petita que la cotització anterior i que la posterior i que també és més petita que la mitjana dels punts anteriors i la mitjana dels punts posteriors.

  1. Dissenya la següent funció i desa-la al fitxer borsa.py.

    extrems(lcot)

    Retorna els màxims i mínims significatius de la llista de cotitzacions lcot. La primera i l’última cotització no poden ser màxims o mínims significatius.

    param list lcot:

    llista de cotitzacions

    rtype:

    list

    return:

    una llista on cada element és una tupla amb la informació d’un màxim o mínim significatiu i conté:

    • el nom de l’empresa

    • l’string 'max' si és un màxim significatiu i l’string 'min' si és un mínim significatiu.

    • la cotització del màxim o el mínim

    Els següents doctests mostren exemples del que ha de fer la funció:

    >>> lc1 = ['ACME', 100, 102, 108, 103, 101, 99, 94, 98, 100]
    >>> extrems(lc1)
    [('ACME', 'max', 108), ('ACME', 'min', 94)]
    
    >>> lc2 = ['NOVA', 50, 53, 57, 54, 52, 55, 60, 56, 54]
    >>> extrems(lc2)
    [('NOVA', 'max', 57), ('NOVA', 'min', 52), ('NOVA', 'max', 60)]
    
    >>> lc3 = ['PLANA', 100, 101, 102, 103, 104, 105, 106, 107, 108]
    >>> extrems(lc3)
    []
    

    Disposes de més tests al fitxer test-extrems.txt

  2. Disposem d’una llista d’empreses on cada element és una llista de cotitzacions. Per exemple:

    >>> lborsa1 = [
    ...     ['ACME', 100, 102, 108, 103, 101, 99, 94, 98, 100],
    ...     ['NOVA', 50, 53, 57, 54, 52, 55, 60, 56, 54],
    ...     ['PLANA', 100, 101, 102, 103, 104, 105, 106, 107, 108]
    ... ]
    

    Als màxims i mínims significatius els anomenem extrems. Representem la tendència d’una empresa amb un string de la següent forma:

    • Si una empresa té menys de dos extrems, la seva tendència és 'indefinida'.

    • Si el preu de l’últim extrem és més gran o igual que el preu del primer extrem, la tendència és 'alcista'.

    • Si el preu de l’últim extrem és més petit que el preu del primer extrem, la tendència és 'baixista'.

    Dissenya la funció següent i desa-la al fitxer borsa.py.

    tendencia(lemp)

    Retorna la llista de tendències de les empreses de la llista lemp.

    param list lemp:

    llista d’empreses

    rtype:

    list

    return:

    una llista on cada element és una tupla de dos elements amb el nom d’una empresa de lemp i l’string amb la seva tendència, en el mateix ordre en que apareixen a lemp.

    Aquesta funció ha de cridar la funció extrems().

    Els següents doctests mostren exemples del que ha de fer la funció:

    >>> lborsa1 = [
    ...     ['ACME', 100, 102, 108, 103, 101, 99, 94, 98, 100],
    ...     ['NOVA', 50, 53, 57, 54, 52, 55, 60, 56, 54],
    ...     ['PLANA', 100, 101, 102, 103, 104, 105, 106, 107, 108]
    ... ]
    >>> tendencia(lborsa1)
    [('ACME', 'baixista'), ('NOVA', 'alcista'), ('PLANA', 'indefinida')]
    

    Disposes de més tests al fitxer test-tendencia.txt

    Disposes de solucions al fitxer borsa.py.