Parèntesis

  1. Dissenyeu la funció ben_parentitzada_1 que a partir d’un string que representa una expressió matemàtica, retorna True si l’expressió està ben parentitzada i False en cas contrari.

    Una expressió està ben parentitzada si es compleixen les propietats següents:

    1. analitzada d’esquerra a dreta mai hi ha més parèntesis tancats que oberts.

    2. al final hi ha el mateix nombre de parèntesis oberts que tancats.

    Desa la funció al fitxer parentesis.py. La funció ha de passar el següent doctest:

    >>> ben_parentitzada_1('((x+2)*(3*r/z)))')
    False
    >>> ben_parentitzada_1("(f(x)))(5*x-y)")
    False
    >>> ben_parentitzada_1('((x+2)*(((3*r/z))')
    False
    >>> ben_parentitzada_1("((x+2)*(3*r/z))")
    True
    
    

    Nota

    Podeu descarregar el fitxer amb tests parentesis_1.txt

  2. Dissenyeu la funció ben_parentitzada_2 (variant de l’anterior) de forma que retorni l’string 'correcte' si l’expressió està ben parentitzada. Si no ho està, ha de retornar l’string 'parèntesi tancat incorrecte' i la posició en el cas que no es compleixi la propietat 1. Si no compleix la propietat 2, la funció ha de retornar l’string 'més parèntesis oberts que tancats'.

    Desa la funció al fitxer parentesis.py. La funció ha de passar el següent doctest:

    >>> ben_parentitzada_2("((x+2)*(3*r/z))")
    'correcte'
    >>> ben_parentitzada_2("(f(x)))(5*x-y)")
    ('parèntesi tancat incorrecte', 6)
    >>> ben_parentitzada_2('((x+2)*(3*r/z)))')
    ('parèntesi tancat incorrecte', 15)
    >>> ben_parentitzada_2('((x+2)*(((3*r/z))')
    'més parèntesis oberts que tancats'
    
    

    Nota

    Podeu descarregar el fitxer amb tests parentesis_2.txt

Solució

Disposeu de solucions al fitxer parentesis.py