How to check if string input is a number?
如何检查用户的字符串输入是否为数字(例如
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") |
由于
只需尝试将其转换为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 |
我认为你在这里寻找的是方法
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. >>> |
如果您想评估浮点数,并且您希望接受
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 |