Wie übergibt man in Python von einem Unterprogramm ins andere eine Variable?

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(...).


gamerobs 
Fragesteller
 31.01.2018, 16:57

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

1
NoHumanBeing  31.01.2018, 17:07
@gamerobs

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(...).

1
gamerobs 
Fragesteller
 31.01.2018, 17:11

ich wäre sehr sehr dankbar wenn du mir vlt. nochmal helfen könntest ich glaube manchmal denke ich einfach viel zu kompliziert:(

1

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.


NoHumanBeing  31.01.2018, 16:54
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.

1
FireEraser  31.01.2018, 17:08
@NoHumanBeing
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.

2

Würde mal vermuten, dass es funktioniert, wenn du

def getParkingtime(min):

 stunden=round((((getTime())/60)+0.49),0)

 return stunden

aufrufst.

Woher ich das weiß:eigene Erfahrung – Ich habe selber lange im PC gearbeitet

gamerobs 
Fragesteller
 31.01.2018, 17:00

Funktioniert leider auch nicht....

1