01.
def
dist_ham(cad_1, cad_2):
02.
res
=
0
03.
indice
=
0
04.
if
len(cad_1) > len(cad_2):
05.
return
False
06.
for
car
in
cad_1:
07.
if
car !
=
cad_2[indice]:
08.
res
=
res
+
1
09.
indice
=
indice
+
1
10.
return
res
01.
def
dist_ham(cad_1, cad_2):
02.
res
=
0
03.
indice
=
0
04.
if
len(cad_1) !
=
len(cad_2):
05.
return
False
06.
for
car
in
cad_1:
07.
if
car !
=
cad_2[indice]:
08.
res
=
res
+
1
09.
indice
=
indice
+
1
10.
return
res
Nas aulas foi referido que num ciclo for as sequências podem percorridas por posição/índice ou por conteúdo. A opção depende do problema. No exemplo acima estão a ser usadas ambas! É evidente que temos que comparar caracteres e esse facto pode levar a pensar em percorrer as cadeias por conteúdo. Mas temos que comparar os caracteres de cada cadeia numa dada posição. E isso obriga a cada momento qual a posição dos caracteres que queremos comparar. Neste caso, é esta situação que deve prevalecer. Daí a nova versão:
01.
def
dist_ham(cad_1, cad_2):
02.
res
=
0
03.
04.
if
len(cad_1) !
=
len(cad_2):
05.
return
False
06.
for
indice
in
range(len(cad_1)):
07.
if
cad_1[indice] !
=
cad_2[indice]:
08.
res
=
res
+
1
09.
return
res
Conclusão maior: não é boa prática misturar duas formas de percorrer uma sequência. Mas se tal for mesmo necessário há um modo Pythoniano de o fazer recorrendo à função enumerate. Exemplo:
01.
>>> cadeia
=
'abcdef'
02.
>>>
for
indice, valor
in
enumerate(cadeia):
# <-- enumerate!!
03.
...
print
(
'indice %d:\tcaractere= %s'
%
(indice, valor))
04.
...
05.
indice
0
: caractere
=
a
06.
indice
1
: caractere
=
b
07.
indice
2
: caractere
=
c
08.
indice
3
: caractere
=
d
09.
indice
4
: caractere
=
e
10.
indice
5
: caractere
=
f
Sem comentários:
Enviar um comentário