我想評估一個我的界面的文本框中的字符串是否是一個數字(即不是文本或其他)。在Python中,有一個名爲isdigit()的方法,如果字符串只包含數字(不包含負號或小數點),將返回True。有沒有另一種方法可以評估我的字符串是否是一個有理數(例如:1.25)。isDigit()爲有理數?
示例代碼:
if self.components.txtZoomPos.text.isdigit():
step = int(self.components.txtZoomPos.text)
我想評估一個我的界面的文本框中的字符串是否是一個數字(即不是文本或其他)。在Python中,有一個名爲isdigit()的方法,如果字符串只包含數字(不包含負號或小數點),將返回True。有沒有另一種方法可以評估我的字符串是否是一個有理數(例如:1.25)。isDigit()爲有理數?
示例代碼:
if self.components.txtZoomPos.text.isdigit():
step = int(self.components.txtZoomPos.text)
1.25是通常用於reals的符號,rational numbers的符號更少。轉換失敗時,Python的float將引發ValueError。因此:
def isReal(txt):
try:
float(txt)
return True
except ValueError:
return False
INT()或浮動()拋出ValueError異常如果字面無效
float()
拋出一個ValueError
如果轉換失敗。所以嘗試將你的字符串轉換爲浮點數,然後捕獲ValueError
。
try
/catch
是在Python非常便宜,並且試圖從一個字符串,不是一個數量構造float
引發了一個異常:
>>> float('1.45')
1.45
>>> float('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): foo
你可以做類似:
try:
# validate it's a float
value = float(self.components.txtZoomPos.text)
except ValueError, ve:
pass # your error handling goes here
現有的答案是正確的,更多的pythonic方式通常是try...except
(即EAFP) 。
但是,如果您確實想要進行驗證,則可以在使用isdigit()
之前刪除精確的一位小數點。
>>> "124".replace(".", "", 1).isdigit()
True
>>> "12.4".replace(".", "", 1).isdigit()
True
>>> "12..4".replace(".", "", 1).isdigit()
False
>>> "192.168.1.1".replace(".", "", 1).isdigit()
False
請注意,這並不是要將浮點數與整數相區別。如果你真的需要它,你可以添加該檢查。
不,這兩個,如果你去標準的數學名稱。實數行由有理數和無理數組成,有理數行是整數和可以用'a/b'表示的數字,其中a和b是整數。 – workmad3 2009-05-20 16:30:05