Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Funzione letters to digits

r
rosario.salerno (3010 points)
15 30 44
in Programmare in Python by (3.0k points)
closed by
Salve a tutti, per svolgere il seguente esercizio :

l2d(lst) presa in input una lista lst i cui elementi sono numeri da 0 a 9 espressi in lettere ('zero','uno', …,'nove'), ritorna una nuova lista i cui elementi sono la traduzione in numeri degli
elementi di lst. Esempio
l2d(['nove','due','due','tre'])  ritorna  [9,2,2,3]

Ho scritto la seguente funzione:

def l2d(lst):
    ...:     new = []
    ...:     for x in lst:
    ...:        if x == 'zero':
    ...:          new.append(0)
    ...:        elif x == 'uno':
    ...:          new.append(1)
    ...:        elif x == 'due':
    ...:          new.append(2)
    ...:        elif x == 'tre':
    ...:          new.append(3)
    ...:        elif x == 'quattro':
    ...:          new.append(4)
    ...:        elif x == 'cinque':
    ...:          new.append(5)
    ...:        elif x == 'sei':
    ...:          new.append(6)
    ...:        elif x == 'sette':
    ...:          new.append(7)
    ...:        elif x == 'otto':
    ...:          new.append(8)
    ...:        elif x == 'nove':
    ...:          new.append(9)
    ...:     return new
    ...:
    ...:

La funzione svolge il suo compito come previsto, ma come potete vedere il codice è molto lungo. Secondo voi la funzione è scritta correttamente in base alle richieste dell'esercizio o dovrei in qualche modo ridurre il codice? Se no, come potrei ridurre il codice evitando di importare moduli esterni che convertono automaticamente letters to digits?

Edit: come faccio a postare codice sul forum in modo leggibile?
653 views
closed with the note: answered

1 Answer

Best answer
by (9.9k points)
selected by

Per ridurre il numero di if utilizzati, potresti utilizzare i dizionari. Come chiave metti il numero in forma letterale, come attributo il numero in forma numerica. Dopo aver fatto questa preparazione, puoi semplicemente sostituire tutti gli if aggiungendo il numero (trovato con il dizionario) nella lista, del tipo new.append(dizionario[x]).

Esistono però altri metodi, a me è venuto in mente questo!

LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
Esatto, altrimenti una lista e metti ogni numero scritto a lettere in corrispondenza della sua posizione nella lista :D
by (9.9k points)
Come proponi te non funzionerebbe, perché la lista è ordinata con un indice numerico, invece in questo caso gli serve un indice composto da caratteri (ossia stringa), quindi gli conviene usare i dizionari.
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
Pardon, leggendo numeri da 0 a 9 ho direttamente associato i numeri alle cifre numeriche. Decisamente il dizionario allora.
r
rosario.salerno (3010 points)
15 30 44
by (3.0k points)
esatto, le stringhe possono essere in qualsiasi posizione e anche ripetersi, per esempio se la mia lista è = ['zero','nove','uno','uno'] la mia funzione ritorna [0,9,1,1].  Comunque visto che i dizionari sono più avanti nelle lezioni lo lascerò così per questo esercizio,  ma terrò conto di questo metodo, grazie.
P.S. qualcuno sa dirmi come posso scrivere il codice in modo leggibile sul forum? ho provato [CODE][/CODE] ma non funziona.
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
C'è il bottone "QUOTE" (le due virgolette grandi)