Es. 21. 08/05
E' ottima l'idea di tenere il dato come stringa (in questo caso non dobbiamo usare il valore numerico).
C'e' un piccolo errore (banale) frutto penso del copia/incolla. Nella riga 55:
stringaA+=' '*nrSpazi+ matrice[riga][colonna]+' '
gli spazi moltiplicati per nrSpazi sono due e non uno, e questo sfasa il risultato.
Tolto questo problemino il codice funziona benissimo ed e' una bella soluzione.
Ecco la mia soluzione (in python3):
def LeggiMatrice():
righe=[]
while True:
riga=input('')
if riga:
righe.append(riga.split())
else:
break;
return righe
def LunRighe(righe):
ncampi=0
for r in righe:
ncampi=max(ncampi,len(r))
lun=[0]*ncampi
for riga in righe:
for i in range(len(riga)):
lun[i]=max(lun[i],len(riga[i]))
return lun
def Stampa1(righe,lun):
for riga in righe:
outriga=''
for i in range(len(riga)):
outriga+=' '*(lun[i]-len(riga[i]))+riga[i]+' '
print(outriga)
def Stampa2(righe,lun):
for riga in righe:
for i in range(len(riga)):
print(' '*(lun[i]-len(riga[i])),riga[i],' ',sep='',end='')
print()
def Stampa3(righe,lun):
for riga in righe:
for i in range(len(riga)):
print("{:>{}s} ".format(riga[i],lun[i]),end='')
print()
righe=LeggiMatrice()
lun=LunRighe(righe)
Stampa1(righe,lun)
Stampa2(righe,lun)
Stampa3(righe,lun)
Assomiglia molto a quella di Ruta. Alcune note (didattiche):
- si puo' fare lo split gia' durante la lettura
- ho messo un esempio di break nella lettura
- non e' necessario uniformare il numero degli elementi per riga, basta dimensionare la lista delle lunghezze al massimo numero di elementi
- ho proposto tre funzioni di stampa: fanno la stessa cosa in tre modi leggermente diversi.
stampa1, usa il modo che abbiamo visto: usa una stringa e accumula in essa i campi da stampare; stampa2, usa una print per campo (con l'accortezza di non aggiungere spazi fra i campi, sep=, e di non andare a capo a fine stampa, end=) stampa3, usa il metodo format, in particolare usa la sintassi di format per specificare specificare l'ampiezza del campo con un parametro. "{:>{}s}" indica: '>' giustificato a destra, {} la lunghezza e' un parametro, "s" e' una stringa (questo se non e' chiaro non fa nulla! e' un uso un po' sofisticato della format).