Mini Reto Python. Dibujar rombo ~

Iniciado por Dnk!, 1 Diciembre 2010, 23:34 PM

0 Miembros y 1 Visitante están viendo este tema.

Dnk!

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:


Espero se animen. xDnk!




Comentar es agradecer.
Visita Mi Blob

Novlucker

Esos son 9 niveles? Alcanza hacerlo con asteriscos o hay que utilizar alguna librería gráfica?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Dnk!

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.




Comentar es agradecer.
Visita Mi Blob

n1co

Buenas muchachos, he hecho el reto! :D publico a ver que tul,
Código (python) [Seleccionar]
'''
Created on 01/12/2010

@author: nicolas
'''

import sys

def es_par(numero):
   return (numero % 2 == 0)

def dibujar_rombo(lineas):
   lineas = int(lineas)
   if es_par(lineas):
       print 'El numero de lineas es par, no puedo escribir un rombo perfecto'
   else:
       espacios = int(lineas / 2)        
       disminuyo = False
       cantidad = 1
       str = ''
       for i in xrange(lineas):
           for n in xrange(espacios):
               str += ' '                
           for n in xrange(cantidad):
               str += '*'
           print str
           if len(str) == lineas:
               disminuyo = True
           if disminuyo:
               cantidad -= 2
               espacios += 1
           else:
               cantidad += 2
               espacios -= 1
           str = ''
           
if __name__ == '__main__':
   dibujar_rombo(sys.argv[1])
   #dibujar_rombo(9)        


Saludos..

Dnk!

Ya no queria ser yo el primero, y visto que n1co ya posteo el suyo, ahora me toca a mi.

Código (python) [Seleccionar]


def imprimirRombo(n):
    n = n//2
    for i in range(n,0,-1):
        for j in range(n,(n-(i+1)),-1):
            print '',
        for k in range(i+1,n+1):
            print '*',
        print
    for i in range(0,n):
        for j in range(n,(n-(i+1)),-1):
            print '',
        for k in range(i+1,n+1):
            print '*',
        print

imprimirRombo(10)



Mientras me miro tu code n1co.
xDnk!




Comentar es agradecer.
Visita Mi Blob

n1co

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

Dnk!

Si, es verdad, si le paso por ejemplo 10, se traga una linea, que la muestra en blanco.





Comentar es agradecer.
Visita Mi Blob

n1co

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

Novlucker

#8
Yo tengo esto :P
Código (python) [Seleccionar]
def imprime(n):
   if not n%2:
       print 'El numero de lineas es par, no puedo escribir un rombo perfecto'
   else:
       l = [[' ' for x in range(n)] for z in range(n/2+1)]
       for e in range(n):
           for i in range(e,n-e):
               l[e][i] = '*'
       l = l[:0:-1]+l
       for i in l:
           print ' '.join(i)
       
imprime(11)


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

n1co

Cita de: Novlucker en  2 Diciembre 2010, 02:14 AM
Yo tengo esto :P
Código (python) [Seleccionar]
def imprime(n):
    if not n%2:
        print 'El numero de lineas es par, no puedo escribir un rombo perfecto'
    else:
        l = [[' ' for x in range(n)] for z in range(n/2+1)]
        for e in range(n):
            for i in range(e,n-e):
                l[e][i] = '*'
        l = l[:0:-1]+l
        for i in l:
            print ''.join(i)
       
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