Zahl prüfen ob Ganz- oder FLießkommazahl

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

der titel sagt wohl alles. habe es so, aber das funzt nicht.
gibt es einen befehl in der art wie is_int() ?

Code: Alles auswählen

if int(x/2):
      print x,"ungerade"
else:
      print x,"gerade"
edit:
vielleicht kann ich das noch dahinter hängen?!
hab eine liste mit folgendne werten

[100,"+",900,"-",500]

möchte das irgendwie ausrechnen, stehe aber auf dem schlauch. hatte erst vor, in einer for-schleife die ungerade einträge zu checken (ob sie halt auch ein Zeichen wie /,*,- oder + enthalten). wie ich es dann aber rechnen kann...?!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jazzdee! hat geschrieben:der titel sagt wohl alles. habe es so, aber das funzt nicht.
gibt es einen befehl in der art wie is_int() ?

Code: Alles auswählen

if int(x/2):
      print x,"ungerade"
else:
      print x,"gerade"
Du kannst mit type() prüfen, was für einen Typ die Zahl hat.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

Leonidas hat geschrieben:
jazzdee! hat geschrieben:der titel sagt wohl alles. habe es so, aber das funzt nicht.
gibt es einen befehl in der art wie is_int() ?

Code: Alles auswählen

if int(x/2):
      print x,"ungerade"
else:
      print x,"gerade"
Du kannst mit type() prüfen, was für einen Typ die Zahl hat.
und wie kann ich checken, ob ein string eigentlich ein int ist^^

also hab nen string "100" und nen string "name". wie kann ich machen, dass er aus dem string wo 100 drin steht ein int macht?
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

"100".isdigit() gibt True zurück, "100 m".isdigit() gibt False zurück

EDIT: Ach ja, waren ja zwei Fragen. int("100") gibt den Int zurück.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

N317V hat geschrieben:EDIT: Ach ja, waren ja zwei Fragen. int("100") gibt den Int zurück.
Und wenn der Wert kein Int war, dann gibt es eine ValueError Exception, also kann man auch diese abfragen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

gibts den befehl .isdigit() auch für float zahlen?
BlackJack

Nein, `isdigit()` gibt es nur für *Zeichenketten*. Ich würde einfach `float()` oder `int()` benutzen und entsprechend auf die Ausnahmen reagieren falls die Zeichenkette nicht das entsprechende Format aufweist.

Ob eine Zahl gerade oder ungerade ist kann man übrigens herausfinden indem man sich den Rest einer Division durch zwei anschaut.  Wenn der Rest null ist, dann war die Zahl gerade.

Code: Alles auswählen

def even(number):
    return number % 2 == 0
So, mehr will ich zu den Hausaufgaben mal nicht sagen. ;-)
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

hab das mal mit den ausnahmen probiert, scheint aber nicht zu klappen?!

Code: Alles auswählen

array_tmp=[]
        for x in range(0,len(array)):
            if array[x].isdigit():
                num = int(array[x])
            else:
                try:
                    num = float(array[x])
                except TypeError:
                    num = str(array[x])
            array_tmp.append(num)
        print array_tmp
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das sieht auch strange aus ;)

Code: Alles auswählen

array_tmp = ["1323","xei","23dv","403.4545","39048,30948"]

for x in array_tmp:
    try:
        num = int(x)
    except ValueError:
        try:
            num = float(x)
        except ValueError:
            num = x

    print type(num), num
Ausgaben:

Code: Alles auswählen

<type 'int'> 1323
<type 'str'> xei
<type 'str'> 23dv
<type 'float'> 403.4545
<type 'str'> 39048,30948
Was den letzten Wert anbelangt, überlasse ich es dir, damit umzugehen... :wink:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

vielen dank, du hast mir sehr geholfen :-)
mit der letzten zahl wird es keine probleme geben ;)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

jazzdee! hat geschrieben: hab eine liste mit folgendne werten
[100,"+",900,"-",500]
möchte das irgendwie ausrechnen
Hi!

Code: Alles auswählen

l = [100, "-", 20, "+", 250.6]
s = " ".join(
    [ str(item) for item in l ]
)
print eval(s)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

gerold hat geschrieben:
jazzdee! hat geschrieben: hab eine liste mit folgendne werten
[100,"+",900,"-",500]
möchte das irgendwie ausrechnen
Hi!

Code: Alles auswählen

l = [100, "-", 20, "+", 250.6]
s = " ".join(
    [ str(item) for item in l ]
)
print eval(s)
mfg
Gerold
:-)
ich hab es auch noch hinbekommen. meins ist aber etwas länger^^

Code: Alles auswählen

ergebnis=0
        for x in range(0,len(array_tmp)):
            if (x+2)<=len(array_tmp):
                if ergebnis==0:
                    ergebnis=array_tmp[x]
                if array[(x+1)]=="+":
                    ergebnis=ergebnis+array_tmp[(x+2)]
                elif array[(x+1)]=="-":
                    ergebnis=ergebnis-array_tmp[(x+2)]
                elif array[(x+1)]=="*":
                    ergebnis=ergebnis*array_tmp[(x+2)]
                elif array[(x+1)]=="/":
                    ergebnis=ergebnis/array_tmp[(x+2)]
        if ergebnis=="-":
            ergebnis=0
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

PS: Gast war ich.
ist ja nervig, dass man nicht gewarnt wird, dass man nicht eingeloggt ist!
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hier meine Lösung:

Code: Alles auswählen

l = [100, "-", 20, "+", 250.6, "*", 2, "/", 4]

class calc:
    def __init__(self):
        self.ops = {
            "-" : self.minus,
            "+" : self.plus,
            "*" : self.multi,
            "/" : self.divi
        }
        self.current_value = None
        self.last_opt_string = ""
        self.operation = None

    def feed(self, x):
        if self.current_value == None:
            print x
            self.current_value = float(x)
            return

        if self.operation != None:
            print self.last_opt_string, x,
            self.operation(x)
            print "=", self.current_value
            self.operation = None
            return

        try:
            self.operation = self.ops[x]
        except KeyError, e:
            print "Unknown Operation:", e
            sys.exit()
        else:
            self.last_opt_string = x


    def minus(self, x):
        self.current_value -= x

    def plus(self, x):
        self.current_value += x

    def multi(self, x):
        self.current_value *= x

    def divi(self, x):
        self.current_value /= x

    def result(self):
        return self.current_value

c = calc()
for x in l:
    c.feed(x)

print "Result:", c.result()
Kann man irgendwie auch die Operatoren als Objekte direkt in's Dict packen???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

jens hat geschrieben:Kann man irgendwie auch die Operatoren als Objekte direkt in's Dict packen???
Hi Jens!

Ja, diese sind im Modul "operator" versteckt.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

gerold hat geschrieben:Ja, diese sind im Modul "operator" versteckt.
Dann geht's auch ein bischen kompakter:

Code: Alles auswählen

import operator

l = [100, "-", 20, "+", 250.6, "*", 2, "/", 4]

class calc:
    def __init__(self):
        self.ops = {
            "-" : operator.sub,
            "+" : operator.add,
            "*" : operator.mul,
            "/" : operator.div
        }
        self.result = None
        self.last_opt_string = ""
        self.operation = None

    def feed(self, x):
        if self.result == None:
            print x
            self.result = float(x)
            return

        if self.operation != None:
            print self.last_opt_string, x,
            self.result = self.operation(self.result, x)
            print "=", self.result
            self.operation = None
            return

        try:
            self.operation = self.ops[x]
        except KeyError, e:
            print "Unknown Operation:", e
            sys.exit()
        else:
            self.last_opt_string = x

c = calc()
for x in l:
    c.feed(x)

print "="*30
print "Result:", c.result

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Alles sehr schön, aber was ist eigentlich mit "Punkt vor Strichrechnung"? Das gibt Punktabzug. :twisted:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Alles sehr schön, aber was ist eigentlich mit "Punkt vor Strichrechnung"? Das gibt Punktabzug. :twisted:
Deswegen ahbe ich mir mal einen UPN-Rechner gebaut.. (nein, nicht mit VB!) 8)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten