sábado 29 de mayo de 2010

Problema de algoritmia, en Python

Hola. En este post vamos a ver la resolución de un problema de Algoritmia típico, resuelto en Python. El enunciado me lo ha enviado un navegante, entusiasta de Python, como yo. Es el siguiente:


A partir de una cadena introducida por el usuario, se trata de pintar una caja de texto con la propia cadena, utilizando espacios en blanco. La complejidad reside en cómo pintar las cadenas reversas, esto es, escritas al revés.

Hay varias formas de resolver el problema. Con listas parece obvio, aunque yo lo he resuelto de la manera más fácil para mí, claro.

Este es el código:

# -*- coding: cp1252 -*-
# Ángel Luis García García
# Algoritmia

while True:
# Introducimos palabra.
cadena = raw_input('Introduce palabra: ')
# Si no escribimos nada, salimos.
if len(cadena) == 0: break
# Longitud de la cadena.
long_cadena = len(cadena)
# Espacio en blanco.
blanco = " " * (long_cadena - 2)
# Pintamos la cadena de arriba.
print cadena
# Pintamos las columnas.
puntero = long_cadena - 1
for i in range(1,long_cadena):
puntero -= 1
if i == long_cadena - 1:
# Pintamos la cadena de abajo.
a = list(cadena)
a.reverse()
cadena_down = ""
for i in a: cadena_down = cadena_down + i
print cadena_down
else:
# Columnas
print cadena[i] + blanco + cadena[puntero]

Y ejemplos de la solución:


Si crees tener una solución alternativa puedes enviarla, si lo deseas, a este blog, y la publicaré, para de esta manera aprender todos y ver que hay varias formas de dar solución a un mismo problema.

Saludos.

2 comentarios:

  1. while True:
    # Introducimos palabra.
    cadena = raw_input('Introduce palabra: ')
    # Si no escribimos nada, salimos.
    if len(cadena) == 0: break
    # Longitud de la cadena.
    long_cadena = len(cadena)
    # Espacio en blanco.
    blanco = " " * (long_cadena - 2)
    # Pintamos la cadena de arriba.
    print cadena

    # AQUÍ VIENE LA ALTERNATIVA

    # Pintamos columnas
    for i in range(1,long_cadena - 1):
    print cadena[i] + blanco + cadena[-i-1]
    # Pintamos la cadena de abajo.
    print cadena[::-1]

    ResponderSuprimir