2013-10-18 5 views
11

raw_inputが整数かどうかを確認するための方法はありますか?python 2.7でraw入力が整数かどうかを確認するにはどうすればよいですか?

print isinstance(raw_input("number: ")), int) 

が、私は、たとえばそれと入力4を実行したとき、私はFALSEを得る:

私は、Webで研究した後、この方法を見つけました。 私はPythonには新しく、どんな助けもありがたいです。

答えて

15

isinstance(raw_input("number: ")), int)結果としてraw_inputが返されるため、常にFalseが生成されます。

使用try: int(...) ... except ValueError

number = raw_input("number: ") 
try: 
    int(number) 
except ValueError: 
    print False 
else: 
    print True 

またはstr.isdigitを使用します。それは数字以外の文字が含まれているため、

print raw_input("number: ").isdigit() 

NOTEもう一つは-4ためFalseが得られます。数字だけが必要な場合は、2番目の文字を使用します。

UPDATE J.F. Sebastianは、str.isdigitはロケール依存(Windows)であると指摘しています。 Trueでもint()を返すと、入力に対してValueErrorが発生します。

>>> import locale 
>>> locale.getpreferredencoding() 
'cp1252' 
>>> '\xb2'.isdigit() # SUPERSCRIPT TWO 
False 
>>> locale.setlocale(locale.LC_ALL, 'Danish') 
'Danish_Denmark.1252' 
>>> '\xb2'.isdigit() 
True 
>>> int('\xb2') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '\xb2' 
+0

か、ありますnumber、 'number = int(number)' – SethMMorton

+1

'str.isdigit()'はロケールによって異なる場合があります(Microsoftのため)、つまり 'int() 'でも入力に対してValueErrorが発生してもTrueを返す可能性があります。 – jfs

+0

@ J.F.Sebastian、 'raw_input()'は 'unicode'オブジェクトではなく' str'オブジェクトを返します。だから私は 'str.isdigit'が期待通りに動くと思う。あなたは私に例を教えてください。 – falsetru

7

あなたは、このようにそれを行うことができます。彼らはに変数を有効にしたい場合は、ここ

try: 
    val = int(raw_input("number: ")) 
except ValueError: 
    # not an integer 
1

は、私の解決策

`x =raw_input('Enter a number or a word: ') 
y = x.isdigit() 
if (y == False): 
    for i in range(len(x)): 
     print('I'), 
else: 
    for i in range(int(x)): 
     print('I'), 

`

+0

あなたの投稿を編集して、コードの回答だけで問題が解決する方法をOPに明確にするとは限りません。 – SuperBiasedMan

0
def checker(): 
    inputt = raw_input("how many u want to check?") 
    try: 
     return int(inputt) 
    except ValueError: 
     print "Error!, pls enter int!" 
     return checker() 
関連する問題