Python True和False语句,查找变量类型

Python True和False语句,查找变量类型,python,Python,我试图确定字符串变量是有效的整数还是浮点,我尝试了try语句,但使用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

我试图确定字符串变量是有效的整数还是浮点,我尝试了try语句,但使用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)
def验证(有效):
var=输入(“编号”)
状态=真
y=0
对于范围内的x(len(var)):
如果state==False或y==2:
有效=错误
返回有效

如果var[x]==chr(46)或chr(48)简单而有效的方法:

def isNum(txt):
    try:
        float(txt)
        return True
    except ValueError:
        return False

简单而强大的方法:

def isNum(txt):
    try:
        float(txt)
        return True
    except ValueError:
        return False

有一种更简单的方法可以做到这一点:

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"

您可以很容易地将这些组合成一个方法。

有一种更简单的方法:

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"

您可以很容易地将这些组合到一个方法中。

您的代码效率不高,而且它不处理负数或用科学记数法编写的浮点数。使用
try
,就像fiacre的回答一样,是Python中实现这一点的标准方法

但是为了回答您的问题,在
for
循环之后没有
return
语句,因此如果所有测试都成功,则函数将返回默认值
None
。因此,您只需在函数末尾添加一个
return True


通过迭代字符串值并直接测试字符,而不是索引到字符串中并使用
chr()
,可以提高代码的效率。例如

for c in var:
    if c == '.' or '0' <= c <= '9':
        # etc
FWIW,在您现有的代码中,Python必须在每个循环上重新计算
chr(46)
etc。当然,这是一个相当快的操作,但仍然是浪费


此外,函数中不需要同时包含
状态
有效

您的代码效率不高,而且它不处理负数或用科学符号书写的浮点。使用
try
,就像fiacre的回答一样,是Python中实现这一点的标准方法

但是为了回答您的问题,在
for
循环之后没有
return
语句,因此如果所有测试都成功,则函数将返回默认值
None
。因此,您只需在函数末尾添加一个
return True


通过迭代字符串值并直接测试字符,而不是索引到字符串中并使用
chr()
,可以提高代码的效率。例如

for c in var:
    if c == '.' or '0' <= c <= '9':
        # etc
FWIW,在您现有的代码中,Python必须在每个循环上重新计算
chr(46)
etc。当然,这是一个相当快的操作,但仍然是浪费


此外,函数中不需要同时包含
状态
有效

仅测试值是否为浮点值。OP的问题是关于浮点或整数。@fiacre:注意OP并不关心有效its和有效浮点之间的区别。Marcin的代码在int上可以正常工作,因为包含int的有效表示形式的字符串也是有效的浮点。一个很长的字符串将转换为inf,但这在这里并不重要。正如pm2ring所说,这将在ints上起作用too@Will:如果Marcin的答案对您有所帮助,您应该接受它(单击它旁边的复选标记)。这有两件事。它让每个人都知道你的问题已经解决到令你满意的程度,并让帮助你的人相信你的帮助。有关完整解释,请参阅。这仅测试值是否为浮点值。OP的问题是关于浮点或整数。@fiacre:注意OP并不关心有效its和有效浮点之间的区别。Marcin的代码在int上可以正常工作,因为包含int的有效表示形式的字符串也是有效的浮点。一个很长的字符串将转换为inf,但这在这里并不重要。正如pm2ring所说,这将在ints上起作用too@Will:如果Marcin的答案对您有所帮助,您应该接受它(单击它旁边的复选标记)。这有两件事。它让每个人都知道你的问题已经解决到令你满意的程度,并让帮助你的人相信你的帮助。有关完整的解释,请参阅。关于45.23-4之类的字符串如何。你的代码可以工作too@MarcinZdunek:这在
#etc
中的内容中有介绍我只是演示了一种更好的测试方法,我并没有试图给出所有的细节。OP的代码已经具有处理多个小数点的逻辑。我想我应该提到,为了正确处理符号,没有必要将它们放入
有效字符中,因为加号或减号只在字符串的开头有效。当然,虽然我可以将这种方式的验证视为一种学习练习,但我仍然相信我编写了真正的代码,最好使用&fiacre的答案中所示的技术。那么像45.23-4这样的字符串呢。你的代码可以工作too@MarcinZdunek:这在
#etc
中的内容中有介绍我只是演示了一种更好的测试方法,我并没有试图给出所有的细节。OP的代码已经具有处理多个小数点的逻辑。我想我应该提到,为了正确处理符号,没有必要将它们放入
有效字符中,因为加号或减号只在字符串的开头有效。当然,虽然我可以将这种方式的验证视为一种学习练习,但我仍然相信,使用您的&fiacre答案中显示的技术会更好。