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.
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

Zahl prüfen ob Ganz- oder FLießkommazahl

Beitragvon jazzdee! » Dienstag 25. Oktober 2005, 14:32

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...?!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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

Beitragvon Leonidas » Dienstag 25. Oktober 2005, 15:19

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 Modvoice
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

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

Beitragvon jazzdee! » Dienstag 25. Oktober 2005, 15:41

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

Beitragvon N317V » Dienstag 25. Oktober 2005, 15:53

"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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 25. Oktober 2005, 16:06

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 Modvoice
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

Beitragvon jazzdee! » Dienstag 25. Oktober 2005, 16:45

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

Beitragvon BlackJack » Dienstag 25. Oktober 2005, 22:14

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

Beitragvon jazzdee! » Mittwoch 26. Oktober 2005, 12:33

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 26. Oktober 2005, 12:54

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:

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
jazzdee!
User
Beiträge: 26
Registriert: Freitag 21. Oktober 2005, 21:45

Beitragvon jazzdee! » Mittwoch 26. Oktober 2005, 13:01

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

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

Beitragvon gerold » Mittwoch 26. Oktober 2005, 13:37

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

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

Beitragvon Gast » Mittwoch 26. Oktober 2005, 14:05

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

Beitragvon jazzdee! » Mittwoch 26. Oktober 2005, 14:19

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

Beitragvon jens » Mittwoch 26. Oktober 2005, 14:34

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???

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 26. Oktober 2005, 14:50

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.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]