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?
Funktion
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")
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:
Das hier geht:
Ich weiß nicht genau ob das deine Frage beantwortet, aber falls nicht kannst du hier mehr lesen über die Gültigkeitsbereiche von Variablen.
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")
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.
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.
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)
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()
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.
Das könnte man noch mehr schrumpfen, aber ich persönlich mag, wenn man die Zweige sieht.
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
@sparrow: in Wirklichkeit gibt es aber keine Zweige, sondern nur eine Bedingung als Ergebnis der Funktion:
Wobei hier der Funktionsname nicht die doppelte Prüfung erkennen läßt.
oder halt:
Code: Alles auswählen
def ist_primzahl_plus_zwei_eine_primzahl(zahl):
return ist_primzahl(zahl) and ist_primzahl(zahl+2)
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)
Code: Alles auswählen
def sind_zahl_und_zahl_plus_zwei_primzahlen(zahl):
return ist_primzahl(zahl) and ist_primzahl(zahl+2)