检查字符串是否为有效数字

时间:2018-03-18 02:37:21

标签: python

我需要检查字符串是否是有效数字。

以下是一些有效的例子:

1234
-1234
12.4
0.6
-0.6
-1234567890.123456789

无效:

+123
123.
.6
00.6
12-.6335

如果第一个数字是0,小数点"。"必须追随它。

我尝试了以下代码,但它说"超出时间限制"。我不确定这意味着什么。

def valid_float(number_string):
    counter = 0
    if number_string[0].isdigit() or number_string[0] == "-" or number_string[0] == "0": 
        while number_string[0] == "-":
            if number_string[1].isdigit():
                counter += 1
            else:
                counter = 0
        while number_string[0].isdigit():
            if number_string[1] == "." and number_string[2].isdigit():
                counter += 1
            else:
                counter = 0
        while number_string[0] == "0":
            if number_string[1] == ".":
                counter += 1
            else:
                counter = 0
        if counter == 3:
            return True
        else:
            return False
    else:
        counter = 0

1 个答案:

答案 0 :(得分:0)

你得到的错误意味着程序会持续很长时间,因为它在某个地方“卡住”了。大部分时间都是因为递归函数不好,或者在这种情况下是一个永远循环的while循环。

你的while循环将永远循环,因为你没有改变它作为条件检查的东西:如果条件在开始时为真,它将一直为真,所以程序永远不会退出while循环。

我想纠正你的代码,但我无法弄清楚你在哪里尝试,所以这里有一些代码可以帮助你:

for i in range(0,len(number_string)):
      if i == 0 and number_string[0] == "." :
          return false
      if i != 0 and number_string[0] == "." :
          continue
      if i == 0 and number_string[0] == "-" :
          continue
      if i == 0 and number_string[0] == "0" and len(number_string[0])>1:
           if number_string[1] != "." :
                return false
      if number_string[i].isdigit():
                continue
      return false