[英]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
並且需要0o
或0O
代替:
>>> 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.