Trufa
¿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á desde input
siempre devuelve una cadena.
daniel dipaolo
Simplemente intente convertirlo a un int y luego retírelo si no funciona.
try:
val = int(userInput)
except ValueError:
print("That's not an int!")
Ver Manejo de excepciones en el tutorial oficial.
-
usar
val = int(str(userInput))
si solo desea valores enteros, no flotantes– maxkoryukov
5 de junio de 2017 a las 23:21
-
Esto tampoco funcionará para Boolean como
int(True) == 1
yint(False) == 0
– Loïc Faure-Lacroix
23 abr 2021 a las 20:38
jmichalicek
Aparentemente, esto no funcionará para valores negativos, pero sí para números positivos.
Usar isdigit()
if userinput.isdigit():
#do stuff
-
“-1”.isdigit() == Falso
– Por lotesX
24 de marzo de 2011 a las 19:55
-
No lo creo, Llopis. Me apresuré a responder preguntas antes de saber lo suficiente cuando di esta respuesta. Haría lo mismo que la respuesta de Daniel DiPaolo para el int, pero usaría float() en lugar de int().
– jmichalicek
08/01/2014 a las 18:50
-
Los números negativos y flotantes devuelven falso porque ‘-‘ y ‘.’ no son dígitos. La función isdigit() verifica si cada carácter en la cadena está entre ‘0’ y ‘9’.
– Carlos H.
14 de abril de 2015 a las 9:58
-
Usar
isdecimal
noisdigit
porqueisdigit
es una prueba insegura que reconoce caracteres como unicode power-of-2, ², como un dígito que no se puede convertir a números enteros.– Dave Rove
16 de julio de 2020 a las 11:45
Andrés Fernández
El método isnumeric()
hará el trabajo:
>>>a="123"
>>>a.isnumeric()
True
Pero recuerda:
>>>a="-1"
>>>a.isnumeric()
False
isnumeric()
devoluciones True
si todo los caracteres de la cadena son caracteres numéricos y hay al menos un carácter.
Por lo que no se aceptan números negativos.
-
Vale la pena señalar que en Python 2.7 esto solo funciona para cadenas Unicode. Una cadena no Unicode (
"123456".isnumeric()
) rendimientosAttributeError: 'str' object has no attribute 'isnumeric'
mientrasU"12345".numeric()
=True
– regocijarse
14 de febrero de 2017 a las 9:21
-
Además, hay algunos casos extremos en los que esto no funciona. Llevar
a = '\U0001f10a'
.a.isnumeric()
es cierto, peroint(a)
genera un ValueError.– Artyer
17 de julio de 2017 a las 22:14
-
'3.3'.isnumeric()
esFalse
– Deqing
23 de enero de 2018 a las 0:08
RazorX
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
karthik27
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 según sus requisitos específicos. Estoy viendo esta publicación demasiado tarde, pero espero que esto ayude a otras personas que buscan respuestas :). avíseme si algo está mal en el código dado.
-
Esto verificará si hay un número (flotante, int, etc.) dentro de la cadena. Sin embargo, si hay algo más que el valor numérico, aún devolverá un resultado. Por ejemplo: “1,2 Gbps” devolverá un falso positivo. Esto puede o no ser útil para algunas personas.
-Brian Bruggeman
28 mayo 2015 a las 19:35
-
También tenga en cuenta: para cualquiera que esté buscando, mi comentario original ya no es válido. 😛 ¡Gracias por la actualización @karthik27!
-Brian Bruggeman
24/08/2015 a las 14:30
leonardo
Si necesita específicamente un int o float, puede probar “is not int” o “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(user_input))
Si solo necesita trabajar con enteros, 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))
-
Esto verificará si hay un número (flotante, int, etc.) dentro de la cadena. Sin embargo, si hay algo más que el valor numérico, aún devolverá un resultado. Por ejemplo: “1,2 Gbps” devolverá un falso positivo. Esto puede o no ser útil para algunas personas.
-Brian Bruggeman
28 mayo 2015 a las 19:35
-
También tenga en cuenta: para cualquiera que esté buscando, mi comentario original ya no es válido. 😛 ¡Gracias por la actualización @karthik27!
-Brian Bruggeman
24/08/2015 a las 14:30
Funciona bien para comprobar si un aporte 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)
No sé si en “la entrada siempre devuelve cadenas”, “devuelve” es correcto.
– Trufa
24 de marzo de 2011 a las 19:56
parece que estás usando python 3.x en cuyo caso sí
input
siempre devuelve cadenas. Ver: docs.python.org/release/3.1.3/library/functions.html#input– Daniel Di Paolo
24 de marzo de 2011 a las 19:57
@DanielDiPaolo: Ah, sí, soy consciente de eso, de ahí la pregunta, simplemente no sabía si la palabra devolución era correcta.
– Trufa
24/03/2011 a las 20:00
¡Ah, entonces sí, el término “devoluciones” es precisamente el término correcto!
– Daniel Di Paolo
24 de marzo de 2011 a las 20:02
@Trufa
if type(eval(user_input)) == int:
esto podría funcionar– R__raki__
3 de febrero de 2016 a las 7:01