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 input
altijd 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 NaN
s 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