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!
Esos son 9 niveles? Alcanza hacerlo con asteriscos o hay que utilizar alguna librería gráfica?
Saludos
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.
Buenas muchachos, he hecho el reto! :D publico a ver que tul,
'''
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..
Ya no queria ser yo el primero, y visto que n1co ya posteo el suyo, ahora me toca a mi.
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!
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
Si, es verdad, si le paso por ejemplo 10, se traga una linea, que la muestra en blanco.
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
Yo tengo esto :P
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
Cita de: Novlucker en 2 Diciembre 2010, 02:14 AM
Yo tengo esto :P
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
Si, te copié la frase completa, no iba a estar pensando otra :xD
Citarmuy bueno, ya me voy a dormir mañana lo pruebo :D
Y yo tengo que irme a programar otra cosa :¬¬
Saludos
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.
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
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!
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