2016-07-23 23 views
0

Ich habe Probleme mit der Formatierung der Pyramide. Ich habe versucht, das Format beim Drucken aus der Schleife zu verwenden, aber das schien nicht zu funktionieren und bricht nur das Programm. Was wären unterschiedliche Möglichkeiten, die Ausgabe zu formatieren? Das einzige Problem, das ich habe, ist, wenn ich 10 und höher drucke, wenn es zweistellig ist. Was wäre der beste Ansatz, um die Druckausgabe zu formatieren? Ich habe verschiedene Weise versucht, konnte aber nicht die Formatierung funktioniert innerhalb der Schleife von der Dokumentation https://docs.python.org/3.5/library/string.html#formatstringsWie druckt man die Formatierung in Python mit Zeichenketten?

Hier ist das Skript:

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 

Der Ausgang, wenn sein kleiner als 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 

Der Ausgang, wenn es 15 oder mehr:

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 

Wenn ich einen zusätzlichen Platz für 10 und höher reserviert habe, sieht hier mein outout so aus: (Die Punkte wurden verwendet, um von leeren Räumen zu unterscheiden, alles was ich tat, war ein " " Anführungszeichen am Anfang des Ausdrucks.

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 

Hier ist, was ich habe

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 = " ") 

hier durch Hinzufügen aditional Raum versucht zu ändern ist der ideale Ausgang von dem, was ich zu tun versuche:

          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 

Thank you!

Antwort

1

Die Dinge, für dieses Problem sind

  • Die Länge der größten Zahl zu betrachten.
  • Die Länge der aktuellen Nummer, die gedruckt wird.
  • Der Unterschied in den Längen.

Um Platz für alles, richtig, Sie gehen zusätzliche Leerzeichen nach den Zahlen mit weniger Ziffern drucken müssen (für die zusätzliche Ziffern in der größeren Zahl zu kompensieren).

Wenn Sie beispielsweise eine Zeile mit der Zahl 10 haben, müssen Sie zur Kompensation der zweiten Ziffer in der Zahl 10 zusätzliche Leerzeichen verwenden.

Diese Lösung funktioniert für mich.

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 
+0

Danke! Wenn Sie Zeit haben, weitere Erklärungen hinzuzufügen, wäre das großartig, denn das versuche ich mehr zu verstehen. Ich werde es versuchen, um es zu verstehen. – Dmitriy

+0

@Dmitriy, ich habe meine Antwort mit einer Erklärung aktualisiert. Ich hoffe, es hilft. – Paradoxinabox

+0

danke für die Erklärung. Eine Sache, die ich versuche zu verstehen, ist 'spaces =" "* (input_length + 1 - len (str (j)))' also, wenn ich richtig verstanden habe, wenn es zwei Ziffern gibt, was es macht ist '" "* (2 + 1 - 1) '? da das 'j' technisch auch 1 ist? Ich versuche zu verstehen, wie wir die Räume berechnen, die Logik dahinter. Vielen Dank! – Dmitriy

1

Werfen Sie einen Blick auf https://stackoverflow.com/a/13077777/6510412

ich denke, das könnte das sein, was Sie suchen. Ich hoffe, es hilft.

+0

Ich versuche, es mit meinem Code zu erreichen und anzuwenden, aber ich konnte die Formatierungsarbeit nicht bekommen, wenn ich 'code'format (" ", 4d)' code' oder andere Formate verwende breche das Programm. Ich versuche nur meinen zu reparieren. Vielen Dank! – Dmitriy

+0

Entschuldigung, ich wollte Sie auf diese Antwort hinweisen http://StackOverflow.com/a/13077777/6510412 Ich habe meine ursprüngliche Antwort aktualisiert. – Paradoxinabox

+0

Danke für den Link. Ich schaue mehr auf die Erklärung, da es schwer ist, dies zu erkennen, indem ich einfach den Code anschaue, den jemand geschrieben hat. Ich versuche herauszufinden und zu lernen, wie man Zeichenketten formatiert. – Dmitriy