Подтвердить что ты не робот

Изучение Python на жестком пути: Ex16 Extra Credit

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

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

Вопрос просит вас "использовать строки, форматы и экраны для печати строк 1, 2 и 3 только с одной командой target.write() вместо 6.

Итак, я думал, что напишу вот так:

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

И он вернулся: TypeError: неподдерживаемый тип операндов для%: 'NoneType' и 'tuple.' Я провел некоторое исследование по ним и ничего не мог найти, но он возвратил ту же ошибку, используя% r.

Мышление знаков + было неправильным, так как это была единственная строка, я удалил их для:

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

По-прежнему ничего. Затем я попробовал:

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

Это, по крайней мере, изменило ошибку на: TypeError: неподдерживаемый тип операндов для%: "NoneType" и "str". Такая же ошибка была получена для этого варианта:

target.write("%s") % (line1 + line2 + line3)

Во всяком случае, это довольно очевидно, что я где-то застрял. Я думаю, что моя проблема сосредоточена вокруг% s/% r, которую я использую, но я не могу найти альтернативу, которая, как я думаю, будет работать, или, может быть, я просто неправильно пишу инструкцию записи.

Извините, если этот препарат включен, я просто подумал, что попытаюсь объяснить мой мыслительный процесс. Спасибо за помощь!

4b9b3361

Ответ 1

Как насчет этого?

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

Ответ 2

Оператор интерполяции% применяется к строкам. Вы применяете его к возвращаемому значению target.write, который ничего не возвращает (следовательно, NoneType). Вы хотите сделать интерполяцию на самой строке:

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

Большинство людей, изучающих Python, впервые сталкиваются с% в контексте оператора печати, поэтому понятно, что он тесно связан с выходом, но он выполняет всю свою работу на уровне строк.

Ответ 3

Ваши первоначальные попытки пытались использовать оператор % с возвращаемым значением target.write() - который является None. Вы должны иметь % внутри () для target.write:

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

Обратите внимание, что другое решение:

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

Edit

Добавлена ​​пустая строка в конце, чтобы заставить третью новую строку (иначе их будет только два).

Ответ 4

target.write требуется объект str в качестве аргументов и вы предоставляете объект NoneType

Ответ 5

Другой метод, который работал для меня в Python 3:

target.write(f"{line1} \n{line2} \n{line3} ")

Ответ 6

Я сам использовал этот скрипт для записи строк в файл для того же вопроса. (используя Python 3.6)

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