2014-04-06 81 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