如何检查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