Как написать несколько строк в одной строке?

Я начал изучать Python с LPTHW и приступил к упражнению 16:

http://learnpythonthehardway.org/book/ex16.html

И чувствую себя идиотом, потому что я не могу понять одно из, казалось бы, простых "дополнительных кредитов", которое хочет следующее:

target.write(line1)
target.write('\n')
target.write(line2)
target.write('\n') 
target.write(line3)
target.write('\n') 

Быть сжатым до одной строки кода. Я пробовал некоторые из следующих:

target.write(line1 \n, line2 \n, line3 \n)

Или же:

target.write('line1 \n, line2 \n, line3 \n')

Или же:

target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)

Я просто не могу заставить его переписать строки line1, line2 и line3 в одну строку. И я пробовал различные другие комбинации с запятыми, кавычками и т.д. И так далее. У меня постоянно появляются разные ошибки, например, неверный синтаксис или слишком много аргументов.

Ответ 1

target.write(line1 \n, line2 \n, line3 \n)

'\n' имеет смысл только внутри строкового литерала. Без кавычек у вас нет строковых литералов.

target.write('line1 \n, line2 \n, line3 \n')

Хорошо, теперь все это строковый литерал. Но вы хотите, чтобы строка1, строка2, строка3 не были строковыми литералами. Вам нужны эти выражения в качестве выражений python для ссылки на переменные, о которых идет речь. В принципе, вам нужно помещать кавычки вокруг строк, которые на самом деле являются текстовыми, как "\n", но не вокруг переменных. Если вы это сделали, возможно, вы получили что-то вроде:

target.write(line1 '\n' line2 '\n' line3 '\n')

Что такое 2 2? Это ничего. Вы должны указать python, как объединить две части. Таким образом, вы можете иметь 2 + 2 или 2 * 2, но 2 2 не имеет никакого смысла. В этом случае мы используем add для объединения двух строк

target.write(line + '\n' + line2 + '\n' + line3 + '\n')

Перемещение,

target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)

Опять \n имеет смысл только внутри строкового литерала. Оператор%, когда используется для создания строк, берет строку в левой части. Таким образом, вам нужна вся эта деталь форматирования внутри строки.

target.write('%r \n', '%r \n', '%r \n') % (line1, line2, line3)

Но это порождает 3 строковых литерала, вы только этого хотите. Если вы это сделали, напишите жалобу, потому что она исключает одну строку, а не 3. Поэтому вы могли бы попробовать что-то вроде:

target.write('%r \n%r \n%r \n') % (line1, line2, line3)

Но вы хотите записать строки1, line2, line3 в файл. В этом случае вы пытаетесь форматировать после того, как запись уже завершена. Когда python выполнит это, он запустит target.write, сначала оставив:

None % (line1, line2, line3)

Что не поможет. Чтобы исправить это, нам нужно поставить % () внутри .write()

target.write('%r\n%r\n%r\n' % (line1, line2, line3))

Ответ 2

Ваша последняя попытка выглядит многообещающей. Он должен выглядеть так:

"%s \n %s \n %s" % (line1, line2, line3)

это применит оператор % к строке (с 3 %s заполнителями) и кортежем значений для замены (здесь, строки). Результатом является форматированная строка.

Итак, вам нужно обернуть это в функцию, которая принимает результат:

target.write("%s \n %s \n %s" % (line1, line2, line3) )

Ответ 3

Здесь один из способов:

target.write(line1 + '\n' + line2 + '\n' + line3 + '\n')

Причина, по которой не работает

target.write(line1 \n, line2 \n, line3 \n)

Является ли это line1 переменной (обратите внимание, что это не кавычки), но '\n' является строковым литералом (так как он в кавычках). Оператор сложения перегружен для строк, чтобы объединить (объединить) их.

Причина этого не работает:

target.write('line1 \n, line2 \n, line3 \n')

Потому что line1 - это переменная. Когда вы помещаете его в кавычки, он больше не рассматривается как переменная.

Ответ 4

ниже строка работает для меня,

 target.write(line1 + line + line2 + line + line3 + line)

До этого я добавил

 line = '\n'

мой код вроде:

 from sys import argv
 script, filename = argv
 print 'Appending process starts on: %r' % filename
 target = open(filename, 'a')
 print 'Enter the contents:\t'
 line1 = raw_input('Next:\t')
 line2 = raw_input('Next:\t')
 line3 = raw_input('Next:\t')
 line = '\n'
 target.write(line1 + line + line2 + line + line3 + line)
 print 'Thank you !'