【问题标题】:In Python, why does 04000 // 1000 return 2?在 Python 中,为什么 04000 // 1000 返回 2?
【发布时间】:2018-07-19 22:09:01
【问题描述】:

我正在尝试使用地板除法将 5 位数字分成其数字,然后为每个数字取模。 为什么 04000 // 1000 返回 2?

>>> 04//1
4
>>> 040//10
3
>>> 0400//100
2
>>> 04000//1000
2
>>> 4//1
4
>>> 40//10
4
>>> 400//100
4
>>> 4000//1000
4

【问题讨论】:

  • 请详细说明问题,您找到问题了吗

标签: python math floor-division


【解决方案1】:

因为 Python 2 中的八进制数以 0 开头。实际上是十进制的 2048。

>>> 04000
2048

Python 3 将此行为更改为使用 0o 作为八进制的修饰符:

>>> 04000
  File "<stdin>", line 1
    04000
        ^
SyntaxError: invalid token
>>> 0o4000
2048

【讨论】:

  • 谢谢!那么我的五位数据结构不可能使用整数吗?将其存储为字符串并进行转换似乎不优雅。
  • @BrianFu 您是如何将整数输入程序的?在内部,整数是二进制的。它可以显示为十进制、八进制、十六进制等,但这涉及转换为字符串进行显示。 int('04000',10) 会将 5 位输入字符串转换为您想要的整数值。
  • @BrianFu:一点也不;完全有可能!不可能将源代码中的整数 literals 写为 5 位数字,并带有前导 0。这并不意味着您不能将数据存储在 int 类型的东西中。
【解决方案2】:

好吧,04000八进制 == 2048(十进制)

 04000 // 1000 == 
  2048 // 1000 == 
     2 # integer division

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 2011-12-19
    • 1970-01-01
    • 2023-01-16
    • 2017-12-17
    • 1970-01-01
    • 2017-03-30
    • 2012-12-12
    • 2020-08-04
    相关资源
    最近更新 更多