Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = ‘^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$’

加入好友
加入社群
Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

from tkinter import Tk, Entry

root = Tk()

entry = Entry(root)

 

entry.get() 必為str type

如何判斷該str內容是否為數字? 

isinstance( eval( entry.get() ), (float, int) )

使用 eval(entry) 并不是一个好的选择,因为它会尝试将输入的字符串作为 Python 代码进行求值,可能会存在潜在的安全隐患。此外,对于不合法的输入(比如字母),eval(entry) 将会引发 SyntaxError 异常,而使用 float() 函数则可以更好地处理这种情况。因此,推荐使用 float(entry.get()) 来将用户输入的字符串转换为浮点数。

 

isinstance: 

Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

isinstance( eval( entry.get() ), (float, int) )

Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

 

str.isdigit(): 

Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

isdigit() 是判断字符串是否全是数字字符,不包括小數點和負號,因此在这个场景下不是特别适用。如果要使用 isdigit(),需要先把 -. 剔除,然后再判断是否全是数字字符。但是使用 float() 函数转换浮点数更加直观。如果转换失败,说明输入的不是数字,可以通过捕获 ValueError 异常来判断。

isdigit() 是 Python 字符串方法之一,只能用于判断字符串中是否全部为 0~9 的数字字符,不能判断是否为浮点数或负数。这是因为在 Python 中,浮点数和负数都包含了小数点和负号这些特殊字符,因此它们不是纯粹的数字字符,而 isdigit() 只能判断字符是否都是数字字符,不能判断是否包含这些特殊字符。要判断字符串是否为浮点数或负数,可以使用其他方法,例如使用 Python 的内置函数 float() 和 int() 进行转换,如果转换成功则说明是合法的浮点数或整数。或者使用正则表达式进行匹配,判断字符串是否符合特定的模式。

 

try~ except~

Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

matplotlib的xmin, xmax,

ymin, ymax, fontsize可以為數字

也可以為None (預設, 自動)

 

以上兩個函式可以合併成一個

def get_entry_value(entry):

    try:

        value = float( entry.get() )

        return value

    except ValueError:

        return None

float("None") 會觸發ValueError:

Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

 

正則表示法

pattern = r’^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$’

Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

結果:

Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

False:

Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

该函数使用了正则表达式

‘^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$’

来匹配数字,

该正则表达式的含义如下:

^ 匹配字符串的开头

[-+]? 匹配一个可选的正负号

[0-9]* 匹配零个或多个数字

\.? 匹配一个可选的小数点

[0-9]+ 匹配一个或多个数字

([eE][-+]?[0-9]+)? 匹配一个可选的指数表示,

其中 ([eE] 表示匹配 e 或 E ,

[-+]? 匹配一个可选的正负号,

[0-9]+ 匹配一个或多个数字

$ 匹配字符串的结尾

在正則表示法中,

* 表示重複零次或多次(0次以上),

+表示一次或多次(1次以上)

而 ? 表示重複零次或一次(0或1次)。

 

re.match():

Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

推薦hahow線上學習python: https://igrape.net/30afN

加入好友
加入社群
Python: 如何判斷字符串內容是否為數字(整數或浮點數)? isinstance( eval( entry.get() ), (float, int) ) ; str.isdigit() #不包括小數點和負號 ; try~ except ValueError~ ; 正則表示法 regular expression ; pattern = '^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$' - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *