Seite 1 von 1

Zahl prüfen ob Ganz- oder FLießkommazahl

Verfasst: Dienstag 25. Oktober 2005, 14:32
von jazzdee!
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...?!

Re: Zahl prüfen ob Ganz- oder FLießkommazahl

Verfasst: Dienstag 25. Oktober 2005, 15:19
von Leonidas
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.

Re: Zahl prüfen ob Ganz- oder FLießkommazahl

Verfasst: Dienstag 25. Oktober 2005, 15:41
von jazzdee!
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?

Verfasst: Dienstag 25. Oktober 2005, 15:53
von N317V
"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.

Verfasst: Dienstag 25. Oktober 2005, 16:06
von Leonidas
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.

Verfasst: Dienstag 25. Oktober 2005, 16:45
von jazzdee!
gibts den befehl .isdigit() auch für float zahlen?

Verfasst: Dienstag 25. Oktober 2005, 22:14
von 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. ;-)

Verfasst: Mittwoch 26. Oktober 2005, 12:33
von jazzdee!
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

Verfasst: Mittwoch 26. Oktober 2005, 12:54
von jens
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:

Verfasst: Mittwoch 26. Oktober 2005, 13:01
von jazzdee!
vielen dank, du hast mir sehr geholfen :-)
mit der letzten zahl wird es keine probleme geben ;)

Re: Zahl prüfen ob Ganz- oder FLießkommazahl

Verfasst: Mittwoch 26. Oktober 2005, 13:37
von gerold
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
:-)

Re: Zahl prüfen ob Ganz- oder FLießkommazahl

Verfasst: Mittwoch 26. Oktober 2005, 14:05
von 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

Verfasst: Mittwoch 26. Oktober 2005, 14:19
von jazzdee!
PS: Gast war ich.
ist ja nervig, dass man nicht gewarnt wird, dass man nicht eingeloggt ist!

Verfasst: Mittwoch 26. Oktober 2005, 14:34
von jens
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???

Verfasst: Mittwoch 26. Oktober 2005, 14:50
von gerold
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
:-)

Verfasst: Mittwoch 26. Oktober 2005, 15:03
von jens
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

Verfasst: Mittwoch 26. Oktober 2005, 22:35
von BlackJack
Alles sehr schön, aber was ist eigentlich mit "Punkt vor Strichrechnung"? Das gibt Punktabzug. :twisted:

Verfasst: Donnerstag 27. Oktober 2005, 15:42
von Leonidas
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)