2016-03-29 4 views
0

Pythonのスペースで何が起こっているのか分からないようです。違いに気づく(Pythonの文字列でのスペース

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

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

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

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

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

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

が、このコードで:何らかの理由で

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 

、私のプログラムが戻っている私はそれがこれを印刷するには取得しようとしています私の変数new_widthは技術的には1スペースでなければならないが、2つの垂直線の間隔/幅で)

+0

何私のPyCharmに表示されていることは完全に罰金ですあなたのコードと間違って何も...ありません...多分あなたは、あなたがそれらを印刷方法を把握したいですか? – Ian

答えて

3

を書くことができます。ただし、これはsepパラメータで変更できます。ただ、以下のようなsep=''を使用します。

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

printを使用すると、それに渡されたすべてのパラメータは、それらの間にスペースを入れて印刷されます。

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

この問題を解決するには、単一の文字列を作成することができ、明示的に文字列に\nを追加するのではなく、実際にはこの

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

のように、それを印刷し、あなたはprint関数がの世話をさせることができますそれは、この

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

のような別の改良は、可能性がありますはしないでください特別な場合はwidth <= 2の場合があります。なぜなら、ゼロまたは負の整数による文字列の乗算は空の文字列になるからです。

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

だから、単にprint()は、単一の ''(空白)で区切っその引数を出力し、デフォルトでは

def two_vertical_lines(height, width): 
    for x in range(height): 
     print("*{}*".format(" " * (width - 2))) 
関連する問題