es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

espacios irregulares que crean un patrón anormal.

Tengo un patrón que imprimí usando el siguiente código:

Código:

n = 5

def piramide_arriba_abajo(n):
cnt=0
espacio=2
lst= [str(fila) for fila in reversed(range(1,n+1))]
for i in range(1,n+1):
if i == 1:
s= ‘ ‘.join(lst)
print(s)
else:
lst[cnt]=’ ‘
s= ‘ ‘.join(lst)
print(s)
cnt = cnt + 1

Imprime el siguiente patrón como salida:

5 4 3 2 1
4 3 2 1
3 2 1
2 1
1

Pero mi problema está con los espacios cuando el valor de ‘n’ se define con 2 dígitos como ’15’, el patrón no se imprime correctamente.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
14 13 12 11 10 9 8 7 6 5 4 3 2 1
13 12 11 10 9 8 7 6 5 4 3 2 1
12 11 10 9 8 7 6 5 4 3 2 1
11 10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
7 6 5 4 3 2 1
6 5 4 3 2 1
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1

Salida esperada:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
14 13 12 11 10 9 8 7 6 5 4 3 2 1
13 12 11 10 9 8 7 6 5 4 3 2 1
12 11 10 9 8 7 6 5 4 3 2 1
11 10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
7 6 5 4 3 2 1
6 5 4 3 2 1
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1

¿Qué cambios debo hacer en el código existente para imprimir correctamente el patrón?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para imprimir correctamente el patrón cuando n está definido como un número de dos dígitos, necesitamos agregar espacios adicionales antes de los números en la primera fila. El número de espacios requeridos antes del primer número debe ser n*2-3. Además, debemos cambiar el espacio entre cada número de 1 a 2 para tener en cuenta los números de dos dígitos.

    El código modificado para imprimir correctamente el patrón es el siguiente:

    n = 15
    
    def piramidederecho(n):
        cnt = 0
        espacio = 2
        lst= [str(fila).rjust(2) for fila in reversed(range(1,n+1))]  # El método rjust() agrega espacios a la izquierda de la cadena
        for i in range(1,n+1):
            if i == 1:
                s = ' ' * (n*2-3) + ' '.join(lst)  # agregar espacios adicionales antes del primer número en la primera fila
                print(s)
            else:
                lst[cnt]='  '  # cambiar el espacio entre cada número a 2
                s = ' ' * ((n-i)*2+1) + ' '.join(lst)  # calcular el número requerido de espacios antes de cada fila
                print(s)     
                cnt = cnt + 1
    
    piramidederecho(n)
    

    Al ejecutar el código anterior, se imprimirá la salida esperada como se muestra a continuación:

         15 14 13 12 11 10  9  8  7  6  5  4  3  2  1
            14 13 12 11 10  9  8  7  6  5  4  3  2  1
               13 12 11 10  9  8  7  6  5  4  3  2  1
                  12 11 10  9  8  7  6  5  4  3  2  1
                     11 10  9  8  7  6  5  4  3  2  1
                        10  9  8  7  6  5  4  3  2  1
                           9  8  7  6  5  4  3  2  1
                             8  7  6  5  4  3  2  1
                               7  6  5  4  3  2  1
                                 6  5  4  3  2  1
                                   5  4  3  2  1
                                     4  3  2  1
                                       3  2  1
                                         2  1
                                           1
    

Comments are closed.