Re: [Python] Conversioni su interi.

2013-05-08 Per discussione Federico Figus
Ciao,

anch'io cercai una funzione che facesse la conversione da intero a base N,
ma non ebbi fortuna :(
Quindi per il momento l'unico è farsela da soli :)

import string
base = string.printable[:36]
n = int(gabriel, 36)
out = []
while n:
out.append(n%36)
n = n/36
print ''.join(base[l] for l in out)[::-1]

Naturalmente si può generalizzare con N al posto di 36.


2013/5/8 Gabriel Battaglia (Kriyaban) iz4...@libero.it

 Oggi impero in lista...
 Mi è venuta questa curiosità.
 Se converto il mio nome con una base 36 ottengo:
 n = gabriel
 int(n, 36)
 35452938477L

 Il che è un affascinante quanto ingenuo metodo per criptare una stringa...
 Facciamo che consideriamo solo la parte affascinante della faccenda, ma
 poi, da
 35452938477L, come ci torno a gabriel?
 Qual è la funzione che converte un intero da una base all'altra, cioè da
 36 a 10 in questo caso?
 G.
 __**_
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/**mailman/listinfo/pythonhttp://lists.python.it/mailman/listinfo/python




-- 
*Federico Figus*
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Conversioni su interi.

2013-05-08 Per discussione Gabriel Battaglia (Kriyaban)

Ciao Federico.
Che bello il tuo codice, ha qualcosa che non avevo mai incontrato prima.
Ti va se ne parliamo un attimo?

***CODE HERE***
import string
# E... fin qui... :)

base = string.printable[:36]
# Potevo arrivarci ma ho guardato l'help di string.prontable... :) Vero, Python 
ha proprio le batterie incluse è?

n = int(gabriel, 36)
# Questa riga l'ho tolta perchè voglio che n venga ricevuta come parametro 
dalla funzione che mi sto scrivendo.

out = []
# Ok, qui prepariamo la lista contenitore.

while n:
   # Significa finchè n è vera, cioè diversa da 0, giusto?

   out.append(n%36)
   # Qui aggiungiamo il resto della divisione fra n e 36 che sarà sempre un 
intero compreso fra 0 e 35

   n = n/36
   # ok

print ''.join(base[l] for l in out)[::-1]
# Qui arriva la sorpresa... un ciclo for annidato dentro ad un...??
# me la spieghi meglio?

Io non sarei mai riuscito a produrre un tale concentrato di efficienza ed 
eleganza messe assieme.
G. 


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


Re: [Python] Conversioni su interi.

2013-05-08 Per discussione Federico Figus
Ciao,

grazie per i complimenti ma è facile scrivere codice così leggero grazie
alla sintassi di python

print ''.join(base[l] for l in out)[::-1]

praticamente l'espressione base[l] for l in out non fa altro che creare un
generatore che itera sui moduli calcolati precedentemente, e poi prende
ogni l-esimo valore nella stringa base, questo generatore viene passato al
join che concatena tutti i valori resi dal generatore con la stringa vuota
che chiama il join, a questo punto hai la stringa che cercavi ma al
contrario, quindi usi il terzo campo dello slice  [inizio:fine:passo] per
creare una sequenza della stringa col passa al contrario.
Spero di essere stato chiaro, è la prima volta che partecipo a questa
mailing list :D
Comunque puoi trovare tutto sull documentazione in queste pagine
http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
http://docs.python.org/2/reference/expressions.html#calls

P.S. ci sono altri modi per farlo (anche in una riga sola) ma lascio a te
il divertimento ;)




2013/5/8 Gabriel Battaglia (Kriyaban) iz4...@libero.it

 Ciao Federico.
 Che bello il tuo codice, ha qualcosa che non avevo mai incontrato prima.
 Ti va se ne parliamo un attimo?

 ***CODE HERE***
 import string
 # E... fin qui... :)

 base = string.printable[:36]
 # Potevo arrivarci ma ho guardato l'help di string.prontable... :) Vero,
 Python ha proprio le batterie incluse è?


 n = int(gabriel, 36)
 # Questa riga l'ho tolta perchè voglio che n venga ricevuta come parametro
 dalla funzione che mi sto scrivendo.

 out = []
 # Ok, qui prepariamo la lista contenitore.

 while n:
# Significa finchè n è vera, cioè diversa da 0, giusto?

out.append(n%36)
# Qui aggiungiamo il resto della divisione fra n e 36 che sarà sempre
 un intero compreso fra 0 e 35

n = n/36
# ok


 print ''.join(base[l] for l in out)[::-1]
 # Qui arriva la sorpresa... un ciclo for annidato dentro ad un...??
 # me la spieghi meglio?

 Io non sarei mai riuscito a produrre un tale concentrato di efficienza ed
 eleganza messe assieme.

 G.
 __**_
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/**mailman/listinfo/pythonhttp://lists.python.it/mailman/listinfo/python




-- 
*Federico Figus*
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python