def

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
DIDI.DE
User
Beiträge: 8
Registriert: Samstag 11. Januar 2020, 12:31

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.
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

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.
DIDI.DE
User
Beiträge: 8
Registriert: Samstag 11. Januar 2020, 12:31

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.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
DIDI.DE
User
Beiträge: 8
Registriert: Samstag 11. Januar 2020, 12:31

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.
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

r = gewicht(r)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
DIDI.DE
User
Beiträge: 8
Registriert: Samstag 11. Januar 2020, 12:31

vielen Dank

das war der Fehler
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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)
Antworten