¿Cómo comprobar si la entrada de cadena es un número?

¿Cómo verifico si la entrada de cadena de un usuario es un número (por ejemplo, -1 , 0 , 1 , etc.)?

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

Lo anterior no funcionará ya que la input siempre devuelve una cadena.

Simplemente intente convertirlo en un int y luego rescatarlo si no funciona.

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

Aparentemente esto no funcionará para valores negativos, pero sí para positivos. Lo siento, me acabo de enterar de esto hace unas horas, ya que acabo de entrar en Python.

Usa isdigit ()

 if userinput.isdigit(): #do stuff 

Creo que lo que estarías buscando aquí es el método isnumeric() ( Documentación para python3.x ):

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

Espero que esto ayude

Para Python 3 funcionará lo siguiente.

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

EDITADO: También puede usar este código a continuación para averiguar si es un número o también un negativo

 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" 

También puede cambiar su formato a su requerimiento específico. Estoy viendo esta publicación un poco demasiado tarde. Pero espero que esto ayude a otras personas que están buscando respuestas :). Déjame saber si hay algo mal en el código dado.

Si necesita específicamente un int o float, puede probar “no es int” o “no es flotar”:

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

Si solo necesitas trabajar con ints, entonces la solución más elegante que he visto es el método “.isdigit ()”:

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

Funciona bien para verificar si una entrada es un entero positivo Y en un rango específico

 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) 

Recomendaría esto, @ karthik27, para números negativos

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

Luego haga lo que quiera con esa expresión regular, match (), findall () etc.

Las soluciones más elegantes serían las ya propuestas,

 a=123 bool_a = a.isnumeric() 

Desafortunadamente, no funciona tanto para enteros negativos como para valores flotantes generales de a. Si su punto es verificar si ‘a’ es un número genérico más allá de los enteros, sugeriría el siguiente, que funciona para todo tipo de coma flotante y entero :). Aquí está la prueba:

 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 

Espero que les sea útil 🙂

Puedes usar el método isdigit () para cadenas. En este caso, como dijiste, la entrada es siempre una cadena:

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

Esta solución solo aceptará enteros y nada más que enteros.

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

Esto funciona con cualquier número, incluyendo una fracción:

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

¿Por qué no dividir la entrada por un número? De esta manera funciona con todo. Negativos, flotadores y flotadores negativos. También espacios en blanco y cero.

 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 

Resultado:

 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: 

natural : [0, 1, 2 …]

Python 2

 it_is = unicode(user_input).isnumeric() 

Python 3

 it_is = str(user_input).isnumeric() 

entero : [-∞, .., -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 … 1,. .., ∞]

 try: float(user_input) it_is = True except ValueError: it_is = False 

Sé que esto es bastante tarde, pero es para ayudar a cualquier otra persona que tuvo que pasar 6 horas tratando de resolver esto. (eso fue lo que hice):

Esto funciona perfectamente: (comprueba si hay alguna letra en la entrada / comprueba si la entrada es un número entero o flotante)

 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 

Aquí hay una función simple que verifica la entrada para INT y RANGE. Aquí, devuelve ‘True’ si la entrada es un número entero entre 1-100, ‘False’ de lo contrario

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

Aquí está la solución más simple:

 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 

Esto crea un bucle para verificar si la entrada es un número entero o no, el resultado se vería a continuación:

 >>> %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. >>> 

Si desea evaluar flotadores y desea aceptar NaN s como entrada pero no otras cadenas como 'abc' , puede hacer lo siguiente:

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

He estado usando un enfoque diferente que pensé compartir. Comience con la creación de un rango válido:

 valid = [str(i) for i in range(-10,11)] # ["-10","-9...."10"] 

Ahora solicite un número y si no está en la lista continúe preguntando:

 p = input("Enter a number: ") while p not in valid: p = input("Not valid. Try to enter a number again: ") 

Por último, convierta a int (que funcionará porque la lista solo contiene números enteros como cadenas:

 p = int(p) 

También tuve problemas esta mañana, ya que los usuarios podían ingresar respuestas no enteras a mi solicitud específica para un entero.

Esta fue la solución que terminó funcionando bien para forzar una respuesta que quería:

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

Obtendría excepciones incluso antes de llegar a la sentencia try: cuando la usé

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

y el usuario ingresó “J” o cualquier otro carácter no entero. Funcionó mejor tomándolo como entrada sin procesar, verifique si esa entrada sin procesar se podría convertir a un entero, y luego conviértala después.

¡prueba esto! funcionó para mí incluso si ingreso números negativos.

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

Basado en la inspiración de la respuesta. Definí una función de la siguiente manera. Parece que está funcionando bien. Por favor, hágamelo saber si encuentra algún problema

 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