Seite 1 von 1
Funktion
Verfasst: Montag 25. November 2019, 07:44
von mto99
hallo
ich habe eine Frage:
ich muss eine Funktion-2 in einer Funktion-1 aufrufen.
darf ich die variablen der F-2 in F-1 verwenden?
Re: Funktion
Verfasst: Montag 25. November 2019, 07:48
von Jankie
Kannst du die Frage genauer definieren? Weil im Grunde genommen ist das hier schon eine Funktion, welche eine Funktion verwendet.
Code: Alles auswählen
def do_something(parameter):
print(parameter)
do_something("Test")
Re: Funktion
Verfasst: Montag 25. November 2019, 08:14
von Jankie
Bitte beim nächsten mal nicht den Ursprungsbeitrag ändern, sondern einfach ein neuen Beitrag posten.
Zur Frage:
Wenn in der Funktion 2 eine Variable a ist, kannst du ohne weiteres nicht von Funktion 1 auf dieses a zugreifen. In Python übergibt man Parameter an Funktionen und diese geben einen Wert zurück, welche man an eine Variable binden kann.
Also das hier geht nicht:
Code: Alles auswählen
def funktion_1(wert):
funktion_2(wert)
print(irgendwas)
def funktion_2(wert):
irgendwas = []
irgendwas.append(wert)
funktion_1("Hallo")
Das hier geht:
Code: Alles auswählen
def funktion_1(wert):
irgendwas = funktion_2(wert)
print(irgendwas)
def funktion_2(wert):
irgendwas = []
irgendwas.append(wert)
return irgendwas
funktion_1("Hallo")
Ich weiß nicht genau ob das deine Frage beantwortet, aber falls nicht kannst du
hier mehr lesen über die Gültigkeitsbereiche von Variablen.
Re: Funktion
Verfasst: Montag 25. November 2019, 09:24
von mto99
Also ich habe jetzt eine Funktion Prim geschrieben, die die eingeben Zahl auf eine Primzahl prüft.
in der nächsten Funktion soll ich überprüfen, ob wenn man eine Primzahl mit 2addiert auch eine Primzahl rauskommt.
aber ich weiß eben nicht, wie man eine Funktion in einer Funktion aufruft.
Re: Funktion
Verfasst: Montag 25. November 2019, 09:28
von __deets__
Genauso wie man sie überall aufruft.
rückgabe = aufruf(parameter)
Re: Funktion
Verfasst: Montag 25. November 2019, 10:11
von Jankie
Dazu rufst du die Funktion ganz normal auf als wäre Sie nicht in einer anderen Funktion.
Code: Alles auswählen
def ist_primzahl(zahl):
return 2 in [zahl, 2**zahl % zahl]
def ist_primzahl_plus_zwei_eine_primzahl(zahl):
if ist_primzahl(zahl): #hier der Aufruf der Funktion1 (ist_primzahl)
print(f"Die Zahl {zahl} ist eine Primzahl")
else:
print(f"Die Zahl {zahl} ist keine Primzahl")
if ist_primzahl(zahl + 2): #hier der Aufruf der Funktion1 (ist_primzahl) nur wird der Paramter um zwei erhöht.
print(f"Die Zahl {zahl} plus Zwei, also {zahl+2} ist eine Primzahl")
else:
print(f"Die Zahl {zahl} + 2, also {zahl+2} ist keine Primzahl")
ist_primzahl_plus_zwei_eine_primzahl(9)
Re: Funktion
Verfasst: Montag 25. November 2019, 10:26
von __deets__
So aber bitte nicht. Die Funktion vermischt Prüfung mit Ausgabe. Und das sollte nicht sein. Sie sollte einfach True oder False liefern. Und die Ausgabe dem Benutzer überlassen.
Re: Funktion
Verfasst: Montag 25. November 2019, 11:08
von Jankie
War ja eigentlich nur zur Veranschaulichung gedacht. So jetzt einmal umgesetzt dass die Funktion nur True/False zurückgibt.
Code: Alles auswählen
def ist_primzahl(zahl):
return 2 in [zahl, 2**zahl % zahl]
def ist_primzahl_plus_zwei_eine_primzahl(zahl):
if ist_primzahl(zahl):
if ist_primzahl(zahl+2):
return True
else:
return False
else:
return False
def main():
while True:
zahl_zu_pruefen = int(input("Bitte eine Primzahl eingeben: "))
if ist_primzahl_plus_zwei_eine_primzahl(zahl_zu_pruefen):
print(f"{zahl_zu_pruefen} ist eine Primzahl und {zahl_zu_pruefen + 2} auch.")
else:
if ist_primzahl(zahl_zu_pruefen):
print(f"{zahl_zu_pruefen} ist eine Primzahl, aber {zahl_zu_pruefen + 2} nicht")
else:
print(f"{zahl_zu_pruefen} ist keine Primzahl")
main()
Re: Funktion
Verfasst: Montag 25. November 2019, 11:16
von sparrow
Die Verzweigung in der Funktion finde ich unübersichtlich. Im Zweifelsfall auch fehleranfällig.
Die Aussagekraft der beiden Bedingungen können nicht getrennt werden, also kannst du sie auch direkt in einer einzigen Zeile auswerten.
Code: Alles auswählen
def ist_primzahl_plus_zwei_eine_primzahl(zahl):
if ist_primzahl(zahl) and ist_primzahl(zahl+2):
return True
else:
return False
Das könnte man noch mehr schrumpfen, aber ich persönlich mag, wenn man die Zweige sieht.
Re: Funktion
Verfasst: Montag 25. November 2019, 11:32
von mto99
ich habe es hingekriegt. vielen dank für die hilfe
Re: Funktion
Verfasst: Montag 25. November 2019, 13:06
von Sirius3
@sparrow: in Wirklichkeit gibt es aber keine Zweige, sondern nur eine Bedingung als Ergebnis der Funktion:
Code: Alles auswählen
def ist_primzahl_plus_zwei_eine_primzahl(zahl):
return ist_primzahl(zahl) and ist_primzahl(zahl+2)
Wobei hier der Funktionsname nicht die doppelte Prüfung erkennen läßt.
Code: Alles auswählen
def ist_primzahl_plus_zwei_eine_primzahl(zahl):
if not ist_primzahl(zahl):
raise RuntimeError("zahl ist keine Primzahl")
return ist_primzahl(zahl+2)
oder halt:
Code: Alles auswählen
def sind_zahl_und_zahl_plus_zwei_primzahlen(zahl):
return ist_primzahl(zahl) and ist_primzahl(zahl+2)