2012-07-23 17 views
39

जब मैं पाइथन में 0 के साथ छोटे पूर्णांक टाइप करता हूं, तो वे अजीब परिणाम देते हैं। ऐसा क्यों है?पाइथन में 0 से शुरू होने वाली संख्याएं क्या हैं?

>>> 011 
9 
>>> 0100 
64 
>>> 027 
23 

नोट: अजगर संस्करण 2.7.3 मैं अजगर 3.0 में यह परीक्षण किया है, और जाहिरा तौर पर यह अब कोई त्रुटि है। तो यह कुछ संस्करण-विशिष्ट है।

संपादित करें: वे जाहिरा तौर पर अभी भी पूर्णांक हैं:

>>> type(027) 
`<type 'int'>` 

उत्तर

44

ये 8 (ऑक्टल अंक) आधार में प्रतिनिधित्व नंबर दिए गए हैं। उदाहरण के लिए,

0111*(8**1) + 1*(8**0) = 9 के बराबर है,

01001*(8**2) + 0*(8**1) + 0*(8**0) = 64 के बराबर है,

0272*(8**1) + 7*(8**0) = 16 + 7 = 23.

+0

शायद डबल तारांकन एक घातीय स्थिति को स्पष्ट करने का सबसे स्पष्ट तरीका नहीं है। यदि यह एक स्टैक ओवरफ्लो स्टैंटर्ड है, या कहीं और स्टैंटर्ड है, तो इसे बदला जाना चाहिए। –

+11

@DavidL: अजगर में, [ '' ** घातीय ऑपरेटर है] (https://docs.python.org/2/tutorial/introduction.html#numbers), और [ '^' बिटवाइज़ XOR है] (https : //wiki.python.org/moin/BitwiseOperators)। – unutbu

+1

बस ध्यान दें, पायथन 3 में, '011' दर्ज करने से' सिंटेक्स त्रुटि: अमान्य टोकन 'होगा। इसके बजाए '0o11' का प्रयोग करें। – chenghuayang

4

है कि के बराबर है बहुत आसान। वे ऑक्टल संख्याएं हैं।

http://en.wikipedia.org/wiki/Octal

इसके अलावा वहाँ संख्या 0x साथ शुरू कर रहे हैं कि कर रहे हैं। -

आप oct() समारोह के साथ ऑक्टल किसी दशमलव संख्या को परिवर्तित कर सकते हैं

>>> 0x51 
81 
5

ये ऑक्टल अंक हैं (7 आधार 8, महत्व देता 0): वे हेक्साडेसिमल संख्याओं हैं।

In [125]: for i in range(10): 
    .....:  print '{:5} {:5}'.format(i, oct(i)) 
    .....: 
    0 0 
    1 01 
    2 02 
    3 03 
    4 04 
    5 05 
    6 06 
    7 07 
    8 010 
    9 011 

और (इस मामले में 8) उचित आधार के साथ int() समारोह के साथ पूर्णांक एक अष्टाधारी मूल्य कन्वर्ट:

int(str(17), 8) 
Out[129]: 15 

नियमों के समान सेट/कार्य हेक्साडेसिमल संख्याओं (आधार 16 के लिए आवेदन) hex() फ़ंक्शन का उपयोग कर।

5

ऑक्टल संख्यात्मक प्रणाली में संख्याएं। बाइनरी के लिए हेक्साडेसिमल और 0b के लिए अन्य उपसर्ग 0x हैं।

+3

और ध्यान दें कि पायथन 3 में, अग्रणी शून्य की अनुमति नहीं है और आपको ऑक्टल के लिए '0o' का उपयोग करना होगा। –

34

पायथन 2 (और कुछ और प्रोग्रामिंग भाषाओं) में, ये octal numbers का प्रतिनिधित्व करते हैं।

अजगर 3 में, 011 नहीं रह गया काम करता है और आप 0o11 बजाय प्रयोग करेंगे।

संपादित करने के जवाब में: और वे नियमित पूर्णांक हैं। वे सिर्फ अलग तरीके से निर्दिष्ट हैं; और वे स्वचालित रूप से पाइथन द्वारा एक आंतरिक पूर्णांक प्रतिनिधित्व में परिवर्तित हो जाते हैं (जो वास्तव में आधार -2 है, इसलिए 9 और 011 दोनों आंतरिक रूप से 0b1001 में परिवर्तित हो गए हैं)।

2

वे स्पष्ट रूप से ऑक्टल (बेस 8) संख्याएं हैं, और 0 केवल पुराना उपसर्ग है जो पायथन 2 उपयोग करने के लिए उपयोग किया जाता है।

पायथन 3 में आपको लिखना होगा: 0o11 इसके बजाय।

वे अभी भी पूर्णांक हैं लेकिन उनके साथ संचालन करने से नियमित आधार -10 रूप में परिणाम मिलेगा।

4

दोनों पायथन संस्करण 2 & 3 '0o' और '0O' (अपरकेस ओ) के साथ लिखित ऑक्टल को समझते हैं, इसलिए पाइथन 2.x के साथ काम करते समय भी उपयोग करने की आदत में रहें।

केवल तार में संख्या में अग्रणी शून्य का उपयोग करें।

आप int() के साथ किसी भी अन्य बेस सिस्टम से पूर्णांक को परिवर्तित कर सकते हैं।

>>> int(0o20)

16 

आप अपने उत्पादन, पहले शून्य प्रदर्शित करने के लिए तो यह प्रति जवाब इसे परिभाषित करना चाहते हैं: Display number with leading zeros

क्या तुमने कभी ज़िप कोड के साथ काम करने की योजना है, यह सबसे अच्छा इलाज के लिए है उन्हें सभी तरीकों से तार के रूप में।

संबंधित मुद्दे