2016-03-29 14 views
0

Ich kann nicht herausfinden, was mit meinem Abstand in Python los ist. Ich versuche, es zu bekommen, dies zu drucken:Abstand in Python Zeichenfolge

Two Vertical Lines, height=3; width=3: 
* * 
* * 
* * 

Two Vertical Lines, height=4; width=5: 
* * 
* * 
* * 
* * 

Two Vertical Lines, height=5; width=2: 
** 
** 
** 
** 
** 

aber mit diesem Code:

def two_vertical_lines (height, width): 
    for x in range (0, height): 
     if width > 2: 
      new_width = width - 2 
      mult2 = " " * new_width 
      print ("*",mult2,"*", "\n", end='') 
     else: 
      print ("**", "\n", end='') 
    return 

Aus irgendeinem Grund mein Programm zurückkehrt:

Two Vertical Lines, height=3; width=3: 
* * 
* * 
* * 

Two Vertical Lines, height=4; width=5: 
* * 
* * 
* * 
* * 

Two Vertical Lines, height=5; width=2: 
** 
** 
** 
** 
** 

(beachten Sie den Unterschied in Abstand/Breite zwischen den beiden vertikalen Linien, obwohl meine Variable new_width technisch 1 Platz sein sollte)

+0

Es ist nichts falsch mit Ihrem Code ... Was in meinem PyCharm angezeigt ist völlig in Ordnung ... vielleicht wollen Sie so, wie Sie sie drucken, um herauszufinden? – Ian

Antwort

3

standardmäßig schreiben, print() gibt seine Argumente mit einem einzigen '' (Leerzeichen) getrennt. Dies kann jedoch mit dem Parameter sep geändert werden. Verwenden Sie einfach sep='' wie unten:

def two_vertical_lines (height, width): 
    for x in range (0, height): 
     if width > 2: 
      new_width = width - 2 
      mult2 = " " * new_width 
      print ("*", mult2, "*", sep='') # <-- change 
     else: 
      print ("**", "\n", end='') 
    return 
2

Wenn Sie print verwenden, werden alle übergebenen Parameter mit einem Leerzeichen zwischen ihnen gedruckt.

>>> print('a', 'b') 
a b 

Um dies zu beheben, können Sie eine einzelne Zeichenfolge erstellen und drucken, wie diese

print ("*{}*\n".format(mult2), end='') 

In der Tat, statt explizit \n in der Zeichenfolge hinzufügen, können Sie print Funktion kümmern lassen es, wie diese

print ("*{}*".format(mult2)) 

könnte eine weitere Verbesserung sein, nicht wahr Sonderfall, width <= 2 Fälle, weil String-Multiplikation mit Null oder negative ganze Zahlen nur leere Strings führen.

>>> '*' * -1 
'' 
>>> '*' * 0 
'' 

So können Sie einfach

def two_vertical_lines(height, width): 
    for x in range(height): 
     print("*{}*".format(" " * (width - 2)))