web-dev-qa-db-ja.com

文字列の入力が数値かどうかを確認する方法

ユーザーの文字列入力が数値かどうかを確認するにはどうすればよいですか(例:-101など)。

user_input = input("Enter something:")

if type(user_input) == int:
    print("Is a number")
else:
    print("Not a number")

inputは常に文字列を返すので、上記は機能しません。

120
Trufa

単にそれをintに変換して、うまくいかない場合はそれを救済してみてください。

try:
   val = int(userInput)
except ValueError:
   print("That's not an int!")
227
Daniel DiPaolo

どうやらこれは負の値ではうまくいきませんが、正の値ではうまくいきます。申し訳ありませんが、最近Pythonに習ったばかりなので、数時間前に自分自身でこのことについて学びました。

Isdigit()を使う

if userinput.isdigit():
    #do stuff
65
jmichalicek

ここで探しているのはメソッドisnumeric()python3.xのドキュメント ):

>>>a = '123'
>>>a.isnumeric()
true

お役に立てれば

29

Python 3では、以下がうまくいきます。

userInput = 0
while True:
  try:
     userInput = int(input("Enter something: "))       
  except ValueError:
     print("Not an integer!")
     continue
  else:
     print("Yes an integer!")
     break 
19
RazorX

編集:あなたはまた、その数または負数であるかどうかを調べるために、この下のコードを使用することができます

import re
num_format = re.compile("^[\-]?[1-9][0-9]*\.?[0-9]+$")
isnumber = re.match(num_format,givennumber)
if isnumber:
    print "given string is number"

あなたはまたあなたの特定の要求にあなたのフォーマットを変えることができます。私はこの投稿が少し遅すぎるのを見ています。しかしこれが答えを探している他の人に役立つことを願っています:)。与えられたコードに何か問題があるかどうかを教えてください。

11
karthik27

特にintやfloatが必要な場合は、 "is not int"または "is not float"を試してください。

user_input = ''
while user_input is not int:
    try:
        user_input = int(input('Enter a number: '))
        break
    except ValueError:
        print('Please enter a valid number: ')

print('You entered {}'.format(a))

あなたがintで作業する必要があるだけならば、私が見た中で最もエレガントな解決策は ".isdigit()"メソッドです:

a = ''
while a.isdigit() == False:
    a = input('Enter a number: ')

print('You entered {}'.format(a))
8
Woody

入力が特定の範囲内で正の整数ANDであるかどうかをチェックするのに問題なく動作します。

def checkIntValue():
    '''Works fine for check if an **input** is
   a positive Integer AND in a specific range'''
    maxValue = 20
    while True:
        try:
            intTarget = int(input('Your number ?'))
        except ValueError:
            continue
        else:
            if intTarget < 1 or intTarget > maxValue:
                continue
            else:
                return (intTarget)
5
user2196332

最もエレガントな解決策はすでに提案されているでしょう、

a=123
bool_a = a.isnumeric()

残念ながら、負の整数とaの一般的なfloat値の両方には機能しません。あなたのポイントが 'a'が整数を超えた一般的な数であるかどうかをチェックすることであるならば、私は以下のものを提案するでしょう。これがテストです。

def isanumber(a):

    try:
        float(repr(a))
        bool_a = True
    except:
        bool_a = False

    return bool_a


a = 1 # integer
isanumber(a)
>>> True

a = -2.5982347892 # general float
isanumber(a)
>>> True

a = '1' # actually a string
isanumber(a)
>>> False

私はあなたがそれが便利だと思うことを願っています:)

負の数には、@ karthik27をお勧めします。

import re
num_format = re.compile(r'^\-?[1-9][0-9]*\.?[0-9]*')

それから、その正規表現、match()、findall()などを使って、何でもします。

5
rachit_verma

文字列にはisdigit()メソッドを使用できます。この場合、あなたが言ったように入力は常に文字列です:

    user_input = input("Enter something:")
    if user_input.isdigit():
        print("Is a number")
    else:
        print("Not a number")
4
Raj Shah

このソリューションは整数のみを受け入れ、整数以外は受け入れません。

def is_number(s):
    while s.isdigit() == False:
        s = raw_input("Enter only numbers: ")
    return int(s)


# Your program starts here    
user_input = is_number(raw_input("Enter a number: "))
4
Salam

自然:[0、1、2 ...∞]

Python 2

it_is = unicode(user_input).isnumeric()

Python 3

it_is = str(user_input).isnumeric()

整数:[-∞、..、-2、-1、0、1、2、∞]

try:
    int(user_input)
    it_is = True
 except ValueError:
    it_is = False

float:[-∞、..、-2、-1.0 ... 1、-1、-0.0 ... 1、0、0.0 ... 1、...、1、1.0 ... 1、...、∞]

try:
    float(user_input)
    it_is = True
 except ValueError:
    it_is = False
3
Luis Sieira

これは端数を含む任意の数で機能します。

import fractions

def isnumber(s):
   try:
     float(s)
     return True
   except ValueError:
     try: 
       Fraction(s)
       return True
     except ValueError: 
       return False
3
Antoni Gual Via

入力を数値で除算しないのはなぜですか。この方法はすべてに有効です。マイナス、フロート、マイナスフロート。空白スペースとゼロもあります。

numList = [499, -486, 0.1255468, -0.21554, 'a', "this", "long string here", "455 street area", 0, ""]

for item in numList:

    try:
        print (item / 2) #You can divide by any number really, except zero
    except:
        print "Not A Number: " + item

結果:

249
-243
0.0627734
-0.10777
Not A Number: a
Not A Number: this
Not A Number: long string here
Not A Number: 455 street area
0
Not A Number: 
3
SPYBUG96

私はこれがかなり遅いことを知っていますが、これを理解しようとするのに6時間を費やさなければならなかった他の誰かを助けるためです。 (それは私がしたことです):

これは完璧に動作します。(入力に文字が含まれているかどうかをチェックします/入力が整数か浮動小数点かをチェックします)

a=(raw_input("Amount:"))

try:
    int(a)
except ValueError:
    try:
        float(a)
    except ValueError:
        print "This is not a number"
        a=0


if a==0:
    a=0
else:
    print a
    #Do stuff
1
ReadyToHelp

浮動小数点数を評価し、入力としてNaNsを受け入れたいが'abc'のような他の文字列を受け入れたくない場合は、次のようにします。

def isnumber(x):
    import numpy
    try:
        return type(numpy.float(x)) == float
    except ValueError:
        return False
0
ryanjdillon

これはINTとRANGEの入力をチェックする簡単な関数です。ここで、入力が1〜100の整数の場合は 'True'、それ以外の場合は 'False'を返します。

def validate(userInput):

    try:
        val = int(userInput)
        if val > 0 and val < 101:
            valid = True
        else:
            valid = False

    except Exception:
        valid = False

    return valid
0
Jesse Downing

私は共有したいと思っていた別のアプローチを使っています。有効範囲の作成から始めます。

valid = [str(i) for i in range(-10,11)] #  ["-10","-9...."10"] 

今番号を頼み、リストになければ尋ね続けなさい:

p = input("Enter a number: ")

while p not in valid:
    p = input("Not valid. Try to enter a number again: ")

最後にintに変換します(listは文字列として整数しか含まないのでうまくいきます:

p = int(p)
0
Anton vBR

これを試して!負の数を入力してもそれは私のために働きました。

  def length(s):
    return len(s)

   s = input("Enter the String: ")
    try:
        if (type(int(s)))==int :
            print("You input an integer")

    except ValueError:      
        print("it is a string with length " + str(length(s)))   
0
while True:
    b1=input('Type a number:')
    try:
        a1=int(b1)
    except ValueError:
        print ('"%(a1)s" is not a number. Try again.' %{'a1':b1})       
    else:
        print ('You typed "{}".'.format(a1))
        break

これは、入力が整数かどうかを調べるループを作ります。結果は以下のようになります。

>>> %Run 1.1.py
Type a number:d
"d" is not a number. Try again.
Type a number:
>>> %Run 1.1.py
Type a number:4
You typed 4.
>>> 
0
Nima Sajedi

これが最も簡単な解決策です:

a= input("Choose the option\n")

if(int(a)):
    print (a);
else:
    print("Try Again")
0
Pb Studies

私はまた今朝問題に遭遇しました、ユーザーが私の特定の整数の要求に整数以外の応答を入力することができた。

これが、私が望んだ答えを強制するためにうまく機能するようになった解決策でした。

player_number = 0
while player_number != 1 and player_number !=2:
    player_number = raw_input("Are you Player 1 or 2? ")
    try:
        player_number = int(player_number)
    except ValueError:
        print "Please enter '1' or '2'..."

使用したときにtry:文に到達する前に、例外が発生します。

player_number = int(raw_input("Are you Player 1 or 2? ") 

ユーザーが "J"またはその他の整数以外の文字を入力した。生の入力として受け取り、その生の入力が整数に変換できるかどうかを確認し、その後それを変換するのが最善の方法です。

0
John Worrall