いくつかのコマンドがあるアプリケーションがあります。特定のコマンドを入力するとき、何か/誰かに関する追加情報を入力する必要があります。情報は、状況に応じて厳密に整数または文字列にする必要があります。
ただし、raw_input()を使用してPythonに入力するものはすべて、実際には文字列です。具体的には、変数が数字で構成されているか、キャラクター?
私の意見では、2つのオプションがあります:
それをint
に変換しようとしますが、例外をキャッチします。
try:
value = int(value)
except ValueError:
pass # it was a string, not an int.
これがAsk Forgivenessアプローチです。
文字列に数字のみがあるかどうかを明示的にテストします。
value.isdigit()
str.isdigit()
は、文字列のすべての文字が数字(0
-9
)の場合にのみTrue
を返します。
unicode
/Python 3 str
型の同等物は unicode.isdecimal()
/ str.isdecimal()
;すべての数字が実際の整数値を持つわけではないため、整数に変換できるのはUnicode 10進数のみです( + 00B2 SUPERSCRIPT 2 は数字ですが、10進数ではありません)。
これは、「許可を求める」アプローチ、または「飛ぶ前に見る」と呼ばれることがよくあります。
空白と+
および-
もint()
値で許可されるため、後者はすべての有効なint()
値を検出しません。最初の形式は' +10 '
を数値として受け入れますが、後者は受け入れません。
ユーザーが通常整数を入力すると予想される場合は、最初の形式を使用します。その場合、許可を求めるよりも許しを求める方が簡単です(そしてより速く)。
それが何であるかを確認したい場合:
>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False
raw_inputからintを取得する場合
>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
except: pass
>>>isinstance(x,int)
True
isdigit
typeの-[str
メソッド は、指定された文字列が1桁以上の場合に限りTrue
を返します。そうでない場合は、文字列を単なる文字列として扱う必要があることがわかります。
の定義に応じて、次のオプションのいずれかを使用できます。
try: int(your_input); except ValueError: # ...
your_input.isdigit()
parse
を使用します。これはformat
の反対ですチェックしないでください。先に進み、それが正しい入力であると仮定し、そうでない場合は例外をキャッチします。
intresult = None
while intresult is None:
input = raw_input()
try: intresult = int(input)
except ValueError: pass