Seite 1 von 1

def

Verfasst: Samstag 11. Januar 2020, 12:50
von DIDI.DE
ich habe folgenden Code geschrieben:
-------------------------------------------------------------Code Anfang - A = 2 bis print r habe ich eingerückt
r = 3e3

def (Gewicht (r):
A = 2
B = 2
C = 2
r = A * B * C
print r

Gewicht (r)
print r
---------------------------------------------------------Code Ende

Ausgabe:
8
3000

erwartet habe ich
8
8
was mache ich falsch? Ich habe schon vieles versucht? Hat alles zu Fehlermeldungen geführt.

Re: def

Verfasst: Samstag 11. Januar 2020, 14:15
von nezzcarth
Du hast den Scope von r nicht berücksichtigt; die beiden 'r's innerhalb bzw. außerhalb der Funktion sind zwei verschiedene und die Zuweisung innerhalb der Funktion betrifft das globale 'r' nicht. Daher bekommst du folgerichtig für das zweite 'r' 3000. Wenn du das äußere 'r' ändern möchtest, musst du den Wert innerhalb der Funktion mit return zurückgeben und die Rückgabe des Funktionsaufrufs an den Namen 'r' binden.

Übrigens: Es gibt im Editor hier im Forum Code-Tags, die speziell für Python-Code gedacht sind. 'Gewicht' würde man, wie alle Funktionsnamen, klein schreiben. Zudem ist da eine '(' zu viel und der Parameter wird auch nicht verwendet.

Re: def

Verfasst: Samstag 11. Januar 2020, 14:54
von DIDI.DE
ich habe return r = A*B*C gesetzt; Fehlermeldung "invalid Syntax" unter =.

ich habe in die def unter print r gesetzt return r; dann kommt wieder 8 und 3000 wie vorher.

Benötige weitere Hilfe!

vielen Dank für die anderen Hinweise. Bin leider Anfänger, wie Du merkst. Die Tutorials haben mich nicht weiter gebracht.

Re: def

Verfasst: Samstag 11. Januar 2020, 15:44
von /me
DIDI.DE hat geschrieben: Samstag 11. Januar 2020, 14:54 ich habe return r = A*B*C gesetzt; Fehlermeldung "invalid Syntax" unter =.
Nicht in einer Zeile. Erst ermitteln und dann zurückgeben.

Code: Alles auswählen

def ...
    r = A * B * C
    print(r)
    return r
Oder direkt (falls du das print in der Funktion nicht brauchst)

Code: Alles auswählen

def ...
    return A * B * C
DIDI.DE hat geschrieben: Samstag 11. Januar 2020, 14:54 Die Tutorials haben mich nicht weiter gebracht.
Ich finde den entsprechenden Abschnitt zu Funktionen im Tutorial eigentlich relativ deutlich. Beachte dort auch, wie der von der Funktion zurückgegebene Wert dann einer Variablen zugewiesen wird.

Du scheinst übrigens Python 2 zu verwenden. Gerade als Anfänger ist das sinnlos, da Python 2 zu Beginn dieses Jahres den end-of-life Status erreicht hat. Verwende ein aktuelles Python 3.

Re: def

Verfasst: Samstag 11. Januar 2020, 16:05
von DIDI.DE
ich habe folgenden Code gemäß den Hinweisen geändert:

Code: Alles auswählen


r = 3e3

def gewicht (r):
	A = 2
	B = 2
	C = 2
	r = A * B * C
	print r
	return r

gewicht (r)
print r


Ausgabe:
8
3000

erwartet habe ich
8
8
was mache ich falsch? es muss etwas sehr dummes sein.

Re: def

Verfasst: Samstag 11. Januar 2020, 16:07
von ThomasL
r = gewicht(r)

Re: def

Verfasst: Samstag 11. Januar 2020, 16:32
von DIDI.DE
vielen Dank

das war der Fehler

Re: def

Verfasst: Sonntag 12. Januar 2020, 00:02
von /me
DIDI.DE hat geschrieben: Samstag 11. Januar 2020, 16:05 ich habe folgenden Code gemäß den Hinweisen geändert:

Code: Alles auswählen

r = 3e3

def gewicht (r):
	A = 2
	B = 2
	C = 2
	r = A * B * C
	print r
	return r

gewicht (r)
print r
Es ist nicht sinnvoll r als Parameter an die Funktion zu übergeben. Es wird dort niemals verwendet. Stattdessen erstellst du ein lokales r das dann zurückgegeben wird. Da r vor Aufruf der Funktion nicht verwendet wird muss man es damit übrigens auch nicht vorher definieren.

Zudem ist "gewicht" kein guter Name für eine Funktion. Funktionsnamen sollten Tätigkeiten beschreiben. Hier wäre also "berechne_gewicht" sicher passender.

Laut Style Guide for Python Code solltest du übrigens besser mit 4 Leerzeichen als mit Tabulatoren einrücken. Du kannst jeden einigermaßen vernünftigen Editor so einstellen, dass er bei einem Druck auf die Tabulatortaste automatisch 4 Leerzeichen macht.

Code: Alles auswählen

def berechne_gewicht():
    A = 2
    B = 2
    C = 2
    r = A * B * C
    print r
    return r

r = berechne_gewicht(r)
print r
Die Funktion ist jetzt natürlich sehr statisch. Es wäre doch sicher sinnvoll, wenn sie mit verschiedenen Werten für A, B und C arbeiten könnte. Nehmen wir die doch einfach als Parameter. Zudem werden laut Konvention (der eben erwähnte Style Guide for Python Code) Variablennamen in Python klein geschrieben, also ändern wir das auch noch direkt.

Code: Alles auswählen

def berechne_gewicht(a, b, c):
    r = a * b * c
    print r
    return r
	
a = 2
b = 2
c = 2
r = berechne_gewicht(a, b, c)
print r
Jetzt machen wir das noch flexibel und lassen die Werte durch den Benutzer eingeben. Ich vermute mal, dass es sich um Länge, Breite und Höhe handelt und benenne die Variablen entsprechend.

Code: Alles auswählen

def berechne_gewicht(a, b, c):
    r = a * b * c
    print r
    return r
	
laenge = float(raw_input('Länge: ')
breite =  = float(raw_input('Breite: ')
hoehe =  = float(raw_input('Höhe: ')
gewicht = berechne_gewicht(laenge, breite, hoehe)
print gewicht
Das Gewicht wird jetzt noch zweimal ausgegeben. Einmal in der Funktion und einmal außerhalb. In der Funktion hat das eigentlich nichts zu suchen. Was ist denn, wenn du die Funktion nur für ein Zwischenergebnis brauchst und die Ausgabe an der Stelle nicht interessiert? Damit sind wir für die Funktion dann bei Folgendem:

Code: Alles auswählen

def berechne_gewicht(a, b, c):
    r = a * b * c
    return r
Jetzt brauchen wir r auch nicht mehr sondern können das Ergebnis der Berechnung direkt zurückgeben.

Code: Alles auswählen

def berechne_gewicht(a, b, c):
    return a * b * c
Prinzipiell bleibt jetzt nur noch eins zu tun und zwar dringend: Python 2 deinstallieren und stattdessen Python 3 verwenden. Es gibt dadurch Codeänderungen. print ist jetzt eine Funktion und benötigt daher Klammern für die Parameter und raw_input heißt jetzt einfach input (in Python 2 solltest du input übrigens lieber nicht verwenden).

Code in Python 3:

Code: Alles auswählen

def berechne_gewicht(a, b, c):
    return a * b * c
	
laenge = float(input('Länge: ')
breite =  = float(input('Breite: ')
hoehe =  = float(input('Höhe: ')
gewicht = berechne_gewicht(laenge, breite, hoehe)
print(gewicht)