Re: [Python] È Off-Topic ma devo dirvelo...

2016-12-24 Per discussione Christian Barra

> On 24 Dec 2016, at 23:06, Ivo Reano  wrote:
> 
> Mi unisco volentieri all'[OT].
> Auguri a tutti!


Buon Natale and Happy New Year (e Python 3.6 !)

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] È Off-Topic ma devo dirvelo...

2016-12-24 Per discussione Ivo Reano
Mi unisco volentieri all'[OT].
Auguri a tutti!
​
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] È Off-Topic ma devo dirvelo...

2016-12-24 Per discussione Francesco Maida
...buon natale e felice anno nuovo a tutti i membri della lista!

Che possiate passare un sereno Natale e che il 2017 possa portarci salute,
lavoro, soldi e grandi soddisfazioni ^__^
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Ordine di calcolo Dove sbaglio

2016-12-24 Per discussione Giammi
grazie per i preziosi consigli in effetti era un esercizio, non avendo mai 
scritto qualcosa l'ho buttata lì effettivamente non ho codificato lo zero.. 
opss Gianmaria B.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Ordine di calcolo Dove sbaglio

2016-12-24 Per discussione Andrea D'Amore
2016-12-24 9:40 GMT+01:00 Andrea D'Amore :

> Ovviamente se è davvero una conversione da esadecimale a intero e non
> un esercizio conviene usare int(numero, base=16) .

In effetti rileggendo il messaggio originale credo che sia proprio
quest'ultimo caso, pensavo avessi dimenticato un += nella riga di
assegnazione di Risultato ma ora credo tu volessi solo stampare la
conversione della cifra in corso, e non ti interessi affatto la
conversione di tutto il numero.


-- 
Andrea
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Ordine di calcolo Dove sbaglio

2016-12-24 Per discussione Andrea D'Amore
2016-12-24 8:09 GMT+01:00  :
> 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


Re: [Python] Ordine di calcolo Dove sbaglio

2016-12-24 Per discussione Daniele Zambelli
Il 24 dicembre 2016 08:32, Gollum1  ha scritto:
> I numeri esadecimali sono da 0 a F, tu hai messo anche G.

Ma il problema maggiore non è tanto la presenza di 'G' che potrebbe
andare bene per eventuali numeri in base diciassette, è la mancanza
dello zero che è un elemento fondamentale nella notazione posizionale
dei numeri.

Sempre per restare nell'esercizio, trasforma l'algoritmo in una
funzione in modo da poterla chiamare con un'istruzione di questo
genere:

print(esa2dec('d0e2'))

per controllare se il risultato è corretto puoi usare:

print(int('d0e2', 16))

Che di sicuro fa i calcoli giusti.

Buon natale a tutti.

-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python