49

いくつかのコマンドを持つアプリケーションがあります。特定のコマンドを入力すると、何か/誰かに関する追加情報を入力する必要があります。その情報は、状況に応じて厳密に整数または文字列でなければなりません。

ただし、 raw_input() を使用して Python に入力したものは実際には文字列です。より具体的には、変数が数字または文字で構成されているかどうかを確認することを除いて、どうすれば簡単に試してみることができますか?

4

5 に答える 5

99

私の意見では、次の 2 つのオプションがあります。

  • に変換してみintますが、例外をキャッチします。

    try:
        value = int(value)
    except ValueError:
        pass  # it was a string, not an int.
    

    これがAsk Forgivenessアプローチです。

  • 文字列に数字しかないかどうかを明示的にテストします。

    value.isdigit()
    

    str.isdigit()True文字列内のすべての文字が数字 ( 0- ) の場合にのみ返されます9

    unicode/ Python 3のstr同等の型はunicode.isdecimal()/str.isdecimal()です。すべての数字が実際の整数値を持つわけではないため、整数に変換できるのは Unicodeの 10 進数のみです (たとえば、 U+00B2 SUPERSCRIPT 2は数字ですが、10 進数ではありません)。

    これは、Ask Permission アプローチ、または Look Before You Leap と呼ばれることがよくあります。

後者は、すべての有効なint()値を検出するわけではありません。空白と+および-int()値に使用できるからです。最初の形式は喜ん' +10 'で数値として受け入れますが、後者は受け入れません。

ユーザーが通常整数を入力すると予想される場合は、最初の形式を使用します。その場合、許可を求めるよりも許しを求める方が簡単 (かつ迅速) です。

于 2013-05-10T18:12:25.250 に答える
2

短時間の定義に応じて、次のオプションのいずれかを使用できます。

于 2013-05-10T18:16:19.033 に答える
1

チェックしないでください。先に進んで、それが正しい入力であると想定し、そうでない場合は例外をキャッチします。

intresult = None
while intresult is None:
    input = raw_input()
    try: intresult = int(input)
    except ValueError: pass
于 2013-05-10T18:12:54.413 に答える