重複の可能性:
Python でバイナリ リテラルをどのように表現しますか?
対話型シェルを使用する場合:
print 010
8を返します。
私は以前にゼロを持つ他の数字(0110 = 72、013 = 11)を使って遊んでいましたが、それを理解できませんでした...
ここで何が起こっているのですか?
重複の可能性:
Python でバイナリ リテラルをどのように表現しますか?
対話型シェルを使用する場合:
print 010
8を返します。
私は以前にゼロを持つ他の数字(0110 = 72、013 = 11)を使って遊んでいましたが、それを理解できませんでした...
ここで何が起こっているのですか?
先頭にゼロを付けて入力した数値は、8 進数 (基数 8) として解釈されます。
007 == 7
010 == 8
011 == 9
Python は、8 進数と 16 進数のリテラルに C の表記法を採用しまし0
た0x
。
0
プレフィックスはエラーが発生しやすいと見なされたため、Python 3.0 では 8 進数のプレフィックスが に変更されました0o
。
多くの言語と同様に、先行ゼロの整数は 8 進数として解釈されます。これは、8 進法であることを意味します。たとえば、020 の 10 進値は 16 で、030 の 10 進値は 24 です。完全を期すために、このように動作します。value
文字列を受け取り、8 進数として解釈されたその文字列の 10 進数値を返します。エラーチェックは行わないので、各桁が 0 から 8 の間であることを確認する必要があります。先頭の 0 は必要ありません。
def value(s):
digits = [int(c) for c in s]
digits.reverse()
return sum(d * 8**k for k, d in enumerate(digits))