我应该接受一个输入并返回true或false,这取决于输入是一个有效数字。下面是一些例子:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3 " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false
我有一个所有有效字符的列表,我决定使用切片符号来查看输入的第0个索引中的哪个字符与任何有效字符匹配。但是,代码错误地将输入误读为false。这是我目前的全部代码。我还没有检查所有情况:
class Solution:
def isNumber(self, s: str) -> bool:
valid_char = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '+', 'e', '.']
str_lst = list(s)
if str_lst[0] in valid_char[0:10]:
return True
else:
return False
最佳答案
在我看来,最好的方法是使用try
/except
子句尝试将字符串转换为float
:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3 " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false
让我们用上面的字符串生成一个列表:
l = ["0", " 0.1 ", "abc", "1 a", "2e10", " -90e3 ", " 1e", "e3",
" 6e-1", " 99e2.5 ", "53.5e93", " --6 ", "-+3", "95a54e53"]
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
list(map(is_number, l))
# [True, True, False, False, True, True, False, False, True, False,
# True, False, False, False]