請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100"、「5e2」、"-123"、「3.1416」、「0123"都表示數值,但"12e」、「1a3.14」、「1.2.3」、「±5」、"-1e-16"及"12e+5.4"都不是。
def isnumber(self, s: str) -> bool:
s = s.strip()
met_dot = met_digit = met_e = false
for i,char in enumerate(s):
if char in ('+','-'):
if i>0 and s[i-1] not in ('e','e'):
return false
elif char == '.':
if met_e or met_dot:
return false
met_dot = true
elif char in ('e','e'):
if met_e or not met_digit:
return false
met_e = true
met_digit = false
elif char.isdigit():
met_digit = true
else:
return false
return met_digit
這道題的思路不太好捋。慢慢來,判斷是否合法的幾個因素是 e、小數點、正負號、數字。所以設定三個bool變數,表示 e 小數點、數字。 正負號的限制比較明顯,就不用另設變數了。
1.先判斷正負號,正負號可以出現的位置只有s的第一位,或者e後面的第一位。那就是第乙個if語句了。
2.判斷小數點,合法的s是不能出現兩個小數點的,還有不能出現e的後面有小數點。如果 met_dot met_e有乙個為true ,就非法 s了
3.判斷e,同樣,不能有2個e,此外,e前面必須有數字才行。 如果前面的合法了, 還要注意 不僅要把met_e = true, 還要把 met_digit = false。因為 e後面必須還要有數字,否則也是非法的, 比如5e,就是非法的。
4.判斷數字,如果是數字 met_digit = true。
5.如果上面的情況都不符合,那就是*@#¥……這些亂七八糟的東西了,肯定false。
20題 表示數值的字串
請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 1e 16 0123 都表示數值,但 12e 1a3.14 1.2.3 5 及 12e 5.4 都不是。本題使用有限狀態自動機。根據字元型別和合法數值的特點,先定義狀態,再畫出狀態轉移圖,最後編...
ATO 20 表示數值的字串
請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。本題能正確的ac還是有一定難度的,具體解法還是參見 劍指offer 把。class solut...
第20題 表示數值的字串
請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。測試用例 test test1 100 true test test2 123.45e 6 t...