अग्रणी शून्य के साथ प्रदर्शन संख्या


910

दिया हुआ:

a = 1
b = 10
c = 100

मैं दो अंकों से कम वाले सभी नंबरों के लिए एक अग्रणी शून्य कैसे प्रदर्शित करूं?

यह वह आउटपुट है जिसकी मुझे उम्मीद है:

01
10
100

जवाबों:


1059

पायथन 2 (और पायथन 3) में आप यह कर सकते हैं:

print "%02d" % (1,)

मूल रूप से % की तरह है printfया sprintf( डॉक्स देखें )।


पायथन 3. + के लिए, एक ही व्यवहार भी प्राप्त किया जा सकता है format:

print("{:02d}".format(1))

पायथन 3.6+ के लिए समान व्यवहार को एफ-स्ट्रिंग्स के साथ प्राप्त किया जा सकता है :

print(f"{1:02d}")

8
उदाहरण: 5 अंकों के पोस्टल कोड के लिए "% 05d"% परिणाम ['पोस्टल कोड'] प्रिंट करें।
निक वुडहम्स

2
x = "%02d.txt" % iTypeError उठाता है ('str' और 'int' ऑब्जेक्ट्स x = "%02d.txt" % (i,)को नहीं मिला सकता ), लेकिन नहीं करता है। दिलचस्प। मुझे आश्चर्य है कि वह दस्तावेज कहां है
थीटा

@ २. In.६ में, मुझे कोई त्रुटि नहीं मिली। शायद यह पायथन के एक विशिष्ट संस्करण में एक बग था जिसे उन्होंने तय किया है?
जैक एम।

1
शायद। 2.7.6 में कोई अपवाद नहीं है यदि प्रारूप मान टपल नहीं है (कम से कम इस उदाहरण के लिए)। मेरी टिप्पणी की तारीख को देखते हुए मुझे लगता है कि मैं 2.7.3 पर वापस चल रहा था, और उस समय मुझे नहीं पता था कि %टुपल में एकल चर डालने से आपको स्ट्रिंग फॉर्मेटर का उपयोग करते समय एक सुरक्षित पक्ष पर मिलता है।
थीटा

1
विस्तृत करने के लिए, डॉक्स इसे यहाँ समझाते हैं: "जब कोई स्पष्ट संरेखण नहीं दिया जाता है, तो चौड़ाई को शून्य ('0') वर्ण से पूर्व में सांकेतिक प्रकारों के लिए साइन-अवेयर्ड शून्य-पैडिंग सक्षम करता है। यह 'भरण वर्ण' के बराबर है। 0 '' = '' के संरेखण प्रकार के साथ।
जेएचएस

940

आप उपयोग कर सकते हैं str.zfill:

print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))

प्रिंट:

01
10
100

71
मुझे यह समाधान पसंद है, क्योंकि यह न केवल संख्या को आउटपुट करते समय मदद करता है, लेकिन जब आपको इसे एक चर को निर्दिष्ट करने की आवश्यकता होती है ... जैसे x = str (datetime.date.today () महीने) .zfill (2) वापस आ जाएगी। x फेब के महीने के लिए '02' के रूप में।
एरोसैन

2
यह सही उत्तर होना चाहिए, क्योंकि इसके "{1:02d}"स्थान पर चर नहीं हो सकते हैं 2(जैसे यदि आप एक गतिशील फ़ंक्शन बना रहे हैं)।
जोशुआ वर्गीस

363

पायथन 2.6+ और 3.0+ में, आप format()स्ट्रिंग विधि का उपयोग करेंगे :

for i in (1, 10, 100):
    print('{num:02d}'.format(num=i))

या बिल्ट-इन (एक संख्या के लिए) का उपयोग कर:

print(format(i, '02d'))

नए स्वरूपण कार्यों के लिए PEP-3101 प्रलेखन देखें ।


29
पाइथन 2.7.5 में भी काम करता है। यदि आप नामांकित तर्कों का उपयोग नहीं करना चाहते हैं, तो आप '{: 02d}' का भी उपयोग कर सकते हैं।
जेसन मार्टेन्स

1
2.7.2 में ठीक काम करता है, एक फ्लोटिंग पॉइंट "{0: 04.0f}" के साथ। फॉर्मेट (1.1) 0001 देता है (: 04 = कम से कम 4 अक्षर, इस मामले में 0 के अग्रणी, .0f = फ्लोटिंग पॉइंट विथ नो डेसीमल) । मुझे% फ़ॉर्मेटिंग के बारे में पता है लेकिन पूरी बात को फिर से लिखे बिना एक मौजूदा .format स्टेटमेंट को संशोधित करना चाहता था । धन्यवाद!
माइकल स्टिम्सन

129
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))

प्रिंट:

01
10
100

1
इस तरह से आप स्ट्रिंग के भीतर कई बार तर्क दोहराते हैं:One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
srodriguex

2
केवल पायथन के साथ संगत 3. यदि पायथन 2.7 का उपयोग किया जाता है, तो करेंprint '{:02}'.format(1)
ब्लेयरग 23


73

में अजगर> = 3.6 , आप संक्षेप नई च-तार का उपयोग करके शुरू किए गए थे के साथ ऐसा कर सकते हैं:

f'{val:02}'

जो चर को vala और a के fillमान से नाम से प्रिंट करता है ।0width2

अपने विशिष्ट उदाहरण के लिए आप इसे लूप में कर सकते हैं:

a, b, c = 1, 10, 100
for val in [a, b, c]:
    print(f'{val:02}')

जो प्रिंट करता है:

01 
10
100

एफ-स्ट्रिंग्स के बारे में अधिक जानकारी के लिए, PEP 498 पर एक नज़र डालें जहाँ उन्हें पेश किया गया था।


56
x = [1, 10, 100]
for i in x:
    print '%02d' % i

का परिणाम:

01
10
100

प्रलेखन में % का उपयोग करके स्ट्रिंग प्रारूपण के बारे में अधिक जानकारी पढ़ें ।


9
प्रलेखन उदाहरण बेकार है। वे प्रमुख शून्य नमूने के साथ मानचित्रण फेंकते हैं, इसलिए यह जानना मुश्किल है कि कौन सा ऐसा है जब तक आप पहले से ही नहीं जानते कि यह कैसे काम करता है। Thats जो मुझे यहाँ लाया, वास्तव में।
अनुदान

49

ऐसा करने का पायथोनिक तरीका:

str(number).rjust(string_width, fill_char)

इस तरह, मूल स्ट्रिंग अपरिवर्तित लौटा दी जाती है यदि इसकी लंबाई स्ट्रिंग_ एक्सपोज़र से अधिक है। उदाहरण:

a = [1, 10, 100]
for num in a:
    print str(num).rjust(2, '0')

परिणाम:

01
10
100

33

या दूसरा उपाय।

"{:0>2}".format(number)

3
यह पायथन तरीका होगा, हालांकि मैं स्पष्टता के लिए पैरामीटर शामिल करूंगा - "{0:0>2}".format(number), अगर कोई nLeadingZeros चाहेगा, तो उन्हें ध्यान देना चाहिए कि वे भी कर सकते हैं:"{0:0>{1}}".format(number, nLeadingZeros + 1)
योनातन एलन


4

यह मेरा इसे करने का तरीका है:

str(1).zfill(len(str(total)))

मूल रूप से zfill अग्रणी शून्य की संख्या लेता है जिसे आप जोड़ना चाहते हैं, इसलिए सबसे बड़ी संख्या लेना आसान है, इसे एक स्ट्रिंग में बदल दें और लंबाई प्राप्त करें, जैसे:

पायथन 3.6.5 (डिफ़ॉल्ट, 11 मई 2018, 04:00:52) 
[जीसीसी 8.1.0] लिनक्स पर
अधिक जानकारी के लिए "सहायता", "कॉपीराइट", "क्रेडिट" या "लाइसेंस" टाइप करें।
>>> कुल = 100
>>> प्रिंट (str (1)। zfill (len (str (कुल))))
001
>>> कुल = 1000
>>> प्रिंट (str (1)। zfill (len (str (कुल))))
0001
>>> कुल = 10000
>>> प्रिंट (str (1)। zfill (len (str (कुल))))
00001
>>> 


1
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted

1

आप इसे एफ स्ट्रिंग्स के साथ कर सकते हैं ।

import numpy as np

print(f'{np.random.choice([1, 124, 13566]):0>8}')

यह 8 की निरंतर लंबाई को प्रिंट करेगा, और बाकी को अग्रणी के साथ पैड करेगा 0

00000001
00000124
00013566

0

उपयोग:

'00'[len(str(i)):] + str(i)

या mathमॉड्यूल के साथ :

import math
'00'[math.ceil(math.log(i, 10)):] + str(i)


-2

यदि उन संख्याओं से निपटना है जो या तो एक या दो अंक हैं:

'0'+str(number)[-2:] या '0{0}'.format(number)[-2:]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.