3. Cotitzacions

La informació sobre les cotitzacions de diverses companyies a una sessió a la borsa s’emmagatzema en fitxers a on el primer element és el codi de la companyia, seguit per un nombre variable de cotitzacions, tot separat per comes. Per exemple, el contingut del fitxer cot.txt és:

ACC_45,8.77
ACC_32,9.54,9.62,9.86,9.97,9.66
ACC_46,4.85,4.96,4.87,4.95,4.89,4.92
ACC_12,2.0,1.96,1.97,1.94,1.96,1.94,1.95
ACC_25,9.87,9.77,9.6,9.62,9.61,9.55,9.53
ACC_59,1.95
ACC_44,7.81,7.99,7.87,7.67,7.7,7.88,7.71

En un diccionari de cotitzacions, cada clau és un codi de companyia i cada valor una llista de màxims locals de cotitzacions assolits a una sessió. Un màxim local és una cotització més gran que la cotització anterior i que la cotització posterior.

Per exemple:


>>> d = {
...   'ACC_45': [8.78, 8.99, 8.71],
...   'ACC_32': [9.71],
...   'ACC_46': [4.81],
...   'ACC_12': [1.99],
...   'ACC_25': [9.79, 9.88, 9.82],
...   'ACC_59': [1.97, 2.0],
...   'ACC_44': [8.0, 7.79, 7.87],
... }

Dissenya les següents funcions i desa-les al mòdul cot (fitxer cot.py).

cot.maxims(lc)

Calcula les cotitzacions que són màxim locals.

Paràmetres:

lc (list(str)) – llista d’strings que representen cotitzacions a una sessió

Tipus de retorn:

list(float)

Retorna:

llista amb les cotitzacions que són màxims locals.

Els màxims locals han d’aparèixer en el mateix ordre que en la llista lc.

Si no hi ha cap màxim local, la funció retornarà una llista buida.

Per exemple:

>>> l = ['4.85', '4.96', '4.87', '4.95', '4.89', '4.92']
>>> maxims(l)
[4.96, 4.95]

>>> l = ['8.77']
>>> maxims(l)
[]

>>> l = ['9.54', '9.62', '9.86', '9.97', '9.66']
>>> maxims(l)
[9.97]

Disposes de tests al fitxer test-maxims.txt.


cot.actualitza(nomf, d)

Actualitza el diccionari de cotitzacions a partir dels màxims local trobats al fitxer.

Paràmetres:
  • nomf (str) – nom d’un fitxer de cotitzacions

  • d (dict) – diccionari de cotitzacions

Modifica d de manera que, per cada companyia, si la quantitat de màxims locals al fitxer per aquesta companyia és superior que la que hi ha emmagatzemada al diccionari d també per a aquesta mateixa companyia, substitueix el seu valor per la nova llista de màxims locals obtinguda del fitxer.

Pots suposar que tots els codis de companyia presents al fitxer donat estaran al diccionari d.

Per exemple:


>>> d = {
...   'ACC_45': [8.78, 8.99, 8.71],
...   'ACC_32': [9.71],
...   'ACC_46': [4.81],
...   'ACC_12': [1.99],
...   'ACC_25': [9.79, 9.88, 9.82],
...   'ACC_59': [1.97, 2.0],
...   'ACC_44': [8.0, 7.79, 7.87],
... }

>>> actualitza('cot.txt',d)
>>> if d != {
...   'ACC_45': [8.78, 8.99, 8.71],
...   'ACC_32': [9.71],
...   'ACC_46': [4.96, 4.95],
...   'ACC_12': [1.97, 1.96],
...   'ACC_25': [9.79, 9.88, 9.82],
...   'ACC_59': [1.97, 2.0],
...   'ACC_44': [8.0, 7.79, 7.87]
... }:
...   print(d)

Disposes de tests al fitxer test-actualitza.txt.

Important

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