2016-03-29 2 views
0

Impossible de comprendre ce qui se passe avec mon espacement en python. Je suis en train de le faire pour imprimer ceci:Espacement dans une chaîne python

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

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

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

mais avec ce 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 

Pour une raison quelconque, mon programme est de retour:

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

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

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

(notez la différence en espacement/largeur entre les deux lignes verticales, même si ma variable new_width devrait techniquement avoir 1 espace)

+0

Il n'y a rien de mal avec votre code ... Qu'affiche dans mon PyCharm est parfaitement bien ... peut-être que vous voulez comprendre la façon dont vous les imprimer? – Ian

Répondre

3

Par défaut, print() sorties ses arguments séparés par un seul '' (espace). Cependant, ceci peut être changé avec le paramètre sep. Il suffit d'utiliser sep='' comme ci-dessous:

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

Lorsque vous utilisez print, tous les paramètres qui lui sont passés seront imprimés avec un espace entre eux.

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

Pour résoudre ce problème, vous pouvez créer une seule chaîne et l'imprimer, comme celui-ci

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

En fait, au lieu d'ajouter explicitement \n dans la chaîne, vous pouvez laisser print fonction prendre soin de , comme ceci

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

Une autre amélioration pourrait être, vous ne avoir un cas particulier, width <= 2 cas, parce que la multiplication de chaîne avec des entiers nuls ou négatifs se traduira par des chaînes vides seulement.

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

Alors vous pouvez simplement écrire

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