[Python] Codifica di Hamming
Pietro Battiston
toobaz a email.it
Lun 26 Maggio 2008 09:41:12 CEST
Mr.SpOOn ha scritto:
> Poi ho provato questo:
>
>
>>>> for j, s in enumerate(listaParole):
>>>>
> ... for i in xrange(len(s)):
> ... if isPower(i+1,2):
> ... s = "%s%s%s" % (s[0:i], "H", s[i:])
> ... listaParole[j] = s
>
> Che però con una stringa lunga 5 caratteri, ad esempio "12345", non
> funziona, infatti viene:
>
> 'HH1HH2345', mentre quella corretta sarebbe HH1H234H5
>
> L'errore dipende dal fatto che io sto modificando la lista sulla quale itero.
> Stavo pensando quindi di copiare la stringa in una lista, tipo l =
> list("12345"), capovolgerla e prendere gli elementi dalla lista con
> una pop() senza alterare la stringa.
>
> In questo modo inizio a costruire la nuova stringa in maniera
> corretta, ma rimane il problema che l'iterazione finisce prima di aver
> "poppato" tutti gli elementi.
>
Secondo me la soluzione più semplice è affidarsi ad un while; questo mi
sembra funzionare:
l=list(parola)
l.reverse()
s=""
cont=""
while l:
if isPower(i+1,2):
s = s+"H"
else:
s = s+ l.pop()
cont+=1
> Qualche suggerimento?
> Spero di aver esposto il problema in maniera chiara.
>
L'unica cosa non chiara è se viene considerato un output valido una
parola di lunghezza (2**n)-1, (ad esempio 7, se len(s)==4), o se
dovrebbe terminare con 'H'.
ciao
Pietro
Maggiori informazioni sulla lista
Python