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).