Beliebige Anzahl an Parametern

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
Slerrag
User
Beiträge: 4
Registriert: Donnerstag 25. Dezember 2014, 13:58

Moin moin,
so nun mein erster Beitrag:

Die Funktion minus() soll eine beliebige Anzahl an Variablen dekrementieren.
Man übergibt ihr z.B. 5 Variablen, die dann alle um 1 verringert werden sollen.
Dabei soll ein Minimum mit übergeben werden.
Bisher:

Code: Alles auswählen

a = 0
b = 10
c = 100
x = 42
minimum = 0

def minus(min, var):
    if(var != minimum):
        var -= 1
    else:
        print("Wert von " + var + " minimal!")

minus(minimum, a,b,c,x)

Wie lege ich fest, dass var mehrere Integer sein kann?
Und wie arbeite ich dann mit diesen?
Danke
Slerrag
BlackJack

@Slerrag: Das geht so wie Du Dir das vorstellst nicht einmal mit einer ”Variablen” weil man keine ”Variablen” übergibt sondern Werte. Und hier geht es um unveränderliche Werte, das heisst was Du mit der lokalen ”Variable” `var` in der Funktion anstellst hat absolut keinen Einfluss auf `a`, `b`, `c`, oder `x` beim Aufrufer der Funktion.

Und bevor Du anfängst über ”Magie” wie das übergeben von beliebig vielen Argumenten nachzudenken, solltest Du erst einmal definitiv auschliessen und begründen können warum Du da nicht einfach eine Sequenz von Werten übergeben kannst, also zum Beispiel eine Liste oder ein Tupel.

Funktionen die eine Operation auf Daten durchführen die nichts mit der Ein- oder Ausgabe zu tun haben, sollten zusätzlich nicht auch noch Ein- oder Ausgaben vornehmen.
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@Slerrag: bevor Du mit variabler Anzahl an Argumenten arbeitest, solltest Du zuerst etwas über Funktionen, Gültigkeitsbereiche von Variablen und Stringformatierung lernen.
Meistens ist es sinnvoller, eine Funktion für ein Argument zu schreiben, und falls doch mal mehrere Argumente benötigt werden, explizit zu lösen:

Code: Alles auswählen

def minus(min, x):
    return max(minimum, x-1)

a = 0
b = 10
c = 100
minimum = 0
a, b, c = (minus(minimum, x) for x in (a,b,c))
Slerrag
User
Beiträge: 4
Registriert: Donnerstag 25. Dezember 2014, 13:58

@BlackJack
Ich fürchte, ich habe mich unklar ausgedrückt. Mir ist durchaus bewusst, dass ich keine Variablen übergebe, sondern Werte...
Und die Ausgabe ist nur zum Testen des Programms gewesen.
Und gerade diese Magie ist ja Sinn des Übens gewesen
@Sirius3

Code: Alles auswählen

a, b, c = (minus(minimum, x) for x in (a,b,c))
Danke dir, war mir nicht klar, dass sowas geht. Ist natürlich sinnvoller, die Funktion mit einem Wert laufen zu lassen.

Danke euch beiden, kann geschlossen werden :D
Antworten