Corrección de Python

Resuelto
Arcadi -  
mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Ú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 respuestas

  1. mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 940
     
    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
    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
      1. mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 940 > 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
  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
    1. mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 940
       
      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