如何检查用户的字符串输入是否为数字(例如-1
,0
,1
等?)
user_input = input("Enter something:")
if type(user_input) == int:
print("Is a number")
else:
print("Not a number")
由于input
始终返回字符串,因此上述操作无效。
答案 0 :(得分:225)
只需尝试将其转换为int,然后如果不起作用则挽救。
try:
val = int(userInput)
except ValueError:
print("That's not an int!")
答案 1 :(得分:65)
显然这对负值不起作用,但它会为正面。对此感到抱歉,几个小时前我刚刚了解了这一点,因为我刚刚进入Python。
使用isdigit()
if userinput.isdigit():
#do stuff
答案 2 :(得分:28)
答案 3 :(得分:19)
对于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
答案 4 :(得分:11)
EDITED: 你也可以使用下面的代码来查明它是一个数字还是一个负数
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"
您也可以根据具体要求更改格式。 我看到这篇文章有点太晚了。但希望这有助于其他寻找答案的人:)。如果给定的代码中有任何错误,请告诉我。
答案 5 :(得分:8)
如果您特别需要int或float,可以尝试“is not int”或“is not 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))
如果您只需要使用整数,那么我见过的最优雅的解决方案是“.isdigit()”方法:
a = ''
while a.isdigit() == False:
a = input('Enter a number: ')
print('You entered {}'.format(a))
答案 6 :(得分:5)
最优雅的解决方案将是已经提出的,
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
我希望你觉得它很有用:)
答案 7 :(得分:5)
我推荐这个,@ karthik27,负数
import re
num_format = re.compile(r'^\-?[1-9][0-9]*\.?[0-9]*')
然后用正则表达式,match(),findall()等做任何你想做的事。
答案 8 :(得分:5)
如果输入,则检查正常 正整数AND在特定范围内
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)
答案 9 :(得分:4)
此解决方案只接受整数,只接受整数。
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: "))
答案 10 :(得分:4)
您可以对字符串使用isdigit()方法。 在这种情况下,正如您所说,输入始终是一个字符串:
user_input = input("Enter something:")
if user_input.isdigit():
print("Is a number")
else:
print("Not a number")
答案 11 :(得分:3)
自然:[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
float :[ - ∞,.., - 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
答案 12 :(得分:3)
为什么不用数字来划分输入?这种方式适用于一切。负数,浮点数和负浮点数。空格和零。
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:
答案 13 :(得分:3)
这适用于任何数字,包括分数:
import fractions
def isnumber(s):
try:
float(s)
return True
except ValueError:
try:
Fraction(s)
return True
except ValueError:
return False
答案 14 :(得分:1)
我知道这已经很晚了,但它可以帮助那些不得不花费6个小时试图解决这个问题的人。 (这就是我所做的):
这完美无缺:(检查输入中是否有任何字母/检查输入是整数还是浮点数)
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
答案 15 :(得分:0)
您可以输入:
db = FirebaseDatabase.getInstance().getReference("REPORTED-CUBS")
geofire = GeoFire(db!!.child("REPORTED-CUBS-LOCATION"))
val r_cubs_al = ArrayList<DataModel>()
geoQuery = geofire!!.queryAtLocation(GeoLocation(latitude, longitude), 3.0)
try {
geoQuery!!.addGeoQueryEventListener(object : GeoQueryEventListener {
override fun onKeyEntered(key: String, location: GeoLocation) {
try {
db!!.child(key)
.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val r_cubs: DataModel? =
snapshot.getValue(DataModel::class.java)
if (r_cubs != null) {
rv_police.visibility = View.VISIBLE
tvNoCUBSReported.visibility = View.GONE
r_cubs_al.add(r_cubs)
rv_police.adapter = ReportedCUBSAdapter(r_cubs_al)
}else{
rv_police.visibility = View.GONE
tvNoCUBSReported.visibility = View.VISIBLE
}
}
override fun onCancelled(firebaseError: DatabaseError) {
println("The read failed: " + firebaseError.message)
}
})
}catch (e : Exception){
e.printStackTrace()
}
}
答案 16 :(得分:0)
今天早上我也遇到了问题,用户可以输入非整数响应来解决我对整数的特定请求。
这个解决方案最终很适合我强制我想要的答案:
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:语句之前我会得到异常player_number = int(raw_input("Are you Player 1 or 2? ")
并且用户输入了&#34; J&#34;或任何其他非整数字符。最好将它作为原始输入,检查原始输入是否可以转换为整数,然后转换它。
答案 17 :(得分:0)
这会起作用:
print(user_input.isnumeric())
这会检查字符串中是否只有个数字并且长度至少为 1。
但是,如果您尝试使用带有负数的字符串 isnumeric,则 isnumeric 将返回 False
。
现在这是一个适用于负数和正数的解决方案
try:
user_input = int(user_input)
except ValueError:
pass # user_input is not a numeric string!
答案 18 :(得分:0)
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)))
答案 19 :(得分:0)
我一直在使用我认为不同的方法。首先创建一个有效范围:
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(这将起作用,因为list只包含整数作为字符串:
p = int(p)
答案 20 :(得分:0)
如果您想评估浮点数,并且您希望接受NaN
作为输入而不接受'abc'
等其他字符串,则可以执行以下操作:
def isnumber(x):
import numpy
try:
return type(numpy.float(x)) == float
except ValueError:
return False
答案 21 :(得分:0)
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
这会产生一个循环来检查输入是否为整数,结果如下所示:
>>> %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.
>>>
答案 22 :(得分:0)
这是最简单的解决方案:
a= input("Choose the option\n")
if(int(a)):
print (a);
else:
print("Try Again")
答案 23 :(得分:0)
这是一个检查INT和RANGE输入的简单函数。在这里,返回&#39; True&#39;如果输入是1-100之间的整数,那么假的&#39;否则
def validate(userInput):
try:
val = int(userInput)
if val > 0 and val < 101:
valid = True
else:
valid = False
except Exception:
valid = False
return valid
答案 24 :(得分:-2)
基于答案的灵感。我定义了一个函数如下。看起来它的工作正常。如果您发现任何问题,请告诉我
def isanumber(inp):
try:
val = int(inp)
return True
except ValueError:
try:
val = float(inp)
return True
except ValueError:
return False
答案 25 :(得分:-3)
a=10
isinstance(a,int) #True
b='abc'
isinstance(b,int) #False