簡體   English   中英

Python 的數學錯誤?

[英]Wrong math with Python?

剛開始使用 Python,所以這可能是我的錯誤,但是......

我正在嘗試 Python。 我喜歡用它作為計算器,我正在慢慢學習一些教程。

我今天遇到了一些奇怪的事情。 我想找出2013*2013,但是我寫錯了,寫了2013*013,得到了這個:

>>> 2013*013
22143

我用計算器查了一下,22143是錯誤的答案! 2013 * 13 應該是 26169。

為什么 Python 給了我錯誤的答案? 我的舊卡西歐計算器不會這樣做...

由於八進制運算,013實際上是整數11。

>>> 013
11

使用前導零, 013被解釋為基數為 8 的數字和 1*8 1 + 3*8 0 = 11。

注意:此行為已在 python 3更改 這是PEP 3127 中特別合適的引述

整數的默認八進制表示對於不熟悉類 C 語言的人來說是無聲的。 很容易無意中創建一個帶有錯誤值的整數對象,因為“013”對於 Python 語言本身來說意味着“十進制 11”,而不是“十進制 13”,這不是大多數人會賦予這個文字的含義.

由於前導 0, 013是八進制整數文字(相當於十進制整數文字11 )。

>>> 2013*013
22143
>>> 2013*11
22143
>>> 2013*13
26169

八進制整數文字以0開頭而十六進制整數文字以0x是很常見的(當然在我熟悉的大多數語言中)。 由於您遇到的確切混淆,Python 3 引發了 SyntaxError:

>>> 2013*013
  File "<stdin>", line 1
    2013*013
           ^
SyntaxError: invalid token

並且需要0o0O代替:

>>> 2013*0o13
22143
>>> 2013*0O13
22143 

Python 的八進制文字的“前導零”語法是一個常見的問題:

Python 2.7.3
>>> 010
8

Python 3.x 中的語法已更改http://docs.python.org/3.0/whatsnew/3.0.html#integers

這主要只是稍微擴展了@Wim 的答案,但 Python 使用某些前綴表示整數文字的基礎。 沒有前綴,整數被解釋為以 10 為基數。 使用“0x”,整數將被解釋為十六進制整數。 完整的語法規范在這里,但如果您不熟悉正式語法,理解起來有點棘手: http : //docs.python.org/2/reference/lexical_analysis.html#integers

該表本質上說,如果您想要一個 long 值(即一個超出普通 int 容量的值),請寫下數字后跟字母“L”或“l”; 如果您希望您的數字被解釋為十進制,請正常寫入數字(不帶前導 0); 如果你想用八進制解釋它,用“0”、“0o”或“0O”作為前綴; 如果你想要它的十六進制,在它前面加上“0x”; 如果你想要它是二進制的,用“0b”或“0B”作為前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM