2014-04-06 80 views
0

我是新來的Python編程人員。在Python中打印查詢

打算讓自己從基礎蟒...和整個這個奇怪的事情來了......

請看以下的打印結果...

>>> print 1,000,000 
1 0 0 
>>> print 1,112,231 
1 112 231 
>>> print 000 
0 
>>> print 1,001,002 
1 1 2 
>>> print 1,100,001,0010 
1 100 1 8 

雖然我也明白, 0010是8的二進制等價物(在最後一個),我不明白爲什麼Python會這樣做?它是語言的一些嵌入式邏輯還是其他的東西?

剩下的,我能弄明白;但是,如果任何人都可以給出一個簡短的解釋,那就太棒了

+0

你可以發佈那麼做的代碼嗎?你想做什麼?打印8的二進制表示?你想看看1000而不是8嗎? (順便說一下,'0010'是2,二進制,八進制8,你可能看到了八進制,而不是二進制) – BorrajaX

回答

0

以'0'開始的Python文字告訴它以八進制表示。以'0x'開頭的文字是十六進制的。以'0b'開頭的文字是二進制的。

print 0010 
8 

print 0b110011 
51 

print 0x100 
256 

我還測試了我的Python 2.7.6的「0°」,並得到

print 0o111 # number 0 letter o followed by digits 
73 

注意的Python 3將打印0111爲111,因爲它被認爲治療0領先的一部分的小數,除非它後面跟着'x','o'或'b'我沒有Python 3,所以我不能自己測試這個。

感謝@AdamSmith在他的評論中指出了這一點。

1

正如評論說:

當您0在Python啓動一個數字,它假定它是一個八進制數。看到這個問題:What do numbers starting with 0 mean in python?

那麼你看到的最後一種情況是八進制10,這是8分十進制小數表示:

0010 --> 0*8^2 + 1*8^1 + 0*8^0 

如果你這樣做print 0111你會看到73的,因爲它在基座8 1*8^2 + 1*8^1 + 1*8^064 + 8 + 1

print 000仍打印八進制000的十進制表示,但零是在鹼相同0 10

編輯:感謝@AdamSmith指出Python 3中的新行爲。

+1

請注意,這在Python3中不再成立。現在你必須明確地使用'0o111'(以匹配'0x'和'0b'的格式) –

+0

@AdamSmith,有趣...(和有用的加法)。我仍然堅持使用Python 2.7 **: - D ** – BorrajaX

+0

@AdamSmith我在我的家庭Python 2.7.6上測試了它,它的工作原理也是一樣的。顯然0111和0o111給出了相同的結果。 – sabbahillel