2017-01-29 11 views
1

Я пишу скрипт для проверки правильности пары чисел. Мне нужно проверить, выражены ли цифры только десятичными знаками и в диапазоне от 0 до 180 положительных или отрицательных для долготы и от 0 до 90 положительных или отрицательных для широты. Я использовал Try/за исключением блока, чтобы проверить, если число с плавающей точкой, как это:Проверьте, является ли строка float выраженной только десятичным числом

def isFloat(n): 
    try: 
     float(n) 
     return True 
    except ValueError: 
     return False 

Хотя это в основном работает, я хочу, чтобы принять поплавки, выраженных только в качестве знаков после запятой, а не значение, как True, False, 1e1, NaN

+0

удивительно это _not_ дубликат! +1 !! –

ответ

1

Вы можете использовать довольно простой regular expression:

import re 

def isFloat(n): 
    n = str(n) # optional; make sure you have string 
    return bool(re.match(r'^-?\d+(\.\d+)?$', n)) # bool is not strictly necessary 
    #^  string beginning 
    # -?  an optional - 
    # \d+  followed by one or more digits (\d* if you want to allow e.g. '.95') 
    # (\.\d+)? followed by an optional group of a dot and one or more digits 
    # $   string end 

>>> isFloat('4') 
True 
>>> isFloat('4.567') 
True 
>>> isFloat('-4.567') 
True 
>>> isFloat('-4.') 
False 
>>> isFloat('-4.45v') 
False 
>>> isFloat('NaN') 
False 
>>> isFloat('1e1') 
False 
+0

Я бы изменил первый 'd +' на 'd *', чтобы поймать значения, например '.985'. Кроме того, хотя я считаю, что это решение лучше всего подходит для потребностей плаката, для него требуется 'n' быть (бросить) строку. –

+0

Боюсь, что я просто новичок, поэтому не могли бы вы объяснить, как это работает? –

+0

@TirthJain Я добавил некоторое объяснение и добавил ссылку на документы pythons 'regex'. Что касается синтаксиса регулярных выражений, вы должны прочитать документы или сделать учебник;) – schwobaseggl

 Смежные вопросы

  • Нет связанных вопросов^_^