Seite 1 von 1

Einfaches Python Problem

Verfasst: Donnerstag 23. Juni 2005, 12:36
von AROK
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.

Verfasst: Donnerstag 23. Juni 2005, 13:00
von Leonidas
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.

OH mann,

Verfasst: Donnerstag 23. Juni 2005, 13:09
von AROK
Das tut ja schon weh. Danke!!!

GRUß
AROK

Verfasst: Donnerstag 23. Juni 2005, 13:25
von Gast
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.

Verfasst: Donnerstag 23. Juni 2005, 13:43
von Leonidas
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.