如何检查stringinput是否是一个数字?

如何检查用户的stringinput是否是数字(例如-1等)?

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

以上将无法工作,因为input总是返回一个string。

只要尝试将其转换为一个int,然后保存,如果它不工作。

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

显然这不会为负值,但它会积极的。 对不起,刚刚几个小时前我刚刚了解到这一点,因为我最近刚刚进入Python。

使用isdigit()

 if userinput.isdigit(): #do stuff 

对于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 

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

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

希望这可以帮助

编辑:你也可以使用下面的代码来找出它是一个数字还是一个负面的

 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" 

你也可以改变你的格式到你的特定要求。 我看到这个post有点太晚了,但希望这有助于其他人正在寻找答案:)。 让我知道在给定的代码中是否有错误。

适用于检查input是正整数还是在特定范围内

 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) 

最优雅的解决scheme将是已经提出的,

 a=123 bool_a = a.isnumeric() 

不幸的是它不适用于负整数和一般浮点值。 如果你的观点是检查是否是一个普通的数字超过整数我会build议下面的一个,适用于每种浮点数和整数:)。 这是testing:

 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]*') 

然后用这个正则expression式,match(),findall()等来做任何你想要的

您可以对string使用isdigit()方法。 在这种情况下,正如你所说的那样,input总是一个string:

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

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

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

如果你特别需要一个int或float,你可以尝试“不是int”或“不是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)) 

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

 a = '' while a.isdigit() == False: a = input('Enter a number: ') print('You entered {}'.format(a)) 

我知道这是相当晚的,但它帮助其他人花了6个小时试图弄清楚这一点。 (那是我做的):

这工作完美无缺(检查是否有任何字母在input/检查input是整数或浮动)

 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 

这是最简单的解决scheme:

 a= input("Choose the option\n") if(int(a)): print (a); else: print("Try Again") 

今天早上我遇到了一些问题,用户可以input非整数的响应来满足特定的整数请求。

这是最终解决scheme,我强迫我想要一个答案:

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

在我使用之前,即使到达try:语句,我也会得到exception

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

用户input“J”或其他非整数字符。 最好把它作为原始input,检查原始input是否可以转换为整数,然后再转换。

这是一个检查INT和RANGEinput的简单函数。 这里,如果input是1-100之间的整数,则返回“真”,否则返回“假”

 def validate(userInput): try: val = int(userInput) if val > 0 and val < 101: valid = True else: valid = False except Exception: valid = False return valid 
 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 

这使循环来检查input是否是一个整数,结果如下所示:

 >>> %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作为input,但不是其他string,如'abc' ,你可以做以下几点:

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

我一直在使用不同的方法,我想我会分享。 从创build一个有效的范围开始:

 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(这将工作,因为列表只包含整数作为string:

 p = int(p) 

为什么不用一个数字来划分input? 这种方式适用于一切。 消极,浮游物和负浮游物。 还有空格和零。

 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: 

基于答案的启发。 我定义了一个函数如下。 看起来像它的工作正常。 请让我知道,如果你发现任何问题

 def isanumber(inp): try: val = int(inp) return True except ValueError: try: val = float(inp) return True except ValueError: return False 
 a=10 isinstance(a,int) #True b='abc' isinstance(b,int) #False