Cetak beberapa argumen dengan Python

309

Ini hanya cuplikan kode saya:

print("Total score for %s is %s  ", name, score)

Tapi saya ingin mencetak:

"Total skor untuk (nama) adalah (skor)"

di mana nameadalah variabel dalam daftar dan scorebilangan bulat. Ini adalah Python 3.3 jika itu membantu sama sekali.

pengguna1985351
sumber

Jawaban:

559

Ada banyak cara untuk melakukan ini. Untuk memperbaiki kode Anda saat ini menggunakan %-formating, Anda harus memasukkan tuple:

  1. 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:

  1. 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:

  1. Gunakan pemformatan string gaya baru:

    print("Total score for {} is {}".format(name, score))
  2. 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))
  3. Gunakan pemformatan string gaya baru dengan nama eksplisit:

    print("Total score for {n} is {s}".format(n=name, s=score))
  4. String gabungan:

    print("Total score for " + str(name) + " is " + str(score))

Dua yang paling jelas, menurut saya:

  1. 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__:

    from __future__ import print_function
  2. Gunakan fformat -string baru dalam Python 3.6:

    print(f'Total score for {name} is {score}')
Blender
sumber
7
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 concatenation
print("sum of", a , "and" , b , "is" , c) 

#convert variable into str
print("sum of " + str(a) + " and " + str(b) + " is " + str(c)) 

# if you want to print in tuple way
print("Sum of %s and %s is %s: " %(a,b,c))  

#New style string formatting
print("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}')
Vikas Gupta
sumber
3
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 code

print("Total score for {n} is {s}".format(n=name, s=score))

Atau:

print("Total score for" + name + " is " + score)

Atau:

`print("Total score for %s is %d" % (name, score))`
Gavriel Cohen
sumber
21

Dalam Python 3.6, f-stringjauh lebih bersih.

Dalam versi sebelumnya:

print("Total score for %s is %s. " % (name, score))

Dengan Python 3.6:

print(f'Total score for {name} is {score}.')

akan melakukan.

Itu lebih efisien dan elegan.

Abhishek
sumber
15

Menjaga tetap sederhana, saya pribadi suka penggabungan string:

print("Total score for " + name + " is " + score)

Ia bekerja dengan kedua Python 2.7 dan 3.X.

CATATAN: Jika skor adalah int , maka, Anda harus mengubahnya menjadi str :

print("Total score for " + name + " is " + str(score))
Paolo Rovelli
sumber
12

Coba saja:

print("Total score for", name, "is", score)
sarora
sumber
11

Ikuti saja ini

idiot_type = "the biggest idiot"
year = 22
print("I have been {} for {} years ".format(idiot_type, years))

ATAU

idiot_type = "the biggest idiot"
year = 22
print("I have been %s for %s years."% (idiot_type, year))

Dan lupakan yang lainnya, kalau tidak otak tidak akan bisa memetakan semua format.

Pengusir setan
sumber
6
print("Total score for %s is %s  " % (name, score))

%sdapat diganti oleh %datau%f

pengguna6014455
sumber
6

Gunakan f-string:

print(f'Total score for {name} is {score}')

Atau

Gunakan .format:

print("Total score for {} is {}".format(name, score))
iNet
sumber
5

Jika scoreangka, maka

print("Total score for %s is %d" % (name, score))

Jika skor adalah string, maka

print("Total score for %s is %s" % (name, score))

Jika skor adalah angka, maka itu adalah %d, jika itu adalah string, maka itu %s, jika skor adalah pelampung, maka itu adalah%f

Supercolbat
sumber
3

Inilah yang saya lakukan:

print("Total score for " + name + " is " + score)

Ingatlah untuk memberi spasi setelah fordan sebelum dan sesudah is.

Peter Mortensen
sumber