¿Cómo escribir múltiples cadenas en una línea?

Empecé a aprender Python con LPTHW y comencé a ejercitar 16:

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

Y me siento como un idiota porque no puedo entender una de las asignaciones de “crédito extra” aparentemente simples que desean lo siguiente:

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

Para ser condensado a una línea de código. He probado algunos de los siguientes:

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

O:

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

O:

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

Simplemente no puedo volver a escribir las líneas line1, line2 y line3 en la misma línea. Y he probado otras combinaciones con y sin comas, comillas, etc. Sigo obteniendo errores variables, como Sintaxis no válida o que tengo demasiados argumentos.

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

‘\ n’ solo tiene sentido dentro de una cadena literal. Sin las comillas, no tienes literales de cadena.

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

Ok, ahora todo es una cadena literal. Pero desea que line1, line2, line3 no sean literales de cadena. Los necesitas como expresiones de Python para referir las variables en cuestión. Básicamente, debe colocar comillas alrededor de cadenas que en realidad son texto como “\ n” pero no alrededor de variables. Si hiciste eso, podrías haber obtenido algo como:

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

¿Qué es 2 2 ? No es nada. Tienes que especificar a python cómo combinar las dos piezas. Así que puedes tener 2 + 2 o 2 * 2 pero 2 2 no tiene ningún sentido. En este caso, utilizamos añadir para combinar dos cadenas.

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

Continuando,

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

De nuevo, \n solo tiene sentido dentro de una cadena literal. El operador% cuando se usa para producir cadenas toma una cadena como su lado izquierdo. Así que necesitas todos esos detalles de formato dentro de una cadena.

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

Pero eso produce 3 literales de cuerdas, solo quieres uno. Si hiciste esto, escribe quejas porque exceptúa una cadena, no 3. Por lo que podrías haber intentado algo como:

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

Pero desea escribir la línea 1, línea 2, línea 3 en el archivo. En este caso, está intentando el formateo después de que la escritura ya haya finalizado. Cuando Python ejecuta esto, ejecutará el target.write primero dejando:

 None % (line1, line2, line3) 

Lo que no hará nada útil. Para arreglar eso necesitamos poner el % () dentro de .write()

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

Tu último bash parece prometedor. Debería verse como

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

esto aplica el operador % a una cadena (con 3 %s marcadores de posición) y una tupla de valores para sustituir (aquí, cadenas). El resultado es la cadena formateada.

Entonces deberías envolver eso en la función que toma el resultado:

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

Aquí hay una forma:

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

La razón por la que lo siguiente no funciona

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

Es que line1 es una variable (tenga en cuenta que no se cita) pero '\n' es una cadena literal (ya que está entre comillas). El operador de adición está sobrecargado para que las cadenas las concatenen (combinen).

La razón por la que esto no funciona:

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

Es porque line1 es una variable. Cuando lo pones entre comillas, ya no se trata como una variable.

debajo de la linea funciona para mi

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

Antes de eso agregué

  line = '\n' 

mi código como:

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

El autor sugirió utilizar los formatos, las cadenas y los escapes, por lo que los siguientes trabajos. Esto implementa f-cuerdas de Python:

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