Wie überprüfe ich, ob die Zeichenfolgeingabe eines Benutzers eine Zahl ist (z. B. -1
, 0
, 1
usw.)?
user_input = input("Enter something:")
if type(user_input) == int:
print("Is a number")
else:
print("Not a number")
Das obige funktioniert nicht, da input
immer einen String zurückgibt.
Versuchen Sie einfach, es in ein int zu konvertieren und dann zu retten, wenn es nicht funktioniert.
try:
val = int(userInput)
except ValueError:
print("That's not an int!")
Anscheinend funktioniert das nicht für negative Werte, aber für positive Werte. Tut mir leid, das habe ich vor ein paar Stunden selbst erfahren, da ich kürzlich in Python bin.
Verwenden Sie isdigit ()
if userinput.isdigit():
#do stuff
Ich denke, was Sie hier suchen würden, ist die Methode isnumeric()
( Dokumentation für python3.x ):
>>>a = '123'
>>>a.isnumeric()
true
Hoffe das hilft
Für Python 3 wird Folgendes funktionieren.
userInput = 0
while True:
try:
userInput = int(input("Enter something: "))
except ValueError:
print("Not an integer!")
continue
else:
print("Yes an integer!")
break
BEARBEITET: Sie können diesen Code auch verwenden, um herauszufinden, ob es eine Zahl oder auch eine negative Zahl ist
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"
sie könnten Ihr Format auch an Ihre speziellen Anforderungen anpassen. Ich sehe diesen Beitrag etwas zu spät. Aber ich hoffe, das hilft anderen Personen, die Antworten suchen :). Lassen Sie mich wissen, ob etwas in dem angegebenen Code falsch ist.
Wenn Sie speziell ein int oder float benötigen, können Sie versuchen "ist nicht int" oder "ist nicht 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))
Wenn Sie nur mit ints arbeiten müssen, ist die ".isdigit ()" -Methode die eleganteste Lösung, die ich je gesehen habe:
a = ''
while a.isdigit() == False:
a = input('Enter a number: ')
print('You entered {}'.format(a))
Funktioniert gut um zu überprüfen, ob eine Eingabe .__ ist. eine positive Ganzzahl UND in einem bestimmten Bereich
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)
die elegantesten Lösungen wären die bereits vorgeschlagenen,
a=123
bool_a = a.isnumeric()
Leider funktioniert es nicht sowohl für negative Ganzzahlen als auch für allgemeine Float-Werte von a. Wenn Sie prüfen möchten, ob "a" eine generische Zahl ist, die über ganze Zahlen hinausgeht, würde ich die folgende vorschlagen, die für jede Art von Float und Integer funktioniert :) Hier ist der 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
Ich hoffe du findest es nützlich :)
Ich würde dies, @ karthik27, für negative Zahlen empfehlen
import re
num_format = re.compile(r'^\-?[1-9][0-9]*\.?[0-9]*')
Dann machen Sie mit diesem regulären Ausdruck, was Sie wollen, match (), findall () etc
Sie können die isdigit () -Methode für Strings verwenden. In diesem Fall ist die Eingabe, wie Sie sagten, immer ein String:
user_input = input("Enter something:")
if user_input.isdigit():
print("Is a number")
else:
print("Not a number")
Diese Lösung akzeptiert nur Ganzzahlen und nichts als Ganzzahlen.
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: "))
Dies funktioniert mit einer beliebigen Zahl, einschließlich eines Bruchteils:
import fractions
def isnumber(s):
try:
float(s)
return True
except ValueError:
try:
Fraction(s)
return True
except ValueError:
return False
Warum nicht die Eingabe durch eine Zahl teilen? Dieser Weg funktioniert mit allem. Negative, Floats und negative Floats. Auch Leerzeichen und Null.
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
Ergebnis:
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:
natürlich : [0, 1, 2 ... ∞]
Python 2
it_is = unicode(user_input).isnumeric()
Python 3
it_is = str(user_input).isnumeric()
ganze Zahl : [-∞, .., -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
Ich weiß, das ist ziemlich spät, aber es hilft allen anderen, die 6 Stunden damit verbracht haben, das herauszufinden. (das ist, was ich tat):
Dies funktioniert einwandfrei: (prüft, ob sich ein Buchstabe in der Eingabe befindet/prüft, ob die Eingabe entweder Ganzzahl oder Gleitkomma ist)
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
Wenn Sie Floats auswerten und NaN
s als Eingabe akzeptieren möchten, jedoch keine anderen Zeichenfolgen wie 'abc'
, können Sie Folgendes tun:
def isnumber(x):
import numpy
try:
return type(numpy.float(x)) == float
except ValueError:
return False
Hier ist eine einfache Funktion, die Eingaben auf INT und RANGE überprüft. Gibt hier 'True' zurück, wenn die Eingabe eine ganze Zahl zwischen 1 und 100 ist, andernfalls '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
Ich habe einen anderen Ansatz gewählt, von dem ich dachte, er würde ihn teilen. Beginnen Sie mit dem Erstellen eines gültigen Bereichs:
valid = [str(i) for i in range(-10,11)] # ["-10","-9...."10"]
Fragen Sie jetzt nach einer Nummer und wenn nicht in der Liste, fragen Sie weiter:
p = input("Enter a number: ")
while p not in valid:
p = input("Not valid. Try to enter a number again: ")
Zuletzt in int konvertieren (was funktionieren wird, weil list nur ganze Zahlen als Strings enthält:
p = int(p)
versuche dies! es hat für mich funktioniert, auch wenn ich negative Zahlen eingebe.
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)))
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
Dadurch wird in einer Schleife geprüft, ob die Eingabe eine Ganzzahl ist oder nicht. Das Ergebnis würde wie folgt aussehen:
>>> %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.
>>>
Hier ist die einfachste Lösung:
a= input("Choose the option\n")
if(int(a)):
print (a);
else:
print("Try Again")
Ich habe heute Morgen auch Probleme mit Benutzern, die nicht ganzzahlige Antworten auf meine spezielle Anfrage nach einer Ganzzahl eingeben können.
Dies war die Lösung, die am Ende gut funktionierte, um eine Antwort zu erzwingen, die ich wollte:
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'..."
Ich erhielt Ausnahmen, bevor ich die try: -Anweisung erreichte, als ich sie verwendete
player_number = int(raw_input("Are you Player 1 or 2? ")
und der Benutzer hat "J" oder ein anderes nicht ganzzahliges Zeichen eingegeben. Es hat sich als am besten geeignet erwiesen, es als Rohdateneingabe zu verwenden, um zu prüfen, ob diese Rohdateneingabe in eine Ganzzahl konvertiert werden kann, und sie anschließend zu konvertieren.