''' Definire una funzione convertiStringa(testo) che: riceve come input una stringa nel formato 'gigaG megaM kiloK unitaU' la decodifica e torna il numero corrispondente ''' # Un possibile algoritmo potrebbe essere: # # Input: stringa nel formato descritto # Output: intero corrispondente # Algoritmo: # 1) suddividere la stringa in elementi usando lo spazio come sepatarore # 2) per ciascun segmento di stringa convertirlo in un intero corrispondente # 3) sommare i valori interi in un risultato # # A sua volta la conversione di un singolo frammento nel numero corrispondente puo' essere ottenuto # 1) estraendo la parte iniziale del frammento e convertendolo in un intero # 2) estraendo l'ultima lettera che individua il moltiplicatore da applicare # 3) moltiplicando il valore per il moltiplicatore # 4) tornando il risultato # Una possibile implementazione delle due funzioni potrebbe essere: def convertiStringa(testo): lista = testo.split() somma = 0 for el in lista: somma += convertiFrammento(el) return somma def convertiFrammento(frammento): valore = int(frammento[:-1]) ultimo = frammento[-1] if ultimo == 'G': valore *= 10**9 if ultimo == 'M': valore *= 10**6 if ultimo == 'K': valore *= 10**3 if ultimo == 'U': valore *= 10**0 return valore print('Esempi:') print(convertiStringa('34G 27M 78K 7U'), 'atteso: 34027078007') # NOTA: le corrispondenze tra lettera e moltiplicatore possono essere tabulate evitando una serie di test # e leggendo il moltiplicatore (anzi, l'esponente di 10) direttamente dalla tabella # la tabella di corrispondenze lettera -> esponente puo' essere codificata con un dizionario # in cui le lettere sono le chiavi e gli esponenti i valori def convertiFrammento2(frammento): esponenti = { 'T': 12, # volendo e' facile aggiungere altri moltiplicatori, ad esempio T=tera 'G': 9, 'M': 6, 'K': 3, 'U': 0, } valore = int(frammento[:-1]) ultimo = frammento[-1] moltiplicatore = 10**esponenti[ultimo] valore *= moltiplicatore return valore def convertiStringa2(testo): lista = testo.split() somma = 0 for el in lista: somma += convertiFrammento2(el) return somma print('Esempi2:') print(convertiStringa2('17T 34G 27M 78K 7U'), 'atteso: 17034027078007')