关于python:如何检查字符串输入是否为数字?

How to check if string input is a number?

本问题已经有最佳答案,请猛点这里访问。

如何检查用户的字符串输入是否为数字(例如-101等)?

1
2
3
4
5
6
user_input = input("Enter something:")

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

由于input始终返回一个字符串,因此上述操作无效。


只需尝试将其转换为int,然后如果它不起作用则挽救。

1
2
3
4
try:
   val = int(userInput)
except ValueError:
   print("That's not an int!")


显然这对负面价值不起作用,但它会是积极的。对此感到抱歉,几个小时前我刚刚了解了这一点,因为我刚刚进入Python。

使用isdigit()

1
2
if userinput.isdigit():
    #do stuff


我认为你在这里寻找的是方法isnumeric()(python3.x的文档):

1
2
3
>>>a = '123'
>>>a.isnumeric()
true

希望这可以帮助


对于Python 3,以下内容将起作用。

1
2
3
4
5
6
7
8
9
10
userInput = 0
while True:
  try:
     userInput = int(input("Enter something:"))      
  except ValueError:
     print("Not an integer!")
     continue
  else:
     print("Yes an integer!")
     break


编辑:
您也可以使用下面的代码来查明它是一个数字还是一个负数

1
2
3
4
5
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"

您也可以根据具体要求更改格式。
我看到这篇文章有点太晚了。但希望这有助于其他寻找答案的人:)。如果给定的代码中有任何错误,请告诉我。


如果您特别需要int或float,可以尝试"is not int"或"is not float":

1
2
3
4
5
6
7
8
9
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))

如果你只需要使用整数,那么我见过的最优雅的解决方案是".isdigit()"方法:

1
2
3
4
5
a = ''
while a.isdigit() == False:
    a = input('Enter a number: ')

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

对于负数,我会推荐这个,@ karthik27

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

然后用正则表达式,match(),findall()等做任何你想做的事情


最优雅的解决方案是已经提出的,

1
2
a=123
bool_a = a.isnumeric()

不幸的是,它对于负整数和a的一般浮点值都不起作用。如果您要检查'a'是否是整数以外的通用数字,我建议使用以下数字,这适用于各种浮点数和整数:)。这是测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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

希望对你有帮助 :)


如果有输入,可以正常检查
正整数AND在特定范围内

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)


您可以对字符串使用isdigit()方法。
在这种情况下,正如您所说,输入始终是一个字符串:

1
2
3
4
5
    user_input = input("Enter something:")
    if user_input.isdigit():
        print("Is a number")
    else:
        print("Not a number")

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

Python 2

1
it_is = unicode(user_input).isnumeric()

Python 3

1
it_is = str(user_input).isnumeric()

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

1
2
3
4
5
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,
......,∞]

1
2
3
4
5
try:
    float(user_input)
    it_is = True
 except ValueError:
    it_is = False


这个解决方案只接受整数,只接受整数。

1
2
3
4
5
6
7
8
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:"))

为什么不用数字来划分输入?这种方式适用于一切。负数,浮点数和负浮点数。空格和零。

1
2
3
4
5
6
7
8
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

结果:

1
2
3
4
5
6
7
8
9
10
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:

这适用于任何数字,包括分数:

1
2
3
4
5
6
7
8
9
10
11
12
import fractions

def isnumber(s):
   try:
     float(s)
     return True
   except ValueError:
     try:
       Fraction(s)
       return True
     except ValueError:
       return False


我知道这已经很晚了,但它可以帮助其他人不得不花费6个小时来解决这个问题。 (多数民众赞成我所做的):

这完美无缺:(检查输入中是否有任何字母/检查输入是整数还是浮点数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
2
3
4
5
6
7
a= input("Choose the option
"
)

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


今天早上我也遇到了问题,用户可以输入非整数响应来解决我对整数的特定请求。

这个解决方案最终很适合我强制我想要的答案:

1
2
3
4
5
6
7
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:语句之前我会得到异常

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

并且用户输入"J"或任何其他非整数字符。最好将它作为原始输入,检查原始输入是否可以转换为整数,然后转换它。


这是一个检查INT和RANGE输入的简单函数。这里,如果输入是1-100之间的整数,则返回'True',否则返回'False'

1
2
3
4
5
6
7
8
9
10
11
12
13
def validate(userInput):

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

    except Exception:
        valid = False

    return valid


试试这个! 即使我输入负数,它也适用于我。

1
2
3
4
5
6
7
8
9
10
  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)))


1
2
3
4
5
6
7
8
9
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

这会产生一个循环来检查输入是否为整数,结果如下所示:

1
2
3
4
5
6
7
8
>>> %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.
>>>

如果您想评估浮点数,并且您希望接受NaN s作为输入而不接受其他字符串(如'abc'),则可以执行以下操作:

1
2
3
4
5
6
def isnumber(x):
    import numpy
    try:
        return type(numpy.float(x)) == float
    except ValueError:
        return False

我一直在使用我认为我会分享的不同方法。首先创建一个有效范围:

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

现在要求一个号码,如果不在列表中继续询问:

1
2
3
4
p = input("Enter a number:")

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

最后转换为int(这将起作用,因为list只包含整数作为字符串:

1
p = int(p)

基于答案的灵感。我定义了一个函数如下。看起来它的工作正常。如果您发现任何问题,请告诉我

1
2
3
4
5
6
7
8
9
10
def isanumber(inp):
    try:
        val = int(inp)
        return True
    except ValueError:
        try:
            val = float(inp)
            return True
        except ValueError:
            return False

1
2
3
4
5
6
7
a=10

isinstance(a,int)  #True

b='abc'

isinstance(b,int)  #False