Как проверить, является ли строковый ввод числом? [дубликат]
этот вопрос уже есть ответ здесь:
как я могу проверить, если строка представляет собой int, без использования try / except?
13 ответов
Как проверить, является ли строковый ввод пользователя числом (например,-1,0,1 и т. д.)?
user_input = input("Enter something:")
if type(user_input) == int:
print("Is a number")
else:
print("Not a number")
выше не будет работать с input всегда возвращает a строка.
24 ответов:
просто попробуйте преобразовать его в int, а затем уходите, если он не работает.
try: val = int(userInput) except ValueError: print("That's not an int!")
видимо, это не будет работать для отрицательных значений, но это будет позитивной. Извините за это, просто узнал об этом несколько часов назад сам, поскольку я только недавно попал в Python.
использовать isdigit()
if userinput.isdigit(): #do stuff
Я думаю, что то, что вы будете искать здесь это метод
isnumeric()(документация для 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
редактировать: Вы также можете использовать этот ниже код, чтобы узнать, если его число или также отрицательный
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"вы также можете изменить свой формат на ваше конкретное требование. Я вижу этот пост слишком поздно.но надеюсь, что это поможет другим людям, которые ищут ответы :). дайте мне знать, если что-то не так в данном коде.
Если вам конкретно нужен int или float, вы можете попробовать "is not int "или"is 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))
отлично работает для проверки, если вход - это положительное целое число и в определенном диапазоне
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. если вы хотите проверить, является ли " 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
почему бы не разделить входной сигнал на число? Этот способ работает со всем. Негативы, поплавки и отрицательные поплавки. Также пустые места и ноль.
numList = [499, -486, 0.1255468, -0.21554, 'a', "this", "long string here", "455 street area", 0, ""] for item in numList: try: print (item / 2) #You can divide by any number really, except zero except: print "Not A Number: " + itemрезультат:
249 -243 0.0627734 -0.10777 Not A Number: a Not A Number: this Not A Number: long string here Not A Number: 455 street area 0 Not A Number:
Я знаю, что это довольно поздно, но его, чтобы помочь кому-нибудь, что пришлось потратить 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
вот самое простое решение:
a= input("Choose the option\n") if(int(a)): print (a); else: print("Try Again")
естественные: [0, 1, 2 ... ∞]
Python 2
it_is = unicode(user_input).isnumeric()Python 3
it_is = str(user_input).isnumeric()целое: [ -∞, .., -2, -1, 0, 1, 2, ∞]
try: int(user_input) it_is = True except ValueError: it_is = Falsefloat: [ -∞, .., -2, -1.0...1, -1, -0.0...1, 0, 0.0...1, ..., 1, 1.0...Один, ..., ∞]
try: float(user_input) it_is = True except ValueError: it_is = False
Это решение будет принимать только целые числа и ничего, кроме чисел.
def is_number(s): while s.isdigit() == False: s = raw_input("Enter only numbers: ") return int(s) # Your program starts here user_input = is_number(raw_input("Enter a number: "))
вот простая функция, которая проверяет входные данные для INT и диапазона. Здесь возвращает 'True', если вход является целым числом между 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
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. >>>
Если вы хотите оценить поплавки, и вы хотите принять
NaNs в качестве входных данных, но не другие строки, такие как'abc', вы можете сделать следующее:def isnumber(x): import numpy try: return type(numpy.float(x)) == float except ValueError: return False
я использовал другой подход, который я думал, что поделюсь. Начните с создания допустимого диапазона:
valid = [str(i) for i in range(-10,11)] # ["-10","-9...."10"]теперь попросите номер, и если его нет в списке, продолжайте спрашивать:
p = input("Enter a number: ") while p not in valid: p = input("Not valid. Try to enter a number again: ")наконец преобразовать в int (который будет работать, потому что список содержит только целые числа в виде строк:
p = int(p)
Я также столкнулся с проблемами сегодня утром с пользователями, которые могут вводить нецелые ответы на мой конкретный запрос на целое число.
Это было решение, которое в конечном итоге хорошо работает для меня, чтобы заставить ответ, который я хотел:
player_number = 0 while player_number != 1 and player_number !=2: player_number = raw_input("Are you Player 1 or 2? ") try: player_number = int(player_number) except ValueError: print "Please enter '1' or '2'..."Я бы получил исключения, прежде чем даже достичь try: заявление, когда я использовал
player_number = int(raw_input("Are you Player 1 or 2? ")и пользователь ввел "J" или любой другой нецелочисленный символ. Это сработало лучше всего, чтобы взять его в качестве исходного ввода, проверьте, если это сырье может быть преобразован в целое число, а затем преобразовать его позже.
попробуйте это! это сработало для меня, даже если я ввел отрицательные числа.
def length(s): return len(s) s = input("Enter the String: ") try: if (type(int(s)))==int : print("You input an integer") except ValueError: print("it is a string with length " + str(length(s)))
на основе вдохновения от ответа. Я определил функцию, как показано ниже. Похоже, он работает нормально. Пожалуйста, дайте мне знать, если вы найдете какие-либо проблемы
def isanumber(inp): try: val = int(inp) return True except ValueError: try: val = float(inp) return True except ValueError: return False
Comments