Ada banyak cara untuk melakukan ini. Untuk memperbaiki kode Anda saat ini menggunakan %-formating, Anda harus memasukkan tuple:
Lulus sebagai tuple:
print("Total score for %s is %s"%(name, score))
Tupel dengan elemen tunggal terlihat seperti ('this',).
Berikut adalah beberapa cara umum untuk melakukannya:
Lulus sebagai kamus:
print("Total score for %(n)s is %(s)s"%{'n': name,'s': score})
Ada juga pemformatan string gaya baru, yang mungkin sedikit lebih mudah dibaca:
Gunakan pemformatan string gaya baru:
print("Total score for {} is {}".format(name, score))
Gunakan pemformatan string gaya baru dengan angka (berguna untuk menyusun ulang atau mencetak yang sama beberapa kali):
print("Total score for {0} is {1}".format(name, score))
Gunakan pemformatan string gaya baru dengan nama eksplisit:
print("Total score for {n} is {s}".format(n=name, s=score))
String gabungan:
print("Total score for "+ str(name)+" is "+ str(score))
Dua yang paling jelas, menurut saya:
Cukup berikan nilai sebagai parameter:
print("Total score for", name,"is", score)
Jika Anda tidak ingin spasi dimasukkan secara otomatis printdalam contoh di atas, ubah sepparameternya:
print("Total score for ", name," is ", score, sep='')
Jika Anda menggunakan Python 2, tidak akan dapat menggunakan dua yang terakhir karena printbukan fungsi di Python 2. Namun, Anda dapat mengimpor perilaku ini dari __future__:
tentu saja, selalu ada metode lama yang tidak disetujui:print("Total score for "+str(name)"+ is "+str(score))
Snakes and Coffee
5
@SnakesandCoffee: Saya baru saja melakukannyaprint("Total score for", name, "is", score)
Blender
4
+1 saya. Hari ini saya lebih suka yang .format()lebih mudah dibaca daripada yang lebih tua % (tuple)- meskipun saya telah melihat tes yang menunjukkan %interpolasi lebih cepat. Ini print('xxx', a, 'yyy', b)juga baik untuk kasus sederhana. Saya sarankan juga untuk belajar .format_map()dengan kamus sebagai argumen, dan dengan 'ssss {key1} xxx {key2}'- bagus untuk menghasilkan teks dari template. Ada juga yang lebih tua string_template % dictionary. Tapi template tidak terlihat yang bersih: 'ssss %(key1)s xxx %(key2)s'.
pepr
6
FYI, pada Python 3.6, kita mendapatkan f-string , jadi sekarang Anda juga dapat melakukan print(f"Total score for {name} is {score}")tanpa pemanggilan fungsi eksplisit (selama namedan scorejelas dalam ruang lingkup).
ShadowRanger
57
Ada banyak cara untuk mencetaknya.
Mari kita lihat dengan contoh lain.
a =10
b =20
c = a + b#Normal string concatenationprint("sum of", a ,"and", b ,"is", c)#convert variable into strprint("sum of "+ str(a)+" and "+ str(b)+" is "+ str(c))# if you want to print in tuple wayprint("Sum of %s and %s is %s: "%(a,b,c))#New style string formattingprint("sum of {} and {} is {}".format(a,b,c))#in case you want to use repr()print("sum of "+ repr(a)+" and "+ repr(b)+" is "+ repr(c))
EDIT :#New f-string formatting from Python 3.6:print(f'Sum of {a} and {b} is {c}')
print("sum of {0} and {1} is {2}".format(a,b,c)) berlebihan, Anda dapat menghilangkan print("sum of {} and {} is {}".format(a,b,c)) kecuali Anda ingin mengubah urutan.
Jean-François Fabre
39
Gunakan .format()::
print("Total score for {0} is {1}".format(name, score))
Atau:
//Recommended, more readable codeprint("Total score for {n} is {s}".format(n=name, s=score))
print("Total score for "+str(name)"+ is "+str(score))
print("Total score for", name, "is", score)
.format()
lebih mudah dibaca daripada yang lebih tua% (tuple)
- meskipun saya telah melihat tes yang menunjukkan%
interpolasi lebih cepat. Iniprint('xxx', a, 'yyy', b)
juga baik untuk kasus sederhana. Saya sarankan juga untuk belajar.format_map()
dengan kamus sebagai argumen, dan dengan'ssss {key1} xxx {key2}'
- bagus untuk menghasilkan teks dari template. Ada juga yang lebih tuastring_template % dictionary
. Tapi template tidak terlihat yang bersih:'ssss %(key1)s xxx %(key2)s'
.print(f"Total score for {name} is {score}")
tanpa pemanggilan fungsi eksplisit (selamaname
danscore
jelas dalam ruang lingkup).Ada banyak cara untuk mencetaknya.
Mari kita lihat dengan contoh lain.
sumber
print("sum of {0} and {1} is {2}".format(a,b,c))
berlebihan, Anda dapat menghilangkanprint("sum of {} and {} is {}".format(a,b,c))
kecuali Anda ingin mengubah urutan.Gunakan
.format()
::Atau:
Atau:
Atau:
sumber
Dalam Python 3.6,
f-string
jauh lebih bersih.Dalam versi sebelumnya:
Dengan Python 3.6:
akan melakukan.
Itu lebih efisien dan elegan.
sumber
Menjaga tetap sederhana, saya pribadi suka penggabungan string:
Ia bekerja dengan kedua Python 2.7 dan 3.X.
CATATAN: Jika skor adalah int , maka, Anda harus mengubahnya menjadi str :
sumber
Coba saja:
sumber
Ikuti saja ini
ATAU
Dan lupakan yang lainnya, kalau tidak otak tidak akan bisa memetakan semua format.
sumber
%s
dapat diganti oleh%d
atau%f
sumber
Gunakan
f-string
:Atau
Gunakan
.format
:sumber
Jika
score
angka, makaJika skor adalah string, maka
Jika skor adalah angka, maka itu adalah
%d
, jika itu adalah string, maka itu%s
, jika skor adalah pelampung, maka itu adalah%f
sumber
Inilah yang saya lakukan:
Ingatlah untuk memberi spasi setelah
for
dan sebelum dan sesudahis
.sumber