Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: Dnk! en 1 Diciembre 2010, 23:34 pm



Título: Mini Reto Python. Dibujar rombo ~
Publicado por: Dnk! en 1 Diciembre 2010, 23:34 pm
Se debe realizar una funcion en python el cual dibuje un rombo de asteriscos "*". Se le debe pasar por parametro el numero de lineas.

Debiera quedar mas o menos asi:
(http://lh6.ggpht.com/_pVO4-M-gWXw/TAk4cbsLQ5I/AAAAAAAAAJs/UXCh-CzLxmg/image_thumb%5B2%5D.png?imgmax=800)

Espero se animen. xDnk!


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: Novlucker en 1 Diciembre 2010, 23:41 pm
Esos son 9 niveles? Alcanza hacerlo con asteriscos o hay que utilizar alguna librería gráfica?

Saludos


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: Dnk! en 1 Diciembre 2010, 23:43 pm
Si, son nueve niveles, pero recuerda el numero de lineas se pasa por parametro, asi que no importa, mientras graficamente ser parezca a la imagen. Unicamente con el uso de asteriscos.

Saludos.


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: n1co en 2 Diciembre 2010, 00:46 am
Buenas muchachos, he hecho el reto! :D publico a ver que tul,
Código
  1. '''
  2. Created on 01/12/2010
  3.  
  4. @author: nicolas
  5. '''
  6.  
  7. import sys
  8.  
  9. def es_par(numero):
  10.    return (numero % 2 == 0)
  11.  
  12. def dibujar_rombo(lineas):
  13.    lineas = int(lineas)
  14.    if es_par(lineas):
  15.        print 'El numero de lineas es par, no puedo escribir un rombo perfecto'
  16.    else:
  17.        espacios = int(lineas / 2)        
  18.        disminuyo = False
  19.        cantidad = 1
  20.        str = ''
  21.        for i in xrange(lineas):
  22.            for n in xrange(espacios):
  23.                str += ' '                
  24.            for n in xrange(cantidad):
  25.                str += '*'
  26.            print str
  27.            if len(str) == lineas:
  28.                disminuyo = True
  29.            if disminuyo:
  30.                cantidad -= 2
  31.                espacios += 1
  32.            else:
  33.                cantidad += 2
  34.                espacios -= 1
  35.            str = ''
  36.  
  37. if __name__ == '__main__':
  38.    dibujar_rombo(sys.argv[1])
  39.    #dibujar_rombo(9)        

Saludos..


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: Dnk! en 2 Diciembre 2010, 01:03 am
Ya no queria ser yo el primero, y visto que n1co ya posteo el suyo, ahora me toca a mi.

Código
  1.  
  2. def imprimirRombo(n):
  3.    n = n//2
  4.    for i in range(n,0,-1):
  5.        for j in range(n,(n-(i+1)),-1):
  6.            print '',
  7.        for k in range(i+1,n+1):
  8.            print '*',
  9.        print
  10.    for i in range(0,n):
  11.        for j in range(n,(n-(i+1)),-1):
  12.            print '',
  13.        for k in range(i+1,n+1):
  14.            print '*',
  15.        print
  16.  
  17. imprimirRombo(10)
  18.  
  19.  

Mientras me miro tu code n1co.
xDnk!


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: n1co en 2 Diciembre 2010, 01:08 am
mmm nuestros scripts hacen cosas difetenes, puesto que tu pusiste el ejercicio yo tal vez no comprendi del todo. Te daras cuenta que el numero que recibo por parametro es el numero de lineas del rombo, cosa que en el tuyo no se cumple segun lo que acabo de probar, y otra cosa es que para los numeros pares no escribo el rombo ya que no seria perfecto, pero al ver tu script veo que se podia hacer de otra forma y quedaba bien :D


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: Dnk! en 2 Diciembre 2010, 01:15 am
Si, es verdad, si le paso por ejemplo 10, se traga una linea, que la muestra en blanco.



Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: n1co en 2 Diciembre 2010, 01:19 am
y si le pasas un impar te lo hace en dos lineas menos pero bueno es otra forma de hacerlo, si te das cuenta en mi ejemplo el numero por parametro coincide tambien con el lado mas largo del rombo


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: Novlucker en 2 Diciembre 2010, 02:14 am
Yo tengo esto :P
Código
  1. def imprime(n):
  2.    if not n%2:
  3.        print 'El numero de lineas es par, no puedo escribir un rombo perfecto'
  4.    else:
  5.        l = [[' ' for x in range(n)] for z in range(n/2+1)]
  6.        for e in range(n):
  7.            for i in range(e,n-e):
  8.                l[e][i] = '*'
  9.        l = l[:0:-1]+l
  10.        for i in l:
  11.            print ' '.join(i)
  12.  
  13. imprime(11)

Saludos


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: n1co en 2 Diciembre 2010, 02:16 am
Yo tengo esto :P
Código
  1. def imprime(n):
  2.    if not n%2:
  3.        print 'El numero de lineas es par, no puedo escribir un rombo perfecto'
  4.    else:
  5.        l = [[' ' for x in range(n)] for z in range(n/2+1)]
  6.        for e in range(n):
  7.            for i in range(e,n-e):
  8.                l[e][i] = '*'
  9.        l = l[:0:-1]+l
  10.        for i in l:
  11.            print ''.join(i)
  12.  
  13. imprime(11)

Saludos

jajajaj hay una parte de ahi que me parece conocida...  :P
muy bueno, ya me voy a dormir mañana lo pruebo :D


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: Novlucker en 2 Diciembre 2010, 02:18 am
Si, te copié la frase completa, no iba a estar pensando otra :xD
Citar
muy bueno, ya me voy a dormir mañana lo pruebo :D
Y yo tengo que irme a programar otra cosa :¬¬

Saludos


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: Dnk! en 2 Diciembre 2010, 10:55 am
Yo directamente, me fui a dormir, sin avisar, que mal educado por mi parte. xD.
A lo largo del dia, mirare mi algoritmo, para que te pinte si o si, las lineas exactas.

Tambien decir, que yo vengo de lenguajes menos dinamicos cono c++, java, c# y siempre me han enseñado a que si no hay que usar listas (arreglos), no se utilizan.

Aqui es donde quiero que me abrais un poco la mente sobre python, es decir, que es mejor que es peor...etc.

Saludos.


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: Novlucker en 2 Diciembre 2010, 11:15 am
Para lo que pide realmente no es necesario utilizar listas, pero por mi parte lo había preferido para no repetir código, además de que me resultaba más legible. Y otro motivo es que en principio había hecho la función para que retornara la lista y luego desde fuera se imprimiera su contenido, pero finalmente he metido todo dentro de la función. Esto anterior era porque no me gusta tener una función con prints dentro porque pierde reusabilidad, pero esta claro que algunas funciones solo se crean para imprimir algo :xD

Saludos


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: Dnk! en 2 Diciembre 2010, 11:31 am
Comprendido. A todo esto veo que nadie mas va a participar en este MiniReto. Aun asi aqui esta el tema y bien recibido seran las demas propuestas.

Ahora toca esperar a un proximo reto  :P.

xDnk!


Título: Re: Mini Reto Python. Dibujar rombo ~
Publicado por: santiasecas en 6 Marzo 2013, 09:59 am
Hola, se que hace al menos 3 años que no se ha hablado en este tema, pero estoy aprendiendo sobre Python en este momento, y me topé con el Mini Reto y me motivó a romperme el coco con el ejercicio. Quería publicar mi resultado, un poco tosco supongo, pero funciona.
Por cierto, está escrito para Python 3.

Citar
import sys
print("Dibujemos un rombo, ¿cuántas lineas dibujamos?")
i = int(sys.stdin.readline())

while i%2 == 0:
    print("Solo números impares, por favor")
    i = int(sys.stdin.readline())
for x in range(1, i+1):
    m = int(((i-1)/2)+1)
    if x<m:
        print(((" ")*(m-x))+(("*")*(i-((m-x)*2))))
    elif x==m:
        print("*"*i)
    elif x>m:
        print(((" ")*(x-m))+(("*")*(i-((x-m)*2))))

sys.stdin.readline()


Espero opiniones, gracias por presentar estos retos.

Santi