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:
isinstance( eval( entry.get() ), (float, int) )
str.isdigit():
isdigit()
是判断字符串是否全是数字字符,不包括小數點和負號,因此在这个场景下不是特别适用。如果要使用 isdigit()
,需要先把 -
和 .
剔除,然后再判断是否全是数字字符。但是使用 float()
函数转换浮点数更加直观。如果转换失败,说明输入的不是数字,可以通过捕获 ValueError
异常来判断。
isdigit() 是 Python 字符串方法之一,只能用于判断字符串中是否全部为 0~9 的数字字符,不能判断是否为浮点数或负数。这是因为在 Python 中,浮点数和负数都包含了小数点和负号这些特殊字符,因此它们不是纯粹的数字字符,而 isdigit() 只能判断字符是否都是数字字符,不能判断是否包含这些特殊字符。要判断字符串是否为浮点数或负数,可以使用其他方法,例如使用 Python 的内置函数 float() 和 int() 进行转换,如果转换成功则说明是合法的浮点数或整数。或者使用正则表达式进行匹配,判断字符串是否符合特定的模式。
try~ except~
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:
正則表示法
pattern = r’^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$’
結果:
False:
该函数使用了正则表达式
‘^[-+]?[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():
推薦hahow線上學習python: https://igrape.net/30afN