Einfaches Python Problem

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
AROK

Donnerstag 23. Juni 2005, 12:36

Hallo, ich bin ein Python Neuling (gestern installiert) und muss ein kleines Skript schreiben, um eine Programm zu erweitern.

Folgendes will nicht funktionieren:

Code: Alles auswählen

c = 0
def compare(ist,soll,proz,abs):
 if(abs(ist-soll)<=((soll*proz/100)+abs)):
  print "eq"
  return 1
  c = 1  
 else:
  print "neq"
  return 0
  c = 0
aufrufen:

Code: Alles auswählen

erg = compare (1.4,5,10,0)
#print c
print erg
Wenn ich alles in eine Funktion Datei PAcke und z.B. ausführe, bekomme ich ein Fehlermeldung. Warum?

Danke für Hinweise.
GRUß

Edit (Leonidas): Code in Python-Tags gesetzt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 23. Juni 2005, 13:00

Hallo Arok, willkommen im Forum!

Es funktioniert nicht, weil du eine Variable abs genannt hast, diese "überdeckt" die Funktion abs... du musst also die Variable anders benennen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
AROK

Donnerstag 23. Juni 2005, 13:09

Das tut ja schon weh. Danke!!!

GRUß
AROK
Gast

Donnerstag 23. Juni 2005, 13:25

Hallo, nochmal

So geht es endich:

Code: Alles auswählen

c = 0
def compare(ist,soll,proz,ABS):
 if abs(ist-soll) <= float(soll*proz)/100+ABS :
  print "eq"
  return 1
  c = 1  
 else:
  print "neq"
  return 0
  c = 0

compare(4.0,5,10,0)
print c
Warum ist es denn nötig, einen expliziten Typecast zu machen:

Code: Alles auswählen

float(soll*proz)
Ich dachte Python mach allesvon allein!

Grüße
AROK

Edit (Leonidas): Code in Python-Tags gesetzt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 23. Juni 2005, 13:43

Anonymous hat geschrieben:Warum ist es denn nötig, einen expliziten Typecast zu machen:

Code: Alles auswählen

float(soll*proz)
Ich dachte Python mach allesvon allein!
Nein, denn wenn du einen Int durch einen Int teils, kommt immer ein Int raus. Deswegen muss einer der Faktoren ein float sein.

Jetzt noch meine umgeräumte Version:

Code: Alles auswählen

def compare(ist, soll, proz, ABS):
    if abs(ist-soll) <= (soll * proz)/100.0 + ABS :
        print "eq"
        return True
    else:
        print "neq"
        return False

print compare(4.0,5,10,0)
Änderungen: Nach Styleguide neu formatiert, True und False statt 1 und 0 benutzt (lesbarer), aus der Umwandlung in Float einfach durch einen Float geteilt, die globale Variable c eliminiert.

Edit (Leonidas): Der Thread wurde geteilt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten