Corrección de Python

Resuelto
Arcadi -  
mamiemando Mensajes publicados 33537 Fecha de registro   Estado Modérateur Última intervención   -
Bonjour,

Je bloque en un ejercicio de pix. Tengo que corregir el siguiente código para que funcione:

El único problema que he identificado con mi nivel mini es que falta el comando print al final.

indice = "vbpewfdwaz" letras = "}_v^yk[~jo" i = 0 tutu = '' while i < len(indice): if ord(indice[i]) < 109: tutu=tutu+chr(ord(lettres[i])+10) else: tutu=tutu+chr(ord(lettres[i])-10) i += 1 print(tutu)


Si alguien pudiera ayudarme sería genial para que pueda entender.

Arcadi

2 réponses

mamiemando Mensajes publicados 33537 Fecha de registro   Estado Modérateur Última intervención   7 927
 
Hola,

Dado que
i
no se incrementa, el bucle
while
se repetirá indefinidamente.

Luego, te recomiendo que escribas en plural tus iterables y en singular tus iteradores, por ejemplo:

for element in elements: ...


Además, usar índices en este caso no es muy pythonic. A diferencia del lenguaje C, puedes iterar directamente sobre los caracteres de una cadena. Esto también te evitará olvidar incrementar
i
:-)

Si necesitas iterar sobre dos iterables simultáneamente (que es el caso aquí, ya que deseas avanzar en
indices
y
lettres
al mismo tiempo), puedes usar las primitivas proporcionadas por
itertools
o nativas en Python: en este caso, la que se adapta a tu situación es
zip
.

En tu caso, podrías haber escrito algo así:

indices = "vbpewfdwaz" letras = "}_v^yk[~jo" tutu = "" for (indice, letra) in zip(indices, letras): if ord(indice) < 109: tutu = tutu + chr(ord(letra) + 10) else: tutu = tutu + chr(ord(letra) - 10) 


El programa puede escribirse de manera aún más concisa utilizando la función
str.join
:

indices = "vbpewfdwaz" letras = "}_v^yk[~jo" tutu = "".join( chr(ord(letra) + 10) if ord(indice) < 109 else chr(ord(letra) - 10) for (indice, letra) in zip(indices, letras) )


Buena suerte
1
Belinda
 

Hola, tengo exactamente el mismo problema, así que copié la respuesta pero no funciona. También intenté print "tutu", quitar las "S" de "lettres", etc., pero absolutamente nada funciona, en

repl.it cuando leo mi programación obtengo python3 main.py

¡AYUDA!

0
mamiemando Mensajes publicados 33537 Fecha de registro   Estado Modérateur Última intervención   7 927 > Belinda
 

Hola Belinda,

  • El código de arriba funciona, acabo de verificarlo. Puedes hacer print(tutu) y ver que tut contiene bien la cadena de caracteres "silhouette".
  • Si el problema persiste, por favor abre un nuevo hilo de discusión, reportando el código que ejecutaste y copiando y pegando el mensaje de error exacto.
  • En general, evita escribir en un hilo de discusión resuelto. Si es necesario, proporciona el enlace a la discusión a la que te refieres.

Buena suerte

2
Arcadi
 
Hola Mamiemando,

Muchas gracias por su respuesta. Voy a estudiar todo no solo para hacer, sino sobre todo para entender. Su respuesta completa me ayuda mucho.

En cuanto a las reglas éticas de redacción, esta parte es realmente la que me fue proporcionada.

Atentamente,

Arcadi
0
mamiemando Mensajes publicados 33537 Fecha de registro   Estado Modérateur Última intervención   7 927
 
Gracias por tu respuesta. En cuanto a los consejos de programación, lo verás con el tiempo :-) También puedes consultar la norma PEP-8 si deseas perfeccionarte.

¡Que te vaya bien!
0