Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查字符串输入是否为数字?_Python_Input_Types - Fatal编程技术网

Python 如何检查字符串输入是否为数字?

Python 如何检查字符串输入是否为数字?,python,input,types,Python,Input,Types,如何检查用户的字符串输入是否为数字(例如-1、0、1等) 上述方法不起作用,因为输入总是返回字符串。只要尝试将其转换为int,如果不起作用,就退出 try: val = int(userInput) except ValueError: print("That's not an int!") 请参阅处理异常显然,这不适用于负值,但适用于正数 使用isdigit() 对于Python3,以下内容将起作用 userInput = 0 while True:

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


上述方法不起作用,因为
输入总是返回字符串。

只要尝试将其转换为int,如果不起作用,就退出

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

请参阅处理异常

显然,这不适用于负值,但适用于正数

使用
isdigit()


对于Python3,以下内容将起作用

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

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

import fractions

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

检查输入是否为正常工作 一个特定范围内的正整数

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)
def checkIntValue():
如果**输入**为空,则“检查”可以正常工作
一个正整数,且在特定范围“”内
最大值=20
尽管如此:
尝试:
intTarget=int(输入('您的号码?'))
除值错误外:
持续
其他:
如果intTarget<1或intTarget>maxValue:
持续
其他:
返回(intTarget)
编辑: 您还可以使用下面的代码来确定它是数字还是负数

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"
您还可以根据自己的具体要求更改格式。
我看到这篇文章有点晚了。但希望这能帮助其他正在寻找答案的人:)。如果给定代码中有任何错误,请告诉我。

对于负数,我建议使用@karthik27

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

然后对正则表达式match()、findall()等执行任意操作。今天早上,我还遇到了一些问题,用户无法输入非整数响应,以响应我对整数的特定请求

这就是最终对我有效的解决方案,它迫使我给出我想要的答案:

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'..."
当我使用

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

用户输入“J”或任何其他非整数字符。最好是将其作为原始输入,检查原始输入是否可以转换为整数,然后再进行转换。

我知道这已经很晚了,但它可以帮助其他需要花费6个小时来解决这个问题的人。(我就是这么做的):

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

方法
isnumeric()
将执行此任务():

但请记住:

>>>a = '-1'
>>>a.isnumeric()
False
isnumeric()
如果字符串中的所有字符都是数字字符,并且至少有一个字符,则返回True


所以负数是不被接受的。

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

a=10

isinstance(a,int)  #True

b='abc'

isinstance(b,int)  #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
def验证(用户输入):
尝试:
val=int(用户输入)
如果val>0且val<101:
有效=真
其他:
有效=错误
除例外情况外:
有效=错误
返回有效

以下是最简单的解决方案:

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

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

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

a=123
bool_a = a.isnumeric()
不幸的是,它对负整数和a的一般浮点值都不起作用。如果您的目的是检查“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

我希望你们觉得它有用:)

基于答案的启发。我定义了一个函数,如下所示。看起来它很好用。如果您发现任何问题,请告诉我

def isanumber(inp):
    try:
        val = int(inp)
        return True
    except ValueError:
        try:
            val = float(inp)
            return True
        except ValueError:
            return False
这将生成一个循环来检查输入是否为整数,结果如下所示:

>>> %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'
,则可以执行以下操作:

def isnumber(x):
    import numpy
    try:
        return type(numpy.float(x)) == float
    except ValueError:
        return False
可以对字符串使用isdigit()方法。 在这种情况下,正如您所说,输入始终是一个字符串:

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

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

如果您只需要使用int,那么我见过的最优雅的解决方案是“.isdigit()”方法:


我一直在使用一种不同的方法,我想与大家分享。从创建有效范围开始:

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(这将起作用,因为列表仅包含作为字符串的整数:

p = int(p)

为什么不将输入除以一个数字呢?这种方法适用于所有情况。负数、浮点数和负数浮点数。还有空格和零

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: 

自然的:[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
 
浮动:[-∞, .., -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

此解决方案只接受整数,只接受整数

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: "))

试试这个!即使我输入负数,它也对我有效

  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)))   
这将有助于:

print(user_input.isnumeric())
这将检查字符串中是否只有数字并且长度至少为1。 但是,如果尝试使用带有负数的字符串的isnumeric,isnumeric将返回
False

这是一个适用于负数和正数的解决方案

try:
    user_input = int(user_input)
except ValueError:
    pass  # user_input is not a numeric string!
您可以键入:

user_input = input("Enter something: ")

if type(user_input) == int:
    print(user_input, "Is a number")
else:
    print("Not a number")
  
try:
    val = int(user_input)
except ValueError:
    print("That's not an int!")

“-1”。isdigit()==False它对浮点数有效吗?我不这么认为,Llopis。当我给出这个答案时,在我知道足够多之前,我就开始回答问题了。我会像Daniel DiPaolo对int的回答一样,但使用float()而不是int().负数和浮点数返回false,因为“-”和“.”不是数字。isdigit()函数检查字符串中的每个字符是否在“0”和“9”之间。请使用
isdecimal
而不是
isdigit
,因为
isdigit
是一种不安全的测试,它将unicode幂-of-2,²等字符识别为无法转换为整数的数字。我不知道在“输入总是返回字符串”中是否是科雷吗
try:
    int(user_input)
    it_is = True
except ValueError:
    it_is = False
 
try:
    float(user_input)
    it_is = True
except ValueError:
    it_is = False
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: "))
  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)))   
print(user_input.isnumeric())
try:
    user_input = int(user_input)
except ValueError:
    pass  # user_input is not a numeric string!
user_input = input("Enter something: ")

if type(user_input) == int:
    print(user_input, "Is a number")
else:
    print("Not a number")
  
try:
    val = int(user_input)
except ValueError:
    print("That's not an int!")