真实和虚假陈述,找到变量类型

时间:2015-12-12 15:01:51

标签: python

我试图判断一个字符串变量是一个有效的整数还是浮点数,我尝试过尝试语句,但使用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表示),那么它也会返回一个错误的陈述。

3 个答案:

答案 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)等。当然,这是一个非常快速的操作,但它仍然是浪费。

此外,函数中不需要statevalid