Playground - Dibuja un triangulo usando bucles
Clase 10 de 56 • 21 Días de Python
Contenido del curso
Clase 10 de 56 • 21 Días de Python
Contenido del curso
Orlando Sánchez
Misael Gomez
Luis Guzmán
Salomon Chambi
Fabián Manrique
Juan Diego
Cecilia Estephany Castellon Heredia
Nicolás Morales Samaniego
Juan Diego
Juan Rossano
Jeyson David Vargas Crespo
Owen Enríquez
Mario González
Ulises Serrano Pérez
Mario González
Carlos Valenzuela Ramírez
Fabián Manrique
Eduardo Peña Ramos
Jordan Anderson Huayhua Morales
David Esteban Giraldo Duque
iecgerman .
Humberto Cruz
Fernando Andres Beltran Leon
Alejandro Anaya
Josué Alexander Alarcón López
Josué Alexander Alarcón López
David Esteban Giraldo Duque
Gustavo Larco
Duban Andres Guzman Higuita
Jairo Leonardo Olivera Sawka
Erick Infante
Diego Jimenez
Julio Cardenas
Eduardo Peña Ramos
Robert Yesid Barrios Acendra
Nicolas Alpargatero
Linda Atenea Mejía Usme
def print_triangle(size, character): triangle = '' for i in range(size): triangle += " " * (size - i - 1) triangle += character + character * (2 * i) if i != size - 1: triangle += "\n" return triangle
comparto lo que pasa con las principales líneas de código
def printTriangle(size, character): triangle = "" for i in range(size): spaces = " " * (size - i - 1) //espacios stars = character * (2 * i + 1) //estrellas triangle += spaces + stars + "\n" //fusión return triangle # Ejemplo 1 print(printTriangle(3, "*")) # Ejemplo 2 print(printTriangle(6, "$"))
size = 4 character = "*" # Primera iteración del bucle (i = 0) spaces = " " * (4 - 0 - 1) # spaces = " " * 3 = " " stars = "*" * (2 * 0 + 1) # stars = "*" * 1 = "*" triangle += " " + "*" + "\\n" # Segunda iteración del bucle (i = 1) spaces = " " * (4 - 1 - 1) # spaces = " " * 2 = " " stars = "*" * (2 * 1 + 1) # stars = "*" * 3 = "***" triangle += " " + "***" + "\\n" # Tercera iteración del bucle (i = 2) spaces = " " * (4 - 2 - 1) # spaces = " " * 1 = " " stars = "*" * (2 * 2 + 1) # stars = "*" * 5 = "*****" triangle += " " + "*****" + "\\n" # Cuarta iteración del bucle (i = 3) spaces = " " * (4 - 3 - 1) # spaces = " " * 0 = "" stars = "*" * (2 * 3 + 1) # stars = "*" * 7 = "*******" triangle += "" + "*******" + "\\n" # Triángulo completo # (los espacios se han añadido para alinear la explicación) " *" " ***" " *****" "*******"
lo único que haría falta para que quede tal cual el enenciado sería quitar el ultimo salto de línea \n y para ello en el return debería quedar de la siguiente manera:
return triangle.rstrip()
lo que hace el metodo rstrip() es eliminar los espacios al final de un string.
def print_triangle(size, char): for s in range(size): print(' '*(size-s-1) + char*(2*s+1)) def print_triangle(size, char): tri = '' for s in range(size): tri += ' ' * (size-s-1) tri += char * (2*s+1) if s < size: tri += '\n' return tri
¿Sabes por que la primera no te sirve? porque el ejercicio lo debes tener en una sola variable, la guia lo dice.
yo tambien lo hice de una manera distinta y me sale como mal. Así que lo importante será mirar la solucion y ver si lógicamente lo nuestro tambien es válido. Toca a manera de autoevaluación
MI SOLUCION SIN DUDA FUE LA MAS CORTA CASI NI TIENE CARACTERETES
Como en otros casos similares, en VScode si funcionó en playground no considera los caracteres de espacio y por limitantes de recursos(tiempo) no le dedico un poco más. De hecho tuve que adelantarme con algunos métodos pero aún así no quedo tan bién.
Igual y si eventualmente mostraran como una introducción al sistema playground para entender como funciona, sería interesante por fines didácticos.
Si me pasó similar. Lo immportante es quedarse con la conciencia tranquila de saberlo hacer
Escribi la solucion y el test daba error. Lo ejecute local y veia bien pero seguia dando error. Al final termine viendo la solucion porque no entendia el motivo y localmente compare el resultado de mi funcion con la que sugeria el playground y me daba que estaban OK. Despues de revisar ambos encontre que, mas alla de diferencias logicas como algun nombre de variable, en range utilizado y la forma de completar los espacios, la variable que yo devolvia se llamaba triangulo y la de la funcion resuelta era triangle. Cambie el nombre de mi variable y paso los test correctamente. Considero que es un error grave ya que el recordatorio especifica eliminar el el ultimo "\n" y retornar todo en una variable sin definir su nombre y no creo que un test deba depender del nombre de la variable ademas del resultado.
Realmente no entiendo como hacer este ejercicio, me tocó ver la solución pero realmente no lo entendí.
Agradecería si alguien me explicara la solución.
Muchas gracias.
Hola, Jeyson. Hay diferentes respuestas, pero me imagino que te refieres a la solución de Platzi. El valor que debemos retornar debe ser una variable, por lo que se crea la variable 'triangle' de tipo String
triangle = "" #Cadena String vacía.
Después se recorrerá el código la cantidad de tamaña (size) recibido empezando del 1
for i in range(1, size+1) #También pudo haber sido de 0 a size
Para centrar el primer símbolo se pondrán la misma cantidad de espacios que el tamaño de la pirámide - 1, siendo que si la altura es 3, tendrá 2 espacios; si fuera 6 tendría 5.
space = " " * (size-1) #Multiplica los espacios por el tamaño -1
Es el turno de colocar los símbolos, por lo que crea el carácter, dos veces - 1 la cantidad de vueltas (niveles) que haya dado. Por lo que en la primera vuelta i=1, así que 2x1=2 -1=1; la segunda vuelta quedaría: i=2, así que 2x2=4 -1=3 y así consecutivamente.
line = character * (2*i - 1) #
Le asignamos a la variable 'triangle' el valor de los espacios y caracteres, además de que para que no se amontone todo en una sola línea de impresión, haremos salto de línea si 'i' no ha terminado de recorrer todo.
if i == size: triangle += spaces + line else: triangle += spaces + line + "\n"
Finalmente, retornamos la variable con la pirámide como su valor.
return triangle
Espero que haya quedado claro. Saludos ✌️
++DESPUES DE MUCHAS HORAS SIN ENTENDER EL ERROR INTENTE CON LA SOLUCION QUE ELLOS DAN Y TAMBIEN SALE ERROR ARREGLEN POR FAVOR++
¡Creo que tiene que ver con el playground! una vez que te sale error tienes que recargar la página.
GACIAS ULISES SERRANO ERA ESO UNA VEZ QUE SALE EL PRIMER ERROR HAY QUE REINICIAR LA PAGINA PARA QUE DE BIEN :D
https://static.platzi.com/media/user_upload/Escudo_anti_spoiler-4a27dbc9-e3b4-44f5-995e-b7f8a7666e59-507f4c1f-1ac3-4ce4-ba99-b7382a1c1ae0.jpg Raro me funciona en local pero no en aqui
def print_triangle(size, character): for i in range(size): print(" " * (size - i -1) + character * (2*i+1)) print_triangle(5,"*")
debes tenerlo en una sola variable por eso te da error, no generar linea por linea
Debes retornarlo en una variable, no imprimirlo. Saludos.
Yo no lo le voy a colocar escudo porque la consola del reto no lo acepta pero en Colab sí :
def print_triangle(size, character): # Tu código aquí 👈 for i in range(1,size): print(" "*(size-i-1) + character*(2*i-1)) print_triangle(6,"*")
Parece que no acepta la consola imprimir espacios juntos y que no utilices el salto de línea \n.
El problema es que tu función no está retornando nada, solo imprime en consola en cada iteración. Por eso los test no te pasan. Debes ir guardando lo que resulta de cada iteración en una variable para retornarlo al final del ciclo.
Nada que ver la forma en que viene en la solución del reto jajaja, pero me fuincionó, "Todos los caminos llegan a Roma"
# 09 - Dibuja un triangulo usando bucles def print_triangle(size, character): #size = 5 # Número de líneas a imprimir #character = "$" # Caracter a imprimir #i = 0 # contador # Imprime los espacios en blanco for i in range (size): print(" " * (size -i -1), end="") # (5 - 0 -1 = 4) # (5 - 1 -1 = 3) # Imprime los simboles que forman el pinito print(character * (2 * i + 1)) # (2 * 0 + 1) = 1 # (2 * 1 + 1) = 3 print_triangle(5,"$") # EN EL FOR NO SE PONE "i += 1"
Como el playground de platzi no reconoce los espacios entonces cambie los espacios por "_" entonces así se ve en el playground de platzi:
Esta solución la realice en otros editores, y fue correcta la respuesta ... en fin será el siguiente reto
def print_triangle(size, character): salida="" for x in range (size): salida+=" "*(size-x) salida+= character+(character*2*x) print (salida + "\n") salida="" pass print_triangle(10,"$")
🛡️🛡️Escudo anti-spoilers🛡️🛡️
Mi solucion:
def print_triangle(size, character): space = size -1 symbol = 1 string = '' for line in range(1, size + 1): if symbol == 1: string = (" " * space) + (f"{character}" * symbol) + "\n" else: string = string + (" " * space) + (f"{character}" * (symbol)) if line < size: string = string+ "\n" space = space - 1 symbol = symbol + 2 return string
Leyendo comentarios de los compañeros vi que hay muchos inconvenientes, igualmente es mi caso, con el mismo código implementado en el playground lo intente en VS code y allí me funciono sin problema, me gustaría si me podrían apoyar a saber a que se debe el inconveniente, gracias.
Adicional en los errores indica que deberían ser 3 triángulos pero en las instrucciones solicitan solo 2, uno de "*" y uno de "$".
El problema es que tu función no está retornando nada, solo imprime en consola en cada iteración. Por eso los test no te pasan. Debes ir guardando lo que resulta de cada iteración en una variable para retornarlo al final del ciclo.
profe por que esta solucion no es valida ?
size = int(input("How many layers you want ?")) char = input("what character ?") def piramide(size, char): for i in range(size -1): espacios = (size - 1) - i caracteres = (2 * i) - 1 fila = (" " * espacios) + (char * caracteres) print(fila) piramide(size, char)
# Esta es mi solución. def print_triangle(size, character): lines = [] # Iteramos desde 1 hasta size (incluido) for i in range(1, size + 1): # 1. Calcular espacios: (Total - fila actual) spaces = " " * (size - i) # 2. Calcular caracteres: (2 * fila actual - 1) chars = character * (2 * i - 1) # 3. Guardar la línea completa en la lista lines.append(spaces + chars) # 4. Unir todo con saltos de línea. # .join() pone el separador ENTRE elementos, nunca al final del último. return "\n".join(lines) # Prueba del ejemplo print(print_triangle(5, "$"))
Yo intenté hacerlo sin usar el salto de línea y me salió esto:
def print_triangle(size, character):
placeholder = " "
mem = 0
for i in range(size+1):
print(placeholder*(size-i), character*(i+mem))
mem = i
No pasa los test, pero en la práctica dibuja el arbol de todas formas
def printTriangle(size:int, character:str): for i in range(size): print(((i*character)+character+(i*character)).center(size*2))
Hola, intente solucionar, pero me sale error. Me ayudarian a enteder porque es el error.
def print_triangle(size, character): letras = character for i in range(1,size+1): space = ' ' * (size-i) print(f'{space} {letras}') letras += character * 2 print_triangle(5,"8")
Que error te sale? corri tu codigo y me dio esto:
8 888 88888 8888888 888888888
debes retornar todo esto en una variable.
No quiero ver las soluciones de los demás, hice estas dos implementaciones y no pasan los asserts:
def print_triangle(size, character): # Tu código aquí 👈 car = "" ancho_total = int((size * 2 - 2)/2) #print(ancho_total) lista_recorrido = [i*2 + 1 for i in range(size)] for i in lista_recorrido: if i != lista_recorrido[-1]: car += " "ancho_total + characteri + " "*ancho_total + "\n" ancho_total -= 1 else: car += " "ancho_total + characteri + " "*ancho_total break return car
def print_triangle(size, character): # Tu código aquí 👈 car = "" ancho_total = size * 2 - 1 lista_recorrido = [i2 + 1 for i in range(size)] for i in lista_recorrido: if i == lista_recorrido[-1]: car += str(characteri).center(ancho_total, " ") else: car += str(character*i).center(ancho_total, " ") + "\n" return car
utiliza la opcion de codigo </> y le colocar python en la parte de arriba asi:
En el caso de mi codigo, le tuve que eliminar los espacios (" ") que se enciuentran a la derecha de character y antes del \n , y reemplazarlos por un caracter vacío ("")