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

Я начал изучать 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 в одной строке. И я пробовал разные комбинации с запятыми и без них, кавычки и т. Д. У меня все время возникают различные ошибки, такие как Invalid Syntax или у меня слишком много аргументов.

Любая помощь (и объяснение позади этого) была бы весьма признательна. Благодаря!

 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)) 

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

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

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

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

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

Вот один из способов:

 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 является переменной. Когда вы помещаете его в кавычки, он больше не рассматривается как переменная.

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

  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 !'