Apa perbedaan antara% s dan% d dalam pemformatan string Python?


Jawaban:


194

Mereka digunakan untuk memformat string. %sbertindak sebagai tempat penampung untuk string sementara %dbertindak sebagai tempat penampung untuk angka. Nilai terkaitnya diteruskan melalui tupel menggunakan %operator.

name = 'marcog'
number = 42
print '%s %d' % (name, number)

akan mencetak marcog 42. Perhatikan bahwa nama adalah string (% s) dan angka adalah integer (% d untuk desimal).

Lihat https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting untuk detailnya.

Dalam Python 3 contohnya adalah:

print('%s %d' % (name, number))

2
Di Google Chrome: Pengaturan >> Pencarian >> Kelola mesin pencari ... perhatikan bagaimana %sdigunakan dengan konfigurasi mesin pencari. Chrome menggunakan %suntuk mengganti kata kunci yang dimasukkan di bilah alamat. Python menggunakan %scara yang serupa. Dalam print('description: %s' % descrip)satu %soperator yang akan digantikan oleh string teks yang disimpan dalam descripvariabel. Kawat gigi bulat mencegah pesan kesalahan di Python 3.
— noobninja

apa yang kamu sebut% s,% d, dll?
— Chaine

1
@Chaine mereka disebut Placeholder, mereka adalah variabel yang dapat diganti
— Leo

@Leo Terima kasih!
— Chaine

40

dari python 3 doc

%d adalah untuk bilangan bulat desimal

%s adalah untuk string atau objek umum dan dalam kasus objek, itu akan diubah menjadi string

Perhatikan kode berikut

name ='giacomo'
number = 4.3
print('%s %s %d %f %g' % (name, number, number, number, number))

keluarannya akan

giacomo 4.3 4 4.300000 4.3

seperti yang Anda lihat %dakan dipotong menjadi integer, %sakan mempertahankan format, %fakan mencetak sebagai float dan %gdigunakan untuk nomor umum

jelas

print('%d' % (name))

akan menghasilkan pengecualian; Anda tidak dapat mengubah string menjadi angka


Ini memperkirakan lebih banyak suara positif. Ini menjelaskan apa yang akan terjadi jika %sdigunakan untuk angka sebagai gantinya.
— Vikas Prasad

1
Apa perbedaan antara% d dan% i, jika keduanya akan diubah menjadi integer? Bagaimana% d dibandingkan dengan% i dan% f?
— srini

36

%s digunakan sebagai tempat penampung untuk nilai string yang ingin Anda masukkan ke dalam string yang diformat.

%d digunakan sebagai tempat penampung untuk nilai numerik atau desimal.

Misalnya (untuk python 3)

print ('%s is %d years old' % ('Joe', 42))

Akan menghasilkan

Joe is 42 years old

6
Tidak benar-benar menjelaskan masalahnya? Saya tidak menjelaskan masalahnya, saya memberikan jawaban singkat untuk pertanyaan itu. Pertanyaan secara spesifik menanyakan untuk apa% s dan% d.
— Soviut

2
tahukah kamu perbedaan antara% i dan% d? apakah python mendukung% i?
— cryanbhu

11

Ini adalah placeholder:

Sebagai contoh: 'Hi %s I have %d donuts' %('Alice', 42)

Baris kode ini akan mengganti% s dengan Alice (str) dan% d dengan 42.

Keluaran: 'Hi Alice I have 42 donuts'

Hal ini dapat dicapai dengan "+" di sebagian besar waktu. Untuk mendapatkan pemahaman yang lebih mendalam tentang pertanyaan Anda, Anda mungkin ingin memeriksa {} / .format () juga. Berikut ini salah satu contohnya: Pemformatan string Python:% vs. .format

juga lihat di sini video tutorial google python @ 40 ', ada beberapa penjelasannya https://www.youtube.com/watch?v=tKTZoB2Vjuk


11

Ini semua adalah jawaban yang informatif, tetapi tidak ada yang cukup memahami inti dari perbedaan antara %sdan %d.

%smemberitahu pemformat untuk memanggil str()fungsi pada argumen dan karena kita memaksa ke string menurut definisi, %spada dasarnya hanya melakukan str(arg).

%ddi sisi lain, menyerukan int()argumen sebelum memanggil str(), seperti str(int(arg)), Ini akan menyebabkan intpaksaan serta strpaksaan.

Misalnya, saya dapat mengubah nilai hex menjadi desimal,

>>> '%d' % 0x15
'21'

atau potong pelampung.

>>> '%d' % 34.5
'34'

Tapi operasi tersebut akan memunculkan pengecualian jika argumennya bukan angka.

>>> '%d' % 'thirteen'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

Jadi, jika tujuannya hanya untuk memanggil str(arg), maka %ssudah cukup, tetapi jika Anda membutuhkan pemformatan tambahan (seperti memformat tempat desimal mengambang) atau paksaan lainnya, maka diperlukan simbol format lainnya.

Dengan f-stringnotasi, saat Anda membiarkan pemformat keluar, defaultnya adalah str.

>>> a = 1
>>> f'{a}'
'1'
>>> f'{a:d}'
'1'
>>> a = '1'
>>> f'{a:d}'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'd' for object of type 'str'

Hal yang sama berlaku dengan string.format; defaultnya adalah str.

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'

1
Ini harus menjadi jawaban yang diterima. Itu satu-satunya yang benar-benar menjelaskan perbedaannya.
— Antimony

Mengingat saya terlambat menjawab 9 tahun, itu bisa dimengerti. Tapi, saya tidak puas dengan jawabannya jadi saya menambahkan satu.
— Wyrmwood

10

The %ddan %stali format "perintah" digunakan untuk string format. Ini %duntuk angka, dan %suntuk string.

Sebagai contoh:

print("%s" % "hi")

dan

print("%d" % 34.6)

Meneruskan beberapa argumen:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) akan kembali hi there user123456


8

%ddan %smerupakan placeholder, mereka bekerja sebagai variabel yang dapat diganti. Misalnya, jika Anda membuat 2 variabel

variable_one = "Stackoverflow"
variable_two = 45

Anda dapat menetapkan variabel tersebut ke kalimat dalam string menggunakan tupel variabel.

variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"

Perhatikan bahwa %sberfungsi untuk String dan %dberfungsi untuk variabel numerik atau desimal.

jika dicetak variable_3maka akan terlihat seperti ini

print(variable_3 % (variable_one, variable_two))

Saya sedang mencari jawaban di StackOverflow dan menemukan lebih dari 45 jawaban atas pertanyaan saya.


5

Mereka adalah penentu format. Mereka digunakan ketika Anda ingin memasukkan nilai ekspresi Python Anda ke dalam string, dengan format tertentu diberlakukan.

Lihat Menyelam ke Python untuk pengenalan yang relatif mendetail.



2

Jika Anda ingin menghindari% s atau% d maka ..

name = 'marcog'
number = 42
print ('my name is',name,'and my age is:', number)

Keluaran:

my name is marcog and my name is 42

2
Apa hubungan jawaban ini dengan pertanyaan itu? Penanya menanyakan tentang penggunaan %sdan %d.
— Mark Dickinson

BTW, kode yang Anda tunjukkan tidak valid di Python 3.5.1: printadalah fungsi di Python 3, bukan pernyataan.
— Mark Dickinson

Saya telah mengedit postingan ... silakan lihat. Sebenarnya, saya mempostingnya sebagai alternatif .. jika seseorang mungkin menghindari penggunaan% d atau% s. Dan terima kasih atas deteksi kesalahannya, .. Saya telah mengedit kodenya.
— Sujatha

3
Terima kasih atas pengeditannya. Sayangnya, ini masih belum menjawab pertanyaan tersebut.
— Mark Dickinson

2

% s digunakan untuk menampung spasi untuk string% d digunakan untuk menampung spasi untuk angka

name = "Moses";
age = 23
print("My name is %s am CEO at MoTech Computers " %name)
print("Current am %d years old" %age)
print("So Am %s and am %d years old" %(name,age))

Keluaran program

video ini membahas lebih dalam tentang tip itu https://www.youtube.com/watch?v=4zN5YsuiqMA


Selamat datang di Stack Overflow! Bagaimana jawaban Anda berbeda dengan 12 lainnya?
— Vasil Velichkov

hampir semua format itu bekerja sama tetapi yang saya inginkan hanyalah memberikan lebih banyak contoh untuk meningkatkan pemahaman
— Noel Moses Mwadende

Itu hebat! Anda dapat meningkatkan jawaban Anda dengan menambahkan keluaran program sebagai teks dan bukan sebagai gambar.
— Vasil Velichkov

terima kasih atas perhatian Anda, saya akan membuat beberapa perubahan, sama-sama
— Noel Moses Mwadende

1

ngomong-ngomong ...
python3.6 hadir dengan f-stringsyang membuat segalanya lebih mudah dalam pemformatan!
sekarang jika versi python Anda lebih besar dari 3.6 Anda dapat memformat string Anda dengan metode yang tersedia ini:

name = "python"

print ("i code with %s" %name)          # with help of older method
print ("i code with {0}".format(name))  # with help of format
print (f"i code with {name}")           # with help of f-strings

1

Berikut adalah contoh dasar untuk mendemonstrasikan pemformatan string Python dan cara baru untuk melakukannya.

my_word = 'epic'
my_number = 1

print('The %s number is %d.' % (my_word, my_number))  # traditional substitution with % operator

// Angka epiknya adalah 1.

print(f'The {my_word} number is {my_number}.')  # newer format string style

// Angka epiknya adalah 1.

Keduanya memiliki cetakan yang sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.