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



этот вопрос уже есть ответ здесь:



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



user_input = input("Enter something:")

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


выше не будет работать с input всегда возвращает a строка.

662   24  

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 = False

float: [ -∞, .., -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
a=10

isinstance(a,int)  #True

b='abc'

isinstance(b,int)  #False

Comments

    Ничего не найдено.