it-swarm.com.de

Wie kann man überprüfen, ob die Zeichenfolgeingabe eine Zahl ist?

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.

115
Trufa

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!")
223
Daniel DiPaolo

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
63
jmichalicek

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

26

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 
19
RazorX

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.

11
karthik27

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

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

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

5
rachit_verma

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")
4
Raj Shah

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

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
3
Antoni Gual Via

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: 
3
SPYBUG96

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
1
Luis Sieira

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
1
ReadyToHelp

Wenn Sie Floats auswerten und NaNs 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
0
ryanjdillon

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
0
Jesse Downing

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)
0
Anton vBR

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)))   
0
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.
>>> 
0
Nima Sajedi

Hier ist die einfachste Lösung:

a= input("Choose the option\n")

if(int(a)):
    print (a);
else:
    print("Try Again")
0
Pb Studies

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.

0
John Worrall