2016-03-29 3 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: 
** 
** 
** 
** 
** 

, но с этим кодом:

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 

По какой-то причине, моя программа возвращается:

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

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

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

(обратите внимание на разницу в промежутке/ширине между двумя вертикальными линиями, хотя моя переменная new_width технически должна быть 1 пробел)

+0

Там нет ничего плохого с кодом ... Что отображается в моей PyCharm это прекрасно ... может быть, вы хотите, чтобы выяснить, как вы печатаете их? – Ian

ответ

3

По умолчанию print() выводит свои аргументы, разделенные с одной '' (пробел). Однако это можно изменить с помощью параметра 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 

Чтобы исправить это, вы можете создать одну строку и распечатать его, как этот

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

В самом деле, вместо явного добавления \n в строке, вы можете позволить print функции заботиться о это, как этот

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

Другое усовершенствование может быть, вы не знаете имеют особый случай, width <= 2 случаях, поскольку умножение строк с нулевыми или отрицательными целыми числами приведет только к пустым строкам.

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

Таким образом, вы можете просто написать

def two_vertical_lines(height, width): 
    for x in range(height): 
     print("*{}*".format(" " * (width - 2))) 
Смежные вопросы