Hoe kan ik controleren of stringinvoer een getal is?

Hoe controleer ik of de tekenreeksinvoer van een gebruiker een getal is (bijv. -1, 0, 1, enz.)?

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

Het bovenstaande werkt niet omdat inputaltijd een tekenreeks retourneert.


Antwoord 1, autoriteit 100%

Probeer het gewoon te converteren naar een int en stop ermee als het niet werkt.

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

Zie Uitzonderingen afhandelen https://docs.python.org/3 /tutorial/errors.html#handling-exceptions


Antwoord 2, autoriteit 34%

Blijkbaar werkt dit niet voor negatieve waarden, maar wel voor positieve getallen.

Gebruik isdigit()

if userinput.isdigit():
    #do stuff

Antwoord 3, autoriteit 19%

De methode isnumeric()zal het werk doen (Documentatie voor python3.x):

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

Maar onthoud:

>>>a = '-1'
>>>a.isnumeric()
False

isnumeric()retourneert True als alle tekens in de tekenreeks numerieke tekens zijn en er ten minste één teken is.

Dus negatieve getallen worden niet geaccepteerd.


Antwoord 4, autoriteit 8%

Voor Python 3 werkt het volgende.

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

Antwoord 5, autoriteit 4%

BEWERKT:
U kunt deze onderstaande code ook gebruiken om erachter te komen of het een getal of ook een negatief is

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"

u kunt uw indeling ook aanpassen aan uw specifieke vereisten.
Ik zie dit bericht een beetje te laat. Maar ik hoop dat dit andere personen helpt die op zoek zijn naar antwoorden 🙂 . laat het me weten als er iets mis is in de gegeven code.


Antwoord 6, autoriteit 3%

Als je specifiek een int of float nodig hebt, kun je “is not int” of “is not float” proberen:

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

Als je alleen met ints hoeft te werken, dan is de meest elegante oplossing die ik heb gezien de “.isdigit()”-methode:

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

Antwoord 7, autoriteit 2%

Werkt prima om te controleren of een invoeris
een positief geheel getal EN in een specifiek bereik

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)

Antwoord 8, autoriteit 2%

Ik zou dit aanraden, @karthik27, voor negatieve getallen

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

Doe dan wat je wilt met die reguliere expressie, match(), findall() etc


Antwoord 9, autoriteit 2%

de meest elegante oplossingen zijn de reeds voorgestelde,

a=123
bool_a = a.isnumeric()

Helaas werkt het niet zowel voor negatieve gehele getallen als voor algemene float-waarden van a. Als je punt is om te controleren of ‘a’ een generiek getal is dat verder gaat dan gehele getallen, zou ik het volgende voorstellen, dat werkt voor elke soort float en integer :). Hier is de test:

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

Ik hoop dat je het nuttig vindt 🙂


Antwoord 10, autoriteit 2%

natuurlijk: [0, 1, 2 … ?]

Python 2

it_is = unicode(user_input).isnumeric()

Python 3

it_is = str(user_input).isnumeric()

geheel getal: [-?, .., -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

Antwoord 11

Je kunt de methode isdigit() gebruiken voor strings.
In dit geval, zoals je zei, is de invoer altijd een string:

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

Antwoord 12

Waarom deel je de invoer niet door een getal? Deze manier werkt met alles. Negatieven, floats en negatieve floats. Ook lege spaties en nul.

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

Resultaat:

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: 

Antwoord 13

Deze oplossing accepteert alleen gehele getallen en niets anders dan gehele getallen.

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

Antwoord 14

Dit werkt met elk getal, inclusief een breuk:

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

Antwoord 15

Ik weet dat dit vrij laat is, maar het is om iemand anders te helpen die 6 uur heeft moeten besteden om dit uit te zoeken. (dat is wat ik deed):

Dit werkt feilloos: (controleert of er een letter in de invoer staat/controleert of de invoer integer of float is)

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

Antwoord 16

Hier is een eenvoudige functie die de invoer controleert op INT en RANGE. Hier wordt ‘True’ geretourneerd als de invoer een geheel getal is tussen 1-100, anders ‘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

Antwoord 17

Ik heb een andere benadering gebruikt die ik dacht te delen. Begin met het maken van een geldig bereik:

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

Vraag nu om een ​​nummer en als het niet in de lijst staat, ga dan verder met vragen:

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

Tot slot converteren naar int (wat werkt omdat list alleen gehele getallen als strings bevat:

p = int(p)

Antwoord 18

Hier is de eenvoudigste oplossing:

a= input("Choose the option\n")
if(int(a)):
    print (a);
else:
    print("Try Again")

Antwoord 19

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

Dit maakt een lus om te controleren of de invoer een geheel getal is of niet, het resultaat ziet er als volgt uit:

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

Antwoord 20

Als je floats wilt evalueren en je wilt NaNs als invoer accepteren, maar niet andere strings zoals 'abc', dan kun je het volgende doen:

p>

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

Antwoord 21

Ik kwam vanmorgen ook problemen tegen waarbij gebruikers niet-gehele antwoorden konden invoeren op mijn specifieke verzoek om een ​​geheel getal.

Dit was de oplossing die uiteindelijk goed werkte voor mij om een ​​antwoord te forceren dat ik wilde:

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

Ik kreeg uitzonderingen voordat ik de try:-instructie bereikte toen ik

. gebruikte

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

en de gebruiker heeft “J” of een ander niet-geheel teken ingevoerd. Het werkte het beste om het als onbewerkte invoer te nemen, te controleren of die onbewerkte invoer kon worden geconverteerd naar een geheel getal en het daarna om te zetten.


Antwoord 22

probeer dit! het werkte voor mij, zelfs als ik negatieve getallen invoer.

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

Antwoord 23

U kunt typen:

user_input = input("Enter something: ")
if type(user_input) == int:
    print(user_input, "Is a number")
else:
    print("Not a number")
try:
    val = int(user_input)
except ValueError:
    print("That's not an int!")

Antwoord 24

Dit werkt:

print(user_input.isnumeric())

Dit controleert of de string alleencijfers bevat en minstens een lengte van 1 heeft.
Als u echter isnumeric probeert met een tekenreeks met een negatief getal erin, retourneert isnumeric False.

Dit is nu een oplossing die werkt voor zowel negatieve als positieve getallen

try:
    user_input = int(user_input)
except ValueError:
    process_non_numeric_user_input()  # user_input is not a numeric string!
else:
    process_user_input()

Antwoord 25

Gebaseerd op inspiratie uit antwoord. Ik definieerde een functie zoals hieronder. Het lijkt erop dat het goed werkt. Laat het me weten als je een probleem vindt

def isanumber(inp):
    try:
        val = int(inp)
        return True
    except ValueError:
        try:
            val = float(inp)
            return True
        except ValueError:
            return False

Antwoord 26

a=10
isinstance(a,int)  #True
b='abc'
isinstance(b,int)  #False

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes