Python 3.5 - 262 236 220 bytes:
-16 bytes gracias a @CatsAreFluffy! ¡Toda mi función ahora puede finalmente estar en una sola línea! :)
from collections import*
def a(v):o=OrderedDict;j=[chr(i+97)for i in range(26)];d=o((j[i],(' '+'_'*(i+1)+'\n'+j[i]+'|'+'_'*(i+1)+'|'))for i in range(26));f=lambda w:'a'[w:]or f(w-1)+j[w]+f(w-1);[print(d[g])for g in f(v)]
Puede ser un poco largo y puede imprimir nuevas líneas entre edificios, pero hace lo que necesita. Puede probarlo usted mismo para confirmarlo.
EDITAR:
Mi código de golf anterior no imprimió el patrón correcto en absoluto. Sin embargo, ahora el que se muestra arriba lo hace, y lo hace bien en mi opinión. También puede ejecutarlo usted mismo para confirmar eso.
Nota: El programa imprime todas las letras minúsculas detrás de cada "edificio". Espero que esté bien.
Versión sin golf con explicación:
from collections import*
def a(v):
o=OrderedDict # Assign the OrderedSict function to "o"
j=[chr(i+97)for i in range(26)] # Create a list with all 26 lowercase letters of the alphabet
d=o((j[i],(' '+'_'*(i+1)+'\n'+j[i]+'|'+'_'*(i+1)+'|'))for i in range(26)) # Create a dict assigning each letter it's corresponding building with its corresponding length
f=lambda w:'a'[w:]or f(w-1)+j[w]+f(w-1) # Return the ABACABA sequence based on the user input
[print(d[g])for g in f(v)] # Print out the building according to the sequence returned by the above lambda function (thanks to @CatsAreFluffy for this method to print it! :) )
Básicamente, lo que estoy haciendo es importar primero la función de diccionario ordenado del módulo de colecciones y luego crear un diccionario ordenado, con cada letra minúscula en la lista "j" asignada a su edificio correspondiente, con su longitud correspondiente en guiones bajos. Luego calculo la secuencia, en base a la entrada del usuario, usando la f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
función, y luego en función de la secuencia devuelta por eso, se imprimen los edificios, con la letra correspondiente de cada uno.