2009-05-20 11 views
4

私は、自分のインタフェースのテキストボックスの文字列が数値であるかどうか(つまり、テキストではないものなど)を評価しようとしています。 Pythonには、isdigit()というメソッドがあります。このメソッドは、文字列に数字(負の符号や小数点は含まない)だけが含まれている場合にTrueを返します。文字列が有理数(例:1.25)であるかどうかを評価する別の方法がありますか?isDigit()ですか?

例コード:リテラルは、変換が失敗した場合

答えて

5

1.25は、realsで一般的に使用されている表記法であり、rational numbersでは少ないです。 Pythonのfloatは、変換が失敗したときにValueErrorを発生させます。したがって:

def isReal(txt): 
    try: 
     float(txt) 
     return True 
    except ValueError: 
     return False 
+0

いいえ、あなたが標準的な数学の名前を使うと、それは両方です。実数の行は有理数と非合理的な数で構成され、有理数の行はaとbが整数である 'a/b'の形式で表すことができる整数と数値です。 – workmad3

+0

@ workmad3:あなたは正しいですから、回答をすばやく更新しました(残念ながら、あなたがそれを見た後に)) – Stephan202

+0

+1、回答が出たときに同じことを入力していました。ああ!担当者のポイントを逃した! – PTBNL

0

は、INT()またはフロート()とValueErrorをスロー。文字列を浮動小数点に変換し、ValueErrorをキャッチしてみてください。

0

float()ValueErrorをスロー有効でない場合

if self.components.txtZoomPos.text.isdigit(): 
     step = int(self.components.txtZoomPos.text) 
1

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 
1

多くのPythonの方法が通常try...except(つまりEAFP)になるという点で既存の回答は正しいです。 。

実際に検証を行いたい場合は、isdigit()を使用する前に正確に1つの小数点を削除することができます。

>>> "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 

ただし、これは浮動小数点数をintとは異なるものとして扱うことに注意してください。あなたは本当にそれが必要な場合は、そのチェックを追加することができます。