Memformat angka menjadi string dengan Python


112

Saya perlu mencari tahu cara memformat angka sebagai string. Kode saya ada di sini:

return str(hours)+":"+str(minutes)+":"+str(seconds)+" "+ampm

Jam dan menit adalah bilangan bulat, dan detik adalah pelampung. fungsi str () akan mengubah semua angka ini menjadi tempat persepuluhan (0.1). Jadi bukannya string saya mengeluarkan "5: 30: 59.07 pm", itu akan menampilkan sesuatu seperti "5.0: 30.0: 59.1 pm".

Intinya, perpustakaan / fungsi apa yang saya perlukan untuk melakukan ini untuk saya?

Jawaban:


138

Dimulai dengan Python 3.6, pemformatan dengan Python dapat dilakukan menggunakan literal string atau f-string yang diformat :

hours, minutes, seconds = 6, 56, 33
f'{hours:02}:{minutes:02}:{seconds:02} {"pm" if hours > 12 else "am"}'

atau str.formatfungsi yang dimulai dengan 2.7:

"{:02}:{:02}:{:02} {}".format(hours, minutes, seconds, "pm" if hours > 12 else "am")

atau operator pemformatan string% untuk versi Python yang lebih lama, tetapi lihat catatannya di dokumen:

"%02d:%02d:%02d" % (hours, minutes, seconds)

Dan untuk kasus spesifik Anda tentang waktu pemformatan, ada time.strftime:

import time

t = (0, 0, 0, hours, minutes, seconds, 0, 0, 0)
time.strftime('%I:%M:%S %p', t)

96

Mulai Python 2.6, ada alternatif: str.format()metode. Berikut adalah beberapa contoh menggunakan operator format string yang sudah ada ( %):

>>> "Name: %s, age: %d" % ('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: %d/oct: %#o/hex: %#X' % (i, i, i) 
'dec: 45/oct: 055/hex: 0X2D' 
>>> "MM/DD/YY = %02d/%02d/%02d" % (12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: $%.2f' % (13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/%(web)s/%(page)d.html' % d 
'http://xxx.yyy.zzz/user/42.html' 

Berikut adalah cuplikan yang setara tetapi menggunakan str.format():

>>> "Name: {0}, age: {1}".format('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: {0}/oct: {0:#o}/hex: {0:#X}'.format(i) 
'dec: 45/oct: 0o55/hex: 0X2D' 
>>> "MM/DD/YY = {0:02d}/{1:02d}/{2:02d}".format(12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: ${0:.2f}'.format(13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/{web}/{page}.html'.format(**d) 
'http://xxx.yyy.zzz/user/42.html'

Seperti Python 2.6+, semua rilis Python 3 (sejauh ini) memahami cara melakukan keduanya. Saya tanpa malu-malu merobek hal-hal ini langsung dari buku intro Python hardcore saya dan slide untuk kursus Intro + Intermediate Python yang saya tawarkan dari waktu ke waktu.:-)

Agustus 2018 UPDATE : Tentu saja, sekarang kita memiliki fitur f-string dalam 3,6 , kita perlu contoh setara dengan yang , ya alternatif lain:

>>> name, age = 'John', 35
>>> f'Name: {name}, age: {age}'
'Name: John, age: 35'

>>> i = 45
>>> f'dec: {i}/oct: {i:#o}/hex: {i:#X}'
'dec: 45/oct: 0o55/hex: 0X2D'

>>> m, d, y = 12, 7, 41
>>> f"MM/DD/YY = {m:02d}/{d:02d}/{y:02d}"
'MM/DD/YY = 12/07/41'

>>> f'Total with tax: ${13.00 * 1.0825:.2f}'
'Total with tax: $14.07'

>>> d = {'web': 'user', 'page': 42}
>>> f"http://xxx.yyy.zzz/{d['web']}/{d['page']}.html"
'http://xxx.yyy.zzz/user/42.html'

8

Python 2.6+

Dimungkinkan untuk menggunakan format()fungsi tersebut, jadi dalam kasus Anda, Anda dapat menggunakan:

return '{:02d}:{:02d}:{:.2f} {}'.format(hours, minutes, seconds, ampm)

Ada beberapa cara untuk menggunakan fungsi ini, jadi untuk informasi lebih lanjut Anda dapat memeriksa dokumentasinya .

Python 3.6+

f-strings adalah fitur baru yang telah ditambahkan ke bahasa di Python 3.6. Ini memfasilitasi format string yang terkenal:

return f'{hours:02d}:{minutes:02d}:{seconds:.2f} {ampm}'


1

Anda dapat menggunakan berikut ini untuk mencapai fungsionalitas yang diinginkan

"%d:%d:d" % (hours, minutes, seconds)

1

Anda bisa menggunakan str.format () untuk membuat Python mengenali objek apa pun menjadi string.


0

str () dengan python pada integer tidak akan mencetak tempat desimal apapun.

Jika Anda memiliki float yang ingin Anda abaikan bagian desimalnya, maka Anda dapat menggunakan str (int (floatValue)).

Mungkin kode berikut akan menunjukkan:

>>> str(5)
'5'
>>> int(8.7)
8

0

Jika Anda memiliki nilai yang menyertakan desimal, tetapi nilai desimal dapat diabaikan (yaitu: 100.0) dan mencoba untuk melakukannya, Anda akan mendapatkan kesalahan. Tampaknya konyol, tetapi memanggil float terlebih dahulu memperbaiki ini.

str (int (float ([variabel])))

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.