2017-02-27 3 views
0

Ich versuche, eine halbe Pyramide zu drucken, die auf der linken Seite in Python Sterne. Bisher ist dies mein CodeNummer halbe Pyramide Python

for i in range(1,12): 
    for j in range(12 - i): 
     print(" ", end = " ") 
    for j in range(1, i): 
     print(j, end = " ") 
    print("\n") 

und meine Ausgabe ist

    1 

        1 2 

       1 2 3 

       1 2 3 4 

      1 2 3 4 5 

      1 2 3 4 5 6 

     1 2 3 4 5 6 7 

     1 2 3 4 5 6 7 8 

    1 2 3 4 5 6 7 8 9 

    1 2 3 4 5 6 7 8 9 10 

Allerdings ist meine Ausgabe in umgekehrter Reihenfolge sein soll:

  1 

      2 1 

     3 2 1 

     4 3 2 1 

    5 4 3 2 1 

Wie kann ich dieser Wandel?

Antwort

1

Gerade die zweite Schleife rückwärts - die eine, die die tatsächlichen Zahlen druckt:

for j in range(i-1, 0, -1): 

Der letzte Parameter steuert den „Schritt“, oder wie viel die Variablenänderungen auf jeder Schleifeniteration. Ausgang:

   1 

       2 1 

      3 2 1 

      4 3 2 1 

     5 4 3 2 1 
     ... 
+0

so einfach, den Code bestätigen Sie gemacht haben: der Bereich i (12) - 1 bis 0 und geht in jeder Iteration um 1 zurück? – fijilemon12

+0

Rechts. Die Parameter sind Start, Stopp und Schritt. Die Schleife enthält den Stoppwert nicht. – Prune

+0

danke! schätzen Sie Ihre Hilfe – fijilemon12

1

Sie könnten nur den Bereich umkehren, die Sie als Zahlen auszudrucken

for i in range(1,12): 
    for j in range(12 - i): 
     print(" ", end = " ") 
    for j in reversed(range(1, i)): 
     print(j, end = " ") 
    print("\n") 
+0

so, wenn Sie schreiben 'für j in umgekehrt (Bereich (1, i)):' ist eine Methode umgekehrt oder? – fijilemon12

+0

[umgekehrt] (https://docs.python.org/3.3/library/functions.html#reversed) ist nur eine eingebaute freie Funktion, die eine Kopie der Eingabe zurückgibt, aber umgekehrt. Es gibt auch [.reverse] (https://docs.python.org/3/library/stdtypes.html#mutable-sequence-types), was eine Methode ist, die eine veränderbare Sequenz an Ort und Stelle umkehrt und 'None' zurückgibt. –

0

Das Problem ist in Ihrem zweiten for-Schleife, wie Sie 1-i sind Looping, Sie off bedeutet starten wobei 1 zuerst gedruckt wird und jede folgende Zahl bis (ohne) i.

Glücklicherweise können for-Schleifen in umgekehrter Reihenfolge gehen. Anstatt also:

for j in range(1, i)

könnten Sie schreiben:

for j in range((i-1), 0, -1)

Wo der erste Parameter bedeutet, wo die Schleife beginnt, der zweite ist, wo die Schleife beendet ist, und die dritte bedeutet wie groß unsere Sprünge sein werden, in diesem Fall negativ. Der Grund, warum wir bei i-1 beginnen und bei 0 enden, liegt daran, dass Schleifen exakt bei der ersten gegebenen Zahl beginnen und bis kurz vor der zweiten angegebenen Schleife durchlaufen, also in Ihrem gegebenen Code stoppt die Schleife kurz vor i, und so startet diese gerade vor i auch, obwohl Sie die -1 entfernen können, wenn Sie 12 in die Pyramide aufnehmen möchten.

1

Umkehren Sie den Bereich, indem Sie das dritte Argument hinzufügen (-1). Formatiere auch deine Zahlen, um 2 Stellen zu verwenden, also schiebt 10 nicht die letzte Zeile nach rechts. Schließlich sollte die letzten print wahrscheinlich \n nicht haben, denn das ist schon das letzte Zeichen von print Standard ist:

for i in range(1,12): 
    for j in range(12 - i): 
     print(" ", end = "") 
    for j in range(i-1, 0,-1): 
     print(str(j).rjust(2), end = "") 
    print()