2016-12-24 8:09 GMT+01:00 <glbattiste...@tiscali.it>: > dove sta l'errore […] > ma non fa i conti che mi aspetto
Secondo me l'errore è nel non indicare il risultato che ti attendevi e quello che hai avuto invece. L'idea è che nello scrivere "mi aspettavo 13*16^2 + 14*16 + 2 mentre ho avuo 13*16^3 + 14*16^2 + 2*16" probabilmente ti accorgi da solo del problema. Vedi l'howto "How to ask questions the smart way" di Eric Raymond, "Getting answers" di Mike Ash che è considerata una alternativa migliore perché molto meno supponente e "SSCCE". A parte questo il problema col codice (stile a parte) è che usi len(), l'approccio a indici è poco idiomatico e in genere python ha una soluzione considerata più "elegante", in questo caso enumerate(numero_esadecimale) ti restituirà ad ogni iterazione le coppie (indice, cifra) ma la cifrà più significativa avrà indice zero perché è all'inizio della stringa. Piuttosto che calcolare il complemento alla lunghezza della stringa conviene la funzione builtin reversed. Inoltre ricorda che le liste sono iterabili, non serve trasformarle in lista prima di eseguirci un ciclo sopra. Quindi tralasciando l'assegnazione di Dizionario (base 16 o base 17 che si voglia) > NumeroEsadecimale = 'DE2' > NumEsadInLista = list(NumeroEsadecimale) > LunghezzaLista= len(NumEsadInLista) > > for i in NumEsadInLista: Risultato=Dizionario[i]*16**LunghezzaLista LunghezzaLista=LunghezzaLista-1 diventa numero_esadecimale = 'DE2' risultato = 0 for index, digit in enumerate(reversed(numero_esadecimale)): risultato += dizionario[digit] * (16 ** index) che mi sembra più chiaro, anche come assegnazione dei nomi (tu usi "lunghezzalista" come contatore a scalare ma in realtà la lunghezza della lista non sta certo cambiando). Dato che il loop è uno one-liner puoi usare una generator expression ed evitare anche l'inizializzazione di risultato applicandogli sum(): numero_esadecimale = 'DE2' risultato = sum(dizionario[d] * (16 ** i) for i, d in enumerate(reversed(numero_esadecimale))) Ovviamente se è davvero una conversione da esadecimale a intero e non un esercizio conviene usare int(numero, base=16) . -- Andrea _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python