Python'da sayıları dizelere biçimlendirme


112

Sayıları dizeler olarak nasıl biçimlendireceğimi bulmam gerekiyor. Kodum burada:

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

Saatler ve dakikalar tamsayıdır ve saniye bir kayan değerdir. str () işlevi tüm bu sayıları onda birlik (0.1) basamağa dönüştürür. Bu nedenle, "5: 30: 59.07 pm" çıktısı veren dizem yerine, "5.0: 30.0: 59.1 pm" gibi bir şey gösterecektir.

Sonuç olarak, bunu benim için hangi kitaplığa / işleve ihtiyacım var?

Yanıtlar:


138

Python 3.6'dan başlayarak, Python'da biçimlendirme, biçimlendirilmiş dize değişmezleri veya f dizeleri kullanılarak yapılabilir :

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

veya str.format2.7 ile başlayan işlev:

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

veya Python'un daha eski sürümleri için dize biçimlendirme %operatörü , ancak belgelerdeki nota bakın:

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

Ve özel biçimlendirme süreniz için şunlar var time.strftime:

import time

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

96

Python 2.6'dan başlayarak, bir alternatif var: str.format()yöntem. Mevcut dize biçimi operatörünü ( %) kullanan bazı örnekler aşağıda verilmiştir :

>>> "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' 

İşte eşdeğer snippet'ler, ancak str.format()şunları kullanıyor :

>>> "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'

Python 2.6+ gibi, tüm Python 3 sürümleri (şimdiye kadar) her ikisinin de nasıl yapılacağını biliyor. Bu şeyleri utanmadan doğrudan Python giriş kitabımdan ve zaman zaman sunduğum Giriş + Orta Python kurslarının slaytlarından aldım .:-)

Ağustos 2018 GÜNCELLEME : Tabii ki artık 3.6'da f-string özelliğine sahip olduğumuza göre, bunun eşdeğer örneklerine ihtiyacımız var , evet başka bir alternatif:

>>> 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+

format()İşlevi kullanmak mümkündür , bu nedenle sizin durumunuzda şunları kullanabilirsiniz:

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

Bu işlevi kullanmanın birden fazla yolu vardır, bu nedenle daha fazla bilgi için belgelere bakabilirsiniz .

Python 3.6+

f-dizeleri, Python 3.6'da dile eklenen yeni bir özelliktir. Bu, dizeleri biçimlendirmeyi kötü bir şekilde kolaylaştırır:

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


1

İstenilen işlevselliği elde etmek için aşağıdakileri kullanabilirsiniz

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

1

Python'un herhangi bir nesneyi dizelere tanımasını sağlamak için str.format () yöntemini kullanabilirsiniz.


0

str () tamsayı üzerinde Python olacak değil herhangi ondalık basamak yazdırın.

Ondalık kısmı yok saymak istediğiniz bir kayan nokta varsa, o zaman str (int (floatValue)) kullanabilirsiniz.

Belki aşağıdaki kod gösterecektir:

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

0

Ondalık içeren bir değeriniz varsa, ancak ondalık değer ihmal edilebilirse (yani: 100.0) ve bunu anlamaya çalışırsanız, bir hata alırsınız. Aptalca görünüyor, ancak önce float çağrısı bunu düzeltir.

str (int (şamandıra ([değişken])))

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.