• ベストアンサー

pythonの8進数表記

print('\141')の141が8進数として解釈される理由がわかりません。0oついていないのに、なぜ10進数ではなく8進数になるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.2

>print('\141')の141が8進数として解釈される理由がわかりません。 \ooo は8進数の表現ではありません。 「\(3桁以内の8進数表記)」という書き方をした場合に、そのコードを持つ1文字を表す」というエスケープシーケンスだから、「\〇〇〇」を使うときには8進数で書かないといけないのです。 >Python | エスケープシーケンスを使用する >https://www.javadrive.jp/python/string/index2.html 「8進数」と規定されているので、8・9の文字を使うとエラーになります。 0~7の数字だけであっても、4桁以上はエラーになります。 もっと正確に言うと、8ビット最大の\o377以下でないといけないようです。 「1文字を表すときに、8進数表記をしたいときには『\〇〇〇』を使う」という決まりなので、Pythonの仕様として覚えるほかありません。 「なんでわざわざ文字コードを8進数表現するんだ」という事に疑問は出るとは思いますが、理由は忘れました。 とても古い歴史的経緯があるんだと思います。 その、過去の互換性のために残されている表記ですので、自分が必要なければ使う必要はありません。 私も文字コードを直接使う場合は、「\x〇〇」の16進数表記する方が多いですね…8進数表記なんてすっかり忘れていました。

subarist00
質問者

お礼

ご教示ありがとうございます。ルールがあってそうなるのではなく、そういうものとして決めたというのが先にあるんですね。ルールが理解できていないのかと思ってずっと調べていました。ありがとうございます。

その他の回答 (1)

  • retorofan
  • ベストアンサー率34% (435/1276)
回答No.1

Pythonでは、文字列内の エスケープシーケンス\に続く数字は8進数として解釈されます。 Pythonで8進数を明示的に表現する場合、数値の先頭に0oを付けます。 0o141は8進数の141を表し、これは10進数で97に相当します。

subarist00
質問者

お礼

ご回答ありがとうございます。

関連するQ&A