Tengo problemas para formatear la pirámide. Intenté usar el formato al imprimir desde el bucle, pero eso no pareció funcionar y simplemente rompe el programa. Cuáles serían las diferentes formas de formatear la salida. El único problema que tengo es cuando estoy imprimiendo 10 y más cuando hay dos dígitos. ¿Cuál sería el mejor enfoque para formatear la salida de impresión? Probé una variedad de formas, pero no pude hacer que el formateo funcione dentro del ciclo de la documentación https://docs.python.org/3.5/library/string.html#formatstrings

Aquí está el guión:

userinput = int(input("Enter the number of lines: " ))   # User input of the total number of lines
userinput = userinput + 1   # adding a value of 1 additionally with the user input to make numbers even

for i in range(1, userinput):   # Loop through lines from 1 to userinput

    for j in range(userinput - i):  # printing spaces, 1 at a time from j = 1 to j = userinput - i 
        print(" ", end = " ")

    for j in range(i, 0, -1):  # printing number decreasing from the line number j to 1
        print(j, end = " ")

    for j in range(2,i + 1):   # Printing number increasing from 2 to line number j
        print(j, end = " ")
    print()
    j += 1  

La salida cuando es menos de 10

Enter the number of lines: 9
                  1 
                2 1 2 
              3 2 1 2 3 
            4 3 2 1 2 3 4 
          5 4 3 2 1 2 3 4 5 
        6 5 4 3 2 1 2 3 4 5 6 
      7 6 5 4 3 2 1 2 3 4 5 6 7 
    8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 
  9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 

La salida cuando es 15 o más:

Enter the number of lines: 15
                              1 
                            2 1 2 
                          3 2 1 2 3 
                        4 3 2 1 2 3 4 
                      5 4 3 2 1 2 3 4 5 
                    6 5 4 3 2 1 2 3 4 5 6 
                  7 6 5 4 3 2 1 2 3 4 5 6 7 
                8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 
              9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 
            10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 
          11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 
        12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 
      13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 
    14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 
  15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 

Cuando he reservado un espacio adicional para 10 en adelante, así es como se ve mi salida: (Los puntos se usaron para distinguir el espacio vacío, todo lo que hice fue agregar comillas " " al comienzo de la impresión.

Enter the number of lines: 12
. . . . . . . . . . . .   1                        
. . . . . . . . . . .   2  1  2                      
. . . . . . . . . .   3  2  1  2  3                    
. . . . . . . . .   4  3  2  1  2  3  4                  
. . . . . . . .   5  4  3  2  1  2  3  4  5                
. . . . . . .   6  5  4  3  2  1  2  3  4  5  6              
. . . . . .   7  6  5  4  3  2  1  2  3  4  5  6  7            
. . . . .   8  7  6  5  4  3  2  1  2  3  4  5  6  7  8          
. . . .   9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9        
. . .   10  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  10      
. .   11  10  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  10  11    
.   12  11  10  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  10  11  12  

Esto es lo que he intentado cambiar agregando espacio adicional

  for j in range(userinput - i):  # printing spaces, 1 at a time from j = 1 to j = userinput - i 
        print(".", end = " ")

    for j in range(i, 0, -1):  # printing number decreasing from the line number j to 1
        print(" ", j, end = "")

    for j in range(2,i + 1):   # Printing number increasing from 2 to line number j
        print(" ", j, end = "")

    for j in range(userinput - i):  # printing spaces, 1 at a time from j = 1 to j = userinput - i 
        print(" ", end = " ")

Aquí está el resultado ideal de lo que estoy tratando de lograr:

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

¡Gracias!

0
Dmitriy 23 jul. 2016 a las 04:46

2 respuestas

La mejor respuesta

Las cosas a considerar para este problema son

  • La longitud del número más grande.
  • La longitud del número actual que se está imprimiendo.
  • La diferencia de longitudes.

Para espaciar todo correctamente, necesitará imprimir espacios adicionales después de los números con menos dígitos (para compensar los dígitos adicionales en el número más grande).

Por ejemplo, si tiene una fila que contiene el número 10, para espaciar correctamente los otros números más pequeños, necesitará usar espacios adicionales para compensar ese segundo dígito en el número 10.

Esta solución me funciona.

userinput = int(input("Enter the number of lines: " ))
userinput = userinput + 1   

# Here, you can see I am storing the length of the largest number
input_length = len(str(userinput))

for i in range(1, userinput):

    # First the row is positioned as needed with the correct number of spaces
    spaces = " " * input_length
    for j in range(userinput - i): 
        print(spaces, end = " ")

    for j in range(i, 0, -1):
        # Now, the current numbers length is compared to the 
        # largest number's length, and the appropriate number
        # of spaces are appended after the number.
        spaces = " " * (input_length + 1 - len(str(j)))
        print(j, end = spaces)

    for j in range(2,i + 1):
        # The same is done here as in the previous loop.
        spaces = " " * (input_length + 1 - len(str(j)))
        print(j, end = spaces)
    print()
    j += 1  
1
Paradoxinabox 23 jul. 2016 a las 17:53

Echa un vistazo a https://stackoverflow.com/a/13077777/6510412

Creo que esto podría ser lo que estás buscando. Espero que ayude.

1
Community 23 may. 2017 a las 10:28