[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