我试图判断一个字符串变量是一个有效的整数还是浮点数,我尝试过尝试语句,但使用ASCII似乎更好。我无法使用它,可能是返回和布尔值。
def validation(valid):
var=input("no...")
state=True
y=0
for x in range(len(var)):
if state==False or y==2:
valid=False
return valid
if var[x] == chr(46) or chr(48) <= var[x] <= chr(57):
if var[x] == chr(46):
y+=1
state=True
else:
state=False
valid=True
valid = validation(valid)
print(valid)
ASCII字符46和48-57是小数点,数字0-9。如果有多个小数点(用y表示),那么它也会返回一个错误的陈述。
答案 0 :(得分:2)
简单而有力的方法:
def isNum(txt):
try:
float(txt)
return True
except ValueError:
return False
答案 1 :(得分:1)
有一种更简单的方法可以做到这一点:
try:
float(x)
except ValueError as e:
print e
print "Not a float"
else:
try:
int(x)
except ValueError as e:
print e
print "not an integer"
您可以非常轻松地将这些组合成一种方法。
答案 2 :(得分:1)
您的代码效率不高,并且它不处理负数或用科学记数法编写的浮点数。使用try
,就像fiacre的回答一样,是在Python中执行此操作的标准方法。
但是要回答你的问题,你在return
循环之后没有for
语句,所以如果你的所有测试都成功,你的函数会返回默认值None
。所以你只需要在函数的末尾添加一个return True
。
通过迭代字符串值并直接测试字符而不是索引到字符串并使用chr()
,您可以使代码更高效。例如,
for c in var:
if c == '.' or '0' <= c <= '9':
# etc
可替换地,
valid_chars = set('-.0123456789')
for c in var:
if c in valid_chars:
# etc
FWIW,在现有代码中,Python必须在每个循环上重新计算chr(46)
等。当然,这是一个非常快速的操作,但它仍然是浪费。
此外,函数中不需要state
和valid
。