1. ホーム
  2. python

Pythonで間違った計算?

2023-09-01 06:34:17

質問

Pythonを始めたばかりなので、おそらくこれは私の間違いですが、...

私はPythonを試しています。電卓として使うのが好きで、いくつかのチュートリアルをゆっくりやっています。

今日、変なことに遭遇しました。2013*2013を調べたいのに、間違えて2013*013と書いてしまい、こうなってしまいました。

>>> 2013*013
22143

電卓で確認したところ、22143は誤答でした! 2013 * 13は26169になるはずです。

なぜPythonは間違った答えを出すのでしょうか?私の古いCasioの電卓はこんなことしないのに...。

どのように解決するのですか?

8進法のため、013は実際には整数の11になります。

>>> 013
11

先頭のゼロで 013 はbase-8の数値として解釈され、1*8 1 + 3*8 0 = 11.

注:この動作は は python 3 で変更されました。 . 以下は、特に適切な引用です。 PEP 3127

<ブロッククオート

整数のデフォルトの8進数表現は、C言語のような言語に馴染みのない人々にとって、静かに混乱を招くものです。 を無言で混乱させます。というのも というのも、間違った値を持つ整数オブジェクトをうっかり作ってしまうからです。 013' は Python 言語自身にとっては 'decimal 13' ではなく 'decimal 11' を意味するからです。 を意味し、ほとんどの人間がこの これは、ほとんどの人間がこのリテラルに割り当てる意味とは異なります。