Wie übergibt man in Python von einem Unterprogramm ins andere eine Variable?
Hallo ich hätte eine Frage und zwar habe ich in meiner Freizeit begonnen programmieren zu lernen aber nun bin ich leider auf ein Problem gestoßen und es wäre sehr nett wenn mir jemand helfen könnte(Danke im Voraus):
Und zwar wollte ich zwei Unterprogramme erstellen die wie folgt aussehen:
def getTime():
Zeit = float(input("Parkdauer in Minuten:"))
return Zeit
def getParkingtime(min):
stunden=round(((Zeit/60)+0.49),0)
return stunden
##############################################
getTime()
getParkingtime()
Leider kommt hier immer das meine ,,Zeit" Variable nicht übernommen weden kann für mein zweites Unterprogramm weiß jemand vlt. warum das so ist ich stecke damit schon seit Tagen fest und ich wäre euch wirklich sehr dankbar für eine Antwort.
Hoffnungsvolle Grüße
3 Antworten
An eine Funktion bzw. ein Unterprogramm werden Variablen als Parameter übergeben. Diese Variablen sind das, was in Klammern steht.
Du müsstest also schreiben ...
def getParkingtime(min):
stunden = round(((min / 60) + 0.49), 0)
return stunden
Denn min ist ja Dein Parameter, nicht Zeit.
Beim Aufruf der Funktion widerum legst Du fest, aus welcher Variablen der Wert gewissermaßen "übernommen" werden soll, der an die Funktion übergeben wird und innerhalb der Funktion als Variable min verfügbar ist.
Dafür must Du den zurückgegebenen Wert von getTime() natürlich auch in einer Variablen speichern.
minuten = getTime()
stunden = getParkingtime(minuten)
print(stunden)
Falls Du Dir die Variablen "sparen" möchtest, kannst Du die Funktionen auch schachteln. Das wird allerdings schnell unleserlich und ist daher "schlechter Stil".
print(getParkingtime(getTime()))
(Das Syntax-Highlighting bei GuteFrage ist mal wieder "vogelwild". Ignorier das einfach mal. minuten, stunden, getParkingTime, getTime, ... sind einfach nur Bezeichner und keine Schlüsselwörter, auch wenn sie zur Zeit - aus welchen Gründen auch immer - hervorgehoben werden. Dagegen ist def in der Tat ein Schlüsselwort, auch wenn es zur Zeit nicht hervorgehoben wird.)
Die Funktionen werden "von innen nach außen" abgearbeitet, d. h. zuerst wird getTime() aufgerufen und fordert zur Eingabe der Zeit auf, dann wird der Rückgabewert als erster (und einziger) Parameter an getParkingtime(...) übergeben und dessen Rückgabewert widerum an die Ausgabefunktion print(...).
ich wäre sehr sehr dankbar wenn du mir vlt. nochmal helfen könntest ich glaube manchmal denke ich einfach viel zu kompliziert:(
Ich würde das ganze so lösen.
from __future__ import print_function
from __future__ import division
import math
def getTime():
return float(raw_input("Parkdauer in Minuten: "))
def getParkingTime(min):
return int(math.ceil(min / 60))
if __name__ == "__main__":
minuten = getTime()
stunden = getParkingTime(minuten)
print("Parkdauer in Stunden: " + str(stunden))
Das ist für Python 2.x.
Falls Du Python 3.x verwendest, musst Du aus der Funktion raw_input(...) die Funktion input(...) machen.
input(...) gibt es zwar auch in Python 2.x, hat dort aber eine andere Semantik. input(...) in Python 2.x führt die Benutzereingabe als Python-Code aus, während raw_input(...) in Python 2.x einfach nur eine Zeichenkette einliest. Benutzereingaben als Code ausführen ist in der Regel eine ganz doofe Idee (zumindest in allen produktiven Anwendungen), weil es zu riesigen Sicherheitslücken führt.
In Python 3.x gibt es nur noch die Funktion input(...), sie hat aber die selbe Semantik, wie raw_input(...) in Python 2.x. Deswegen muss man hier unterscheiden. Also in Python 2.x bitte immer raw_input(...) schreiben, aber in Python 3.x bitte immer input(...).
Das sind keine Unterprogramme, sondern nur einzelne Funktionen.
Du kannst in getParkingTime() nicht auf Zeit zugreifen, weil Zeit nur im Bereich von getTime() definiert wurde, man sagt auch, Zeit ist im Scope von getTime().
Wenn du mit beiden Funktionen auf die selbe Variable zugreifen willst, solltest du diese außerhalb über den Funktionen definieren.
Wenn du mit beiden Funktionen auf die selbe Variable zugreifen willst, solltest du diese außerhalb über den Funktionen definieren.
Das ist zwar möglich, allerdings sind globale Variablen ganz schlechter Stil.
Bei so einem kleinen Programm wäre das zwar nicht "schlimm", aber man sollte es sich am besten erst gar nicht angewöhnen.
Bei so einem kleinen Programm wäre das zwar nicht "schlimm", aber man sollte es sich am besten erst gar nicht angewöhnen.
Da es sich hier nur um eine einzelnes Script handelt ist es überhaupt nicht schlimm globale Variablen zu verwenden, sondern in gewisser Hinsicht sogar sinnvoll. In diesem Beispiel ist das nicht unbedingt der Fall (die Antwort bezog sich auch nur spezifisch auf sein Problem, und nicht wie er das Script hätte schreiben sollen), aber in einzelnen Scripten ist es die richtige Methode, um Werte zwischen zu speichern. Sobald man zwei mal den gleichen Wert verwenden will, funktioniert Funktionsaufrufe schachteln nicht mehr.
Würde mal vermuten, dass es funktioniert, wenn du
def getParkingtime(min):
stunden=round((((getTime())/60)+0.49),0)
return stunden
aufrufst.
Hallo vielen Dank für deine schnelle und hilfreiche Antwort doch leider funktioniert es irgendwie immer noch nicht ich habe es jetzt so geschrieben.....
def getTime():
min = float(input("Parkdauer in Minuten:"))
return min
def getParkingtime(min):
stunden=round(((min/60)+0.49),0)
return stunden