Saya sudah mulai belajar Python dengan LPTHW dan saya sudah sampai pada latihan 16:
http://learnpythonthehardway.org/book/ex16.html
Dan saya merasa seperti orang idiot karena saya tidak dapat memahami salah satu tugas yang tampaknya sederhana "extra credit" yang menginginkan hal berikut:
target.write(line1)
target.write('\n')
target.write(line2)
target.write('\n')
target.write(line3)
target.write('\n')
Untuk diringkas menjadi satu baris kode. Saya sudah mencoba beberapa hal berikut:
target.write(line1 \n, line2 \n, line3 \n)
Atau:
target.write('line1 \n, line2 \n, line3 \n')
Atau:
target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)
Saya tidak bisa't mendapatkannya untuk menulis ulang string baris1, baris2, dan baris3 semua dalam baris yang sama. Dan saya sudah mencoba berbagai kombinasi lain dengan dan tanpa koma, tanda kutip, dll. Saya terus mendapatkan berbagai kesalahan, seperti Invalid Syntax atau bahwa saya memiliki terlalu banyak argumen.
target.write(line1 \n, line2 \n, line3 \n)
hanya masuk akal di dalam string literal. Tanpa tanda kutip, Anda tidak memiliki literal string.
target.write('line1 \n, line2 \n, line3 \n')
Ok, sekarang semuanya adalah string literal. Tapi Anda ingin baris1, baris2, baris3 bukan string literal. Anda membutuhkannya sebagai ekspresi python untuk merujuk variabel yang dimaksud. Pada dasarnya, Anda harus meletakkan tanda kutip di sekitar string yang sebenarnya adalah teks seperti "\n" tetapi tidak di sekitar variabel. Jika Anda melakukan itu, Anda mungkin mendapatkan sesuatu seperti:
target.write(line1 '\n' line2 '\n' line3 '\n')
Apa itu 2 2
? Itu bukan apa-apa. Anda harus menentukan kepada python bagaimana menggabungkan dua bagian. Jadi, Anda dapat memiliki 2 + 2
atau 2 * 2
tetapi 2 2
tidak masuk akal. Dalam kasus ini, kita menggunakan add untuk menggabungkan dua string
target.write(line + '\n' + line2 + '\n' + line3 + '\n')
Selanjutnya,
target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)
Sekali lagi \n
hanya masuk akal di dalam string literal. Operator % ketika digunakan untuk menghasilkan string mengambil string sebagai sisi kirinya. Jadi, Anda memerlukan semua detail pemformatan itu di dalam string.
target.write('%r \n', '%r \n', '%r \n') % (line1, line2, line3)
Tapi itu menghasilkan 3 literal string, Anda hanya ingin satu. Jika Anda melakukan ini, menulis mengeluh karena itu kecuali satu string, bukan 3. Jadi Anda mungkin telah mencoba sesuatu seperti:
target.write('%r \n%r \n%r \n') % (line1, line2, line3)
Tetapi Anda ingin menulis baris1, baris2, baris3 ke file. Dalam hal ini, Anda mencoba memformat setelah penulisan selesai. Ketika python mengeksekusi ini, ia akan menjalankan target.write terlebih dahulu:
None % (line1, line2, line3)
Yang mana tidak akan ada gunanya. Untuk memperbaikinya kita perlu meletakkan % ()
di dalam .write()
target.write('%r\n%r\n%r\n' % (line1, line2, line3))
Percobaan terakhir Anda terlihat menjanjikan. Seharusnya terlihat seperti:
"%s \n %s \n %s" % (line1, line2, line3)
ini menerapkan operator %
ke sebuah string (dengan 3 placeholder %s
) dan sebuah tuple dari nilai yang akan disubstitusikan (di sini, string). Hasilnya adalah string yang diformat.
Jadi Anda harus membungkusnya dalam fungsi yang mengambil hasilnya:
target.write("%s \n %s \n %s" % (line1, line2, line3) )
Ini salah satu caranya:
target.write(line1 + '\n' + line2 + '\n' + line3 + '\n')
Alasan berikut ini tidak berhasil
target.write(line1 \n, line2 \n, line3 \n)
Adalah bahwa line1
adalah sebuah variabel (perhatikan bahwa itu tidak dikutip) tetapi '\n'
adalah string literal (karena itu dalam tanda kutip). Operator penjumlahan di-overload untuk string untuk menggabungkan (mengkombinasikan) mereka.
Alasan mengapa hal ini tidak berhasil:
target.write('line1 \n, line2 \n, line3 \n')
Karena line1
adalah sebuah variabel. Ketika Anda memasukkannya ke dalam tanda kutip, itu tidak lagi diperlakukan sebagai variabel.