Elimina comentaris

Es disposa d’un fitxer on hi ha un programa en Python i es vol obtenir un altre fitxer amb el mateix codi però havent esborrat tots els comentaris.

Dissenya la funció descomentaritza que donats dos noms de fitxer, llegeixi el text que hi ha en el primer fitxer i escrigui en el segon fitxer el mateix text però eliminant, de cada línia, tot el que apareix després del caràcter “#”. Si una línia comença amb aquest caràcter s’ha d’eliminar sencera.

Com exemple podeu usar el fitxer exemple.py amb el contingut següent:

import math
# resol una equació de 1r o 2n grau amb arrels reals
# capçalera
def exemple (a, b, c): # tres paràmetres
    if a == 0: # eq. de 1r grau
        x = -c/b
        return x
    else: # eq. de 2n grau
        d = math.sqrt(b**2-4*a*c)  # funció de la l. mat. que calcula l'arrel
        x1 = (-b + d)/(2*a)  # calen tots els parèntesis
        x2 = (-b - d)/(2*a)
        return x1, x2

un cop executada la funció es crearà un segon fitxer amb el contingut:

import math
def exemple (a, b, c): 
    if a == 0: 
        x = -c/b
        return x
    else: 
        d = math.sqrt(b**2-4*a*c)  
        x1 = (-b + d)/(2*a)  
        x2 = (-b - d)/(2*a)
        return x1, x2

Desa la funció al fitxer decomentaritza.py. La funció ha de passar el següent doctest (cal que us baixeu el fitxer exemple.py):

>>> descomentaritza ('exemple.py', 'exemple_des.py')
>>> with open('exemple_des.py', 'r') as f:
...     for linia in f:
...         print(linia[:-1])
import math
def exemple (a, b, c): 
    if a == 0: 
        x = -c/b
        return x
    else: 
        d = math.sqrt(b**2-4*a*c)  
        x1 = (-b + d)/(2*a)  
        x2 = (-b - d)/(2*a)
        return x1, x2

Nota

Pots descarregar el fitxer amb tests descomentaritza.txt.

Solució

Disposeu de solucions al fitxer descomentaritza.py