Там есть пара проблем -
наиболее важным является то, что вы читаете первую строку в stdin и используете ее как lineLength
, но вы не конвертируете ее в число . Таким образом, ваше значение в переменной lineLength
(и line_length
внутри функции-оболочки) является строкой - и сравнение
if len(curr_line) + len(word) >= line_length:
Всегда сравнивает длину предложенной строки вывода с левой стороны со строкой - если вы используете последнюю версию Python, эта строка будет ошибочной, так как совмещение чисел и строк теперь (справедливо) запрещено. В Python 3, однако, это выражение всегда True - нумераторы всегда рассматриваются как <
, чем строки - поэтому код для строки, превышающей ограничение, никогда не запускается.
Вторая ошибка заключается просто в том, что вы не объединяете пробелы в строку строки, а просто объединяете слова с помощью +=
, но не добавляете пробелы.
Третья ошибка заключается в том, что вы всегда печатаете строку, вычисляемую внутри цикла, независимо от того, превышена длина строки или нет.
И последнее, но не менее важное - как я уже говорил в комментариях выше: больше не используйте Python 2 - есть причина, по которой они создали Python 3, и это потому, что язык эволюционировал.
И, не так неправильно, но рекомендуется: ваша функция должна просто обрабатывать текст и возвращать данные - если вы хотите напечатать результаты, вы можете распечатать их из функции вызывающего. Таким образом, функция остается достаточно универсальной и может использоваться в других контекстах.
Кроме того, рекомендуемый размер отступа для приложений Python - 4. Хотя использование 2 пробелов является допустимым кодом, он практически нигде не используется (но в частном коде некоторых известных компаний - но это их бизнес).
Ваш фиксированный код плюс рекомендации - будут работать как в Python 2, так и в 3:
import sys
def wrapLines(line_length, words):
curr_line = ""
result = []
for word in words:
if len(curr_line) + len(word) + 1 >= line_length:
result.append(curr_line)
curr_line = ""
else:
curr_line += " " + word
if curr_line:
result.append(currline)
return result
def main():
first_line = None
words = []
first_arg = True
for line in sys.stdin:
if len(line.strip()) == 0:
continue
line = line.rstrip()
if first_arg:
line_length = int(line)
first_arg = False
else:
words.append(line)
print("\n".join(wrapLines(line_length, words)))
main()