20 表示數值的字串

2021-10-06 21:54:09 字數 1166 閱讀 5217

請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+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...