Eingabewert einer Funktion in alle Funktionen übergeben

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.
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Hallo,

ich habe einen Denkfehler und komme nicht drauf was ich machen muss

mein Beispiel:

Code: Alles auswählen


def abfrage() :
	print("wie ist der Name")
	name = input()
	print("ok der Name ist " + name + " wir machen nun weiter ")
	
def abfrage1() :

## hier benötige ich jetzt den input von "abfrage"
	wert = name 	 

wie bekomme ich den input von "abfrage" in "abfrage1"

danke!!!
Benutzeravatar
kbr
User
Beiträge: 1507
Registriert: Mittwoch 15. Oktober 2008, 09:27

Du gibst 'name' als Ergebnis von 'abfrage' zurück und übergibst dies als Argument an 'abfrage1'.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.
Variablennamen und Funktionen sollten aussagekräftig benannt sein, `abfrage` ist sehr generisch und bei `abfrage1` fragt man sich auch noch, was denn die 1 bedeuten soll.
Strings stückelt man nicht mit + zusammen, sondern nutzt Formatstrings:

Code: Alles auswählen

def frage_name() :
    name = input("wie ist der Name:")
    print(f"ok der Name ist {name} wir machen nun weiter ")
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Hi KBR und Sirius3 , ok damit ich das richtig verstehen wäre es dann so?

Code: Alles auswählen

def frage_name() :
    name = input("wie ist der Name:")
    print(f"ok der Name ist {name} wir machen nun weiter ")
    return input
	
def namen_weiterbearbeitung() :
    datenvonname = frage_name
    print(f"nur ein Test {datenvonname} und ab hier geht es dann weiter wenn das funktioniert")
	
frage_name()
namen_weiterbearbeitung()

	
Ergebnis:

wie ist der Name:tester
ok der Name ist tester wir machen nun weiter
<function frage_name at 0x7fdebc4b9ea0>



aber das funktioniert leider nicht, könnt ihr mir noch einen Tip geben? Danke für den Hinweis mit den einrücken
Zuletzt geändert von Goofy19000 am Sonntag 4. Dezember 2022, 19:49, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo werden denn die Funktionen aufgerufen?
Was soll frage_name denn zurückgeben? Und was gibt sie tatsächlich zurück?
Benutzeravatar
Dennis89
User
Beiträge: 1536
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

der Coder macht ja so oder so nichts, so wie du ihn postest.
Das was return zurück gibt, das kann man an einen Namen binden, beim Funktionsaufruf.

Dann kannst du an dieser Stelle mit dem Namen weiter arbeiten.

Aber wieso gibst du 'input' zurück? Du hast dass was der Benutzer eingegeben hat doch an 'name' gebunden und das benutzt du auch bei 'print'.

Ist dir klar, was hier passiert(?):

Code: Alles auswählen

def frage_name() :
    name = input("wie ist der Name:")
    return name

name = frage_name()
print(name)
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Hi Sirius3,

das aufrufen der Funktionen hab ich noch ergänzt oben.

Hi Dennis89,

danke für den Hinweis, ja da war ich total verplant macht Sinn...

ok jetzt sieht es besser aus der Output ist nun:

wie ist der Name:Testname1
ok der Name ist Testname1 wir machen nun weiter
wie ist der Name:Testnameeingabe2
ok der Name ist Testnameeingabe2 wir machen nun weiter
nur ein Test Testnameeingabe2 und ab hier geht es dann weiter wenn das funktioniert

Allerdings werde ich jetzt 2x nach dem Namen gefragt und muss ihn eingeben, da ich ja auf

name = frage_name()

in namen_weiterbearbeitung() verweise.

Ich hätte da aber gerne einfach nur den Namen der bei frage_name eingeben wurde. also nicht doppel / bzw das ich den Namen nochmal eintippen muss da er ja frage_namen nochmal aufruft in der Funktion namen_weiterbearbeitung

der oben genante Code ist nur ein Beispiel damit ich das ganze verstehe und dann anwenden kann. Will dann mit dem frage_namen INPUT praktisch in der nächsten Funktion weiterarbeiten.
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

also will das Prinzip ja nur verstehen, alles was ich meiner ersten Funktion mache und an Daten in dem Fall der Name erhalte, brauch ich in den zukünftigen Funktionen wieder.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Du darfst die Funktion `frage_namen` nicht zweimal aufrufen, sondern den Rückgabewert an die weiteren Funktionen als Argument übergeben.
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

mmh "sondern den Rückgabewert an die weiteren Funktionen als Argument übergeben."

kannst du mir das in einem Beispiel zeigen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hat Dennis doch gezeigt. Sowohl Rückgabe als auch eine andere Funktion aufrufen. Ist print, aber das ist ja auch nur eine Funktion.
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

ja

Code: Alles auswählen

def frage_name() :
    name = input("wie ist der Name:")
    return name

name = frage_name()
print(name)
das habe ich probiert, aber dann wird die komplette Funktion "frage_name" nochmal ausgeführt, das will ich ja nicht ich will nur den eingabewert/namen

ausgäbe:

wie ist der Name: Charlie
ok der Name ist Charlie wir machen nun weiter ---- jetzt muss ich den namen nochmal eingeben das will ich ja nicht.
wie ist der Name: Charlie---- ich gebe ihn nochmal ein
ok der Name ist Charlie wir machen nun weiter
Charlie

Ausgabe Zeile 1,2 wäre von der ersten Funktion das ist ok. Zeile 3,4 sind doppelt die sollen weg aus der 2ten Funktion. Zeile 5 ist gut
Benutzeravatar
Dennis89
User
Beiträge: 1536
Registriert: Freitag 11. Dezember 2020, 15:13

Poste mal bitte deinen Code, mit dem das beschriebene Verhalten aufritt.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

ahh ok jetzt ist der Groschen gesprungen,

name = frage_name() ruf ich sie ja bereits auf..

frage_name()
namen_weiterbearbeitung()

muss natürlich frage_name() einmal raus .. sorry und danke!!
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Code: Alles auswählen

def frage_name() :
    name = input("wie ist der Name:")
#    print(f"ok der Name ist {name} wir machen nun weiter ")
    return name


def weiterbearbeitung() :
    name = frage_name()
    print(name)


frage_name()
weiterbearbeitung()

und unten muss frage_name() raus dann funktioniert es. Mein Fehler :(
Benutzeravatar
Dennis89
User
Beiträge: 1536
Registriert: Freitag 11. Dezember 2020, 15:13

Aber das ist ja noch nicht dass was du wolltest. Den Namen den du in 'frag_name' bekommst, nutzt du nicht im weiteren Programm.
Lass die zweite Funktion 'weiterarbeitenung' erst mal weg.

name = frage_name() bedeutet dass 'name' dass ist was du in der Funktion 'frag_name' mit return zurück gibst. Und das fehlt bei dir, wenn du damit irgendwas machen willst.

Teste das noch mal aus, da sist ganz wichtig.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

stimmt,

also ohne 2te Funktion sieht es so aus:

Code: Alles auswählen

def frage_name() :
    name = input("wie ist der Name:")
    return name

frage_name()

name = frage_name()
print(name)

und hier stoße ich dann wieder auf die doppelte Struktur
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

ich glaube ich verstehe den Inhalt deiner Aussage hier nicht:

name = frage_name() bedeutet dass 'name' dass ist was du in der Funktion 'frag_name' mit return zurück gibst. Und das fehlt bei dir, wenn du damit irgendwas machen willst.
Benutzeravatar
Dennis89
User
Beiträge: 1536
Registriert: Freitag 11. Dezember 2020, 15:13

Wieso rufst du 'frag_name' zwei mal auf?

Code: Alles auswählen

def frage_name() :
    name = input("wie ist der Name:")
    return name

name = frage_name()
print(name)
Es passiert jetzt folgendes: Die Funktion 'frage_name' wird aufgerufen, darin wird 'input' aufgerufen. Das ist auch eine Funktion.
Du gibst jetzt einen Namen ein und dieser Name wird von der Funktion 'input' zurück gegeben und du kannst mit diesem Namen in deiner Funktion 'frage_name' arbeiten, weil du schreibst 'name = input()'. Der RÜckgabewert wird an 'name' gebunden. Und wenn du in der Funktion jetzt 'print(name)' schreiben würdest, würdest du 'name' wieder ausgeben.
Da du 'name' jetzt aber noch wo anderst willst, musst du ihn an den Aufrufer zurück geben und das machst du mit 'return'.

Und jetzt passiert das gleiche wie mit 'input'. name = 'frage_name()' bedeutet dass der Rückgabewert (return name) an 'name' gebunden wird und du kannst jetzt auserhalb der Funktion mit 'name' arbeiten.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

jetzt hab ich es verstanden und hat klick gemacht. Danke Dennis!!!!

Code: Alles auswählen

def frage_name() :
    name = input("wie ist der Name:")
    return name

def test() :
    print(name)

name = frage_name()
test()

Antworten