Как проверить, является ли строковый ввод числом?

Как проверить, является ли ввод строки пользователем числом (например, -1 , 0 , 1 и т. Д.)?

 user_input = input("Enter something:") if type(user_input) == int: print("Is a number") else: print("Not a number") 

Вышеприведенное не будет работать, поскольку input всегда возвращает строку.

19 Solutions collect form web for “Как проверить, является ли строковый ввод числом?”

Просто попробуйте преобразовать его в int и затем спасти, если он не работает.

 try: val = int(userInput) except ValueError: print("That's not an int!") 

По-видимому, это не будет работать для отрицательных значений, но это будет для положительного. Извините, что узнал об этом несколько часов назад сам, так как я только недавно попал в Python.

Использовать isdigit ()

 if userinput.isdigit(): #do stuff 

Я думаю, что вы бы искали здесь метод isnumeric() ( Documentation for python3.x ):

 >>>a = '123' >>>a.isnumeric() true 

Надеюсь это поможет

Для Python 3 будет работать следующее.

 userInput = 0 while True: try: userInput = int(input("Enter something: ")) except ValueError: print("Not an integer!") continue else: print("Yes an integer!") break 

EDITED: вы также можете использовать этот код ниже, чтобы узнать, является ли его число или отрицательный

 import re num_format = re.compile("^[\-]?[1-9][0-9]*\.?[0-9]+$") isnumber = re.match(num_format,givennumber) if isnumber: print "given string is number" 

вы также можете изменить свой формат на свое конкретное требование. Я вижу этот пост немного слишком поздно. Но надеюсь, что это поможет другим людям, которые ищут ответы :). сообщите мне, если что-то не так в данном коде.

Хорошо работает для проверки, является ли вход положительным Целое число И в определенном диапазоне

 def checkIntValue(): '''Works fine for check if an **input** is a positive Integer AND in a specific range''' maxValue = 20 while True: try: intTarget = int(input('Your number ?')) except ValueError: continue else: if intTarget < 1 or intTarget > maxValue: continue else: return (intTarget) 

самые изящные решения были бы уже предложенными,

 a=123 bool_a = a.isnumeric() 

К сожалению, он не работает как для отрицательных целых чисел, так и для общих значений float a. Если вы хотите проверить, является ли «а» общим числом за пределами целых чисел, я бы предложил следующий, который работает для каждого типа float и integer :). Вот тест:

 def isanumber(a): try: float(repr(a)) bool_a = True except: bool_a = False return bool_a a = 1 # integer isanumber(a) >>> True a = -2.5982347892 # general float isanumber(a) >>> True a = '1' # actually a string isanumber(a) >>> False 

Надеюсь, вы сочтете это полезным 🙂

Я бы рекомендовал это, @ karthik27, для отрицательных чисел

 import re num_format = re.compile(r'^\-?[1-9][0-9]*\.?[0-9]*') 

Затем сделайте все, что хотите, с этим регулярным выражением, match (), findall () и т. Д.

Вы можете использовать метод isdigit () для строк. В этом случае, как вы сказали, вход всегда является строкой:

  user_input = input("Enter something:") if user_input.isdigit(): print("Is a number") else: print("Not a number") 

Это работает с любым числом, включая долю:

 import fractions def isnumber(s): try: float(s) return True except ValueError: try: Fraction(s) return True except ValueError: return False 

Я знаю, что это довольно поздно, но это поможет кому-то еще, кто должен был потратить 6 часов, пытаясь понять это. (вот что я сделал):

Это работает безупречно: (проверяет, присутствует ли какая-либо буква во вводе / проверяет, является ли ввод целым или плавающим)

 a=(raw_input("Amount:")) try: int(a) except ValueError: try: float(a) except ValueError: print "This is not a number" a=0 if a==0: a=0 else: print a #Do stuff 

Если вам определенно нужен int или float, вы можете попробовать «is not int» или «not float»:

 user_input = '' while user_input is not int: try: user_input = int(input('Enter a number: ')) break except ValueError: print('Please enter a valid number: ') print('You entered {}'.format(a)) 

Если вам нужно только работать с ints, то самым изящным решением, которое я видел, является метод «.isdigit ()»:

 a = '' while a.isdigit() == False: a = input('Enter a number: ') print('You entered {}'.format(a)) 

Я также столкнулся с проблемами сегодня утром, когда пользователи могут вводить нецелые ответы на мой конкретный запрос для целого числа.

Это было решение, которое в конечном итоге хорошо работало для меня, чтобы заставить ответ, который я хотел:

 player_number = 0 while player_number != 1 and player_number !=2: player_number = raw_input("Are you Player 1 or 2? ") try: int(player_number) except ValueError: print "Please enter '1' or '2'..." player_number = 0 player_number = int(player_number) 

Я получал бы исключения до того, как дошел бы до утверждения try: когда я использовал

 player_number = int(raw_input("Are you Player 1 or 2? ") 

и пользователь вводит «J» или любой другой нецелый символ. Лучше всего использовать его как исходный вход, проверить, может ли этот исходный ввод быть преобразован в целое число, а затем преобразовать его позже.

Вот простая функция, которая проверяет ввод для INT и RANGE. Здесь возвращается значение «Истина», если вход целое от 1 до 100, «False» в противном случае

 def validate(userInput): try: val = int(userInput) if val > 0 and val < 101: valid = True else: valid = False except Exception: valid = False return valid 

Вот простейшее решение:

 a= input("Choose the option\n") if(int(a)): print (a); else: print("Try Again") 
 while True: b1=input('Type a number:') try: a1=int(b1) except ValueError: print ('"%(a1)s" is not a number. Try again.' %{'a1':b1}) else: print ('You typed "{}".'.format(a1)) break 

Это делает цикл, чтобы проверить, является ли ввод целым или нет, результат будет выглядеть следующим образом:

 >>> %Run 1.1.py Type a number:d "d" is not a number. Try again. Type a number: >>> %Run 1.1.py Type a number:4 You typed 4. >>> 

Если вы хотите оценить float, и вы хотите принять NaN качестве входных данных, но не другие строки, такие как 'abc' , вы можете сделать следующее:

 def isnumber(x): import numpy try: return type(numpy.float(x)) == float except ValueError: return False 

Основано на вдохновении от ответа. Я определил функцию, как показано ниже. Похоже, что он работает отлично. Пожалуйста, дайте мне знать, если вы найдете какую-либо проблему

 def isanumber(inp): try: val = int(inp) return True except ValueError: try: val = float(inp) return True except ValueError: return False 
 a=10 isinstance(a,int) #True b='abc' isinstance(b,int) #False 
  • Динамически привязывающие методы Python к экземпляру правильно связывают имена методов, но не метод
  • TypeError: объект «float» не может быть вызван
  • Значение истины массива numpy с одним элементом ложности, по-видимому, зависит от типа dtype
  • Проверьте, является ли параметр модулем Python?
  • Каков канонический способ проверки типа в python?
  • Как я могу скопировать неизменяемый объект, такой как кортеж в Python?
  • Обнаружение функции OpenCV Python: как обеспечить маску? (ПРОСЕЯТЬ)
  • Python: сохранение данных с помощью поплавков и строк с помощью np.savetxt
  • Python - лучший язык программирования в мире.