Recursos-LCC

Um arquivo de todo material que consegui reunir, pertinente ao curso de LCC da UM.

View on GitHub

LA2 | Treino 1 | Formata


"""
Implemente uma função que formata um programa em C.
O código será fornecido numa única linha e deverá introduzir
um '\n' após cada ';', '{', ou '}' (com excepção da última linha).
No caso do '{' as instruções seguintes deverão também estar identadas
2 espaços para a direita.
"""

def formata(codigo):
    ind = 0
    i = 0
    l = len(codigo)
    final = ""
    newline = True
    for c in codigo:
        i += 1
        if c == ';':
            final += c + ('\n'+ind*' ')*(i<l)
            newline = True
        elif c == '{':
            ind += 2
            final += c + ('\n'+ind*' ')*(i<l)
            newline = True
        elif c == '}':
            final = final[:-2]
            ind -= 2
            final += c + ('\n'+ind*' ')*(i<l)
            newline = True
        elif c == ' ' and newline:
            continue
        else:
            newline = False
            final += c
    
    return final


##############################
#    Solucao Alternativa     #
##############################

def formata(codigo):
    newline = True
    tab = 0
    final = ""
    for c in codigo:
        if newline and c == " ":
            continue
        elif c == '{':
            if newline:
                final += ' '*tab
            final += c +'\n'
            tab += 2
            newline = True
        elif c == '}':
            tab -= 2
            if newline:
                final += ' '*tab
            final += c +'\n'
            newline = True
        elif c == ';':
            if newline:
                final += ' '*tab
            final += c +'\n'
            newline = True
        else:
            if newline:
                final += ' '*tab
            final += c
            newline = False

    if newline:
        final = final[:-1]
    return final


Testes

# 1
codigo = "int x;x=0;x=x+1;"
> Resultado = "int x;\nx=0;\nx=x+1;"

# 2
codigo = "int main() {int x;x=0;     x=x+1;}"
> Resultado = "int main() {\n  int x;\n  x=0;\n  x=x+1;\n}"

retroceder