2

入力ステートメントで数値を入力しようとしています。すべて問題ありません。唯一の問題は、数値を「0」で開始する場合です。それは間違った結果をもたらします。誰かが正確に何が起こったのか、なぜ間違った結果をもたらすのか説明してもらえますか?

以下に小さな例を示します。

 >>> a = input("> ")
 > 12345
 >>> a
 12345
 >>> a = input("> ")
 > 012345
 >>> a
 5349
 >>> print a
 5349
 >>> if a == 012345: print "matched"

 matched

私はこれを理解していません。助けてくれてありがとう!(Windows XP、Python 2.7.3)

4

3 に答える 3

5

Python 2 では、数値を08 進数 (基数 8) としてマークして開始します。

12345 oct = 5349 dec

于 2013-01-12T05:49:16.220 に答える
2

Python では、 で始まる数値0は 8 進法 (8 進数) として認識されます。orで始まる数字には例外が発生することに気付く0でしょう。89

補足としてinput()、入力を評価するため、Python 2 では使用しないでください。代わりに使用raw_input()してから、それを に変換しintます。基数 8 の問題を取り除きたい場合は10、2 番目の引数としてint()(基数)に渡します。

a = raw_input('> ')
try:
    a = int(a, 10)
except ValueError:
    #do something
print a
于 2013-01-12T05:49:59.227 に答える
0

inputストリームから読み取られたものは何でも評価するため、数値として読み取られ、整数として返されます。

を探しているように聞こえますraw_input。これは、ストリームから読み取られたものを文字列として提供します

(だからinput('> ')と同じeval(raw_input('> ')))

@Timが言ったように、pythonは値を8進数として解釈しているため、整数値は予期しないようです。

于 2013-01-12T05:48:37.340 に答える