我需要检查字符串是否为十进制/浮点数形式。
我尝试使用isdigit(),isdecimal()和isnumeric(),但它们不适用于浮点数。我也不能使用try:并将其转换为浮点数,因为即使存在前导空格,它也会将“ 12.32”之类的内容转换为浮点数。如果存在前导空格,我需要能够检测到它,这意味着它不是十进制数。
我希望“ 5.1211”和“ 51231”一样返回十进制的true。但是,诸如“ 123.12312.2”之类的内容以及其中带有空格的任何输入(如“ 123.12”或“ 123. 12”)均不应返回true。
答案 0 :(得分:1)
绝对不是我建议这是最好的做事方式,因为我本人还是新手,但是,您可以执行以下操作:
map.set(2, "x")
这与@jthecoder的答案非常相似,但是它也考虑了空格。
编辑:@jthecoder我没有看到作者提到以空格结尾的字符串,因为它为我切断了中线。我的代码现在可以满足作者的所有要求。
答案 1 :(得分:0)
这是regular expressions的好用例。
您可以通过https://pythex.org/快速测试您的正则表达式模式。
import re
def isfloat(item):
# A float is a float
if isinstance(item, float):
return True
# Ints are okay
if isinstance(item, int):
return True
# Detect leading white-spaces
if len(item) != len(item.strip()):
return False
# Some strings can represent floats or ints ( i.e. a decimal )
if isinstance(item, str):
# regex matching
int_pattern = re.compile("^[0-9]*$")
float_pattern = re.compile("^[0-9]*.[0-9]*$")
if float_pattern.match(item) or int_pattern.match(item):
return True
else:
return False
assert isfloat("5.1211") is True
assert isfloat("51231") is True
assert isfloat("123.12312.2") is False
assert isfloat(" 123.12") is False
assert isfloat("123.12 ") is False
print("isfloat() passed all tests.")
答案 2 :(得分:-1)
使用try catch循环,如果将其转换,则查看它是否引发错误。示例代码:
try:
num_if_float = float(your_str_here)
str = true
except:
float = false