Ergebnisse einer Funktion in einer nachfolgenden verwenden?

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.
c.burkes
User
Beiträge: 58
Registriert: Montag 4. Februar 2019, 11:38

Freitag 15. März 2019, 17:20

Moin, moin =)

Meine Frage waere eigentlich nur, ob es einen Weg gibt, das Ergebnis einer Funktion (also den return), welches nicht in einer globalen (ich meine das heisst so?) Variablen gespeichert ist, in einer nachfolgenden Funktion zu verwenden?

Wie wuerde da ein beispielhafter call der zweiten Funktion aussehen? Hab einiges rumgespielt, bin da aber auf keinen gruenen Zweig gekommen ..... :?

lG!! c.b.
Benutzeravatar
sls
User
Beiträge: 408
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: ::

Freitag 15. März 2019, 17:47

Den Weg gibt es und er ist Bestandteil eines jeden (halbwegs) ordentlichen Tutorials.

Was hast du denn herum gespielt das nicht funktioniert? Zeig' deinen Code hier in Code-Tags <> formatiert.
When we say computer, we mean the electronic computer.
c.burkes
User
Beiträge: 58
Registriert: Montag 4. Februar 2019, 11:38

Freitag 15. März 2019, 18:02

Ahoi =)

Code: Alles auswählen

def username_generator(first_name, last_name):
    if len(first_name) >= 3 and len(last_name) >= 4:
        username = first_name[:3] + last_name[:4]
    elif len(first_name) < 3 and len(last_name) >= 4:
        username = first_name + last_name[:4]
    elif len(first_name) >= 3 and len(last_name) < 4:
        username = first_name[:3] + last_name
    else:
        username = first_name + last_name
    return username

print(username_generator("Abe", "Simpson"))
print()

.... soweit funktioniert das hier ganz ordentlich .... ich bin mir auch relativ sicher, das ganze schonmal gemacht zu haben, komm aber bei diesem Ding einfach seit zwei Tagen nicht drauf ..... :/

Die zweite Funktion waere dann folgende ....

Code: Alles auswählen

def password_generator(username):
    password = []
    password.append(username[len(username)] + username[1:])
 

probiert habe ich ... zumindest, an was ich mich noch erinnere ....


password_generator(username_generator(username))
password_generator(username_generator())
password_generator(username_generator)
password_generator(username_generator("Abe", "Simpson"))
password_generator(username)

... am wahrscheilichsten haette ich wohl zwei und drei empfunden. Die anderen schliessen sich doch relativ sicher aus oder? Jetzt hoffe ich mal wieder auf einen Aha-Moment und nicht nur auf eine leider sich nicht immer richtig resetete Konsole ..... :?

Hab grade n bisschen bammel :oops:
Benutzeravatar
__blackjack__
User
Beiträge: 3896
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Freitag 15. März 2019, 18:16

@c.burkes: Natürlich hast Du das schon mal gemacht, nämlich genau im ersten Beispiel. Die eine Funktion ist `username_generator()` und die andere Funktion ist `print()`.

Jetzt hast Du alle möglichen Varianten hingeschrieben. Das ist nett, reicht aber nicht. Denn ganz offensichtlich werden einige davon nicht funktionieren weil sie zu Laufzeitfehlern führen werden. Die kannst Du doch selbst schon mal aussortieren.

Und dann kannst Du die übrig bleibenden nehmen und mal sagen an welcher Stelle die nicht das machen was Du erwartest.

Und was erwartest Du überhaupt von `password_generator()`? Die Funktion macht nichts sinnvolles.
“There's also a certain pleasure in actually getting things to work in Java, somewhat like the pleasure, I imagine, of building ships in bottles.”
— David Cook in c.l.p
Sirius3
User
Beiträge: 10241
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 15. März 2019, 18:30

`username_generator` läßt sich vereinfachen zu:

Code: Alles auswählen

def username_generator(first_name, last_name):
    return first_name[:3] + last_name[:4]
`password_generator` wird immer mit einem IndexError aussteigen.

Wenn Du Deine Varianten genauer anschaust, wirst Du die Varianten ausschließen können, wo Du gar nicht die notwendigen Inputs verwendest.
c.burkes
User
Beiträge: 58
Registriert: Montag 4. Februar 2019, 11:38

Freitag 15. März 2019, 18:52

hm, ... okay ... also ....


password_generator(username_generator(username)) => username not defined - was mir auch einleuchtet

password_generator(username_generator()) => missing two required arguments - so in etwa verstehe ich auch den oberen Fehler ....

password_generator(username_generator) => object of type 'function' has no len() - hier hackt es ... kann mir nur ausmalen, dass sich die length auf das slithing bezieht ... username sollte aber doch eine verwendbare Laenge haben ...... :? ... und mit sollte - meine ich eigentlich - hat .... :?

password_generator(username_generator("Abe", "Simpson")) => string index out of range - einerseits wollte ich mich auf die funktion/username beziehen und zum anderen verstehe ich nicht, wie ein String mit seiner eigenen Laenge out of range sein kann .... bezieht sich das darauf?

password_generator(username) => not defined .....


und was ich von der zweiten Funktion erhoffe, waere, dass sie ein Auto-Passwort anlegt ... bestehend aus dem letzten Buchstaben von username + dem restlichen Namen.

Also wuerde wohl im code ein return-, dann der call- und zuletzt erneut ein print-Befehl folgen ....


Laufzeitfehler sind mit aktuell noch unbekannt, findet sich damit aber auf meiner heutigen Abendlektuerenliste =)
Benutzeravatar
Perlchamp
User
Beiträge: 151
Registriert: Samstag 15. April 2017, 17:58

Freitag 15. März 2019, 19:07

@ c.burkes:

Code: Alles auswählen

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Perlchamp'
__date__ = '15.03.2019'


def username_generator():
    first_name = input('Vorname :  ')
    last_name = input('Nachname :  ')
    return first_name[:3] + last_name[:4]
    
def passwort_generator():
    username = username_generator()
    return str(len(username)) + username[1:]

def main():
    print(passwort_generator())

    
if __name__ == '__main__' :
    main()
EDIT:
@ alle:
da habe ich wohl zu lange gebraucht ...
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
c.burkes
User
Beiträge: 58
Registriert: Montag 4. Februar 2019, 11:38

Freitag 15. März 2019, 19:11

...

" username = username_generator()"

.... das ist der Schluessel? Heisst ich kann eine Funktion innerhalb einer Funktion nur dann aufrufen, wenn ich in der zweiten Funktion eine Variable mit der ersten Funktion gleichsetze?
Sirius3
User
Beiträge: 10241
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 15. März 2019, 19:23

@Perlchamp: Du hast jetzt ein komplett anderes Programm geschrieben, nur um zu vermeiden, dass jemand Parameter benutzt. Das kann nicht im Sinne des Programmierers sein.

@c.burkes: nein, was PerlChamp gemacht hat, ist nur, dass er den verschachtelten Aufruf vermieden hat, indem er keine Parameter mehr benutzt hat. Das ist KEINE Lösung für Dein Problem.

Daher nochmal die Frage: bei welcher Deiner Varianten hast Du überhaupt die nötigen Inputs Vorname und Nachname verwendet?

Den IndexError bekommst Du, weil Indizes von 0 an zählen.
Benutzeravatar
Perlchamp
User
Beiträge: 151
Registriert: Samstag 15. April 2017, 17:58

Freitag 15. März 2019, 19:31

@ c.burkes:
bezogen auf *def passwort_generator* : nein.

Code: Alles auswählen

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Perlchamp'
__date__ = '15.03.2019'


def username_generator():
    first_name = input('Vorname :  ')
    last_name = input('Nachname :  ')

    username = first_name[:3] + last_name[:4]
    return username
    
def passwort_generator(username):
    return str(len(username)) + username[1:]

def main():
    username = username_generator()
    print(passwort_generator(username))

    
if __name__ == '__main__' :
    main()
@ Sirius3:
sorry, hast Recht.
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
c.burkes
User
Beiträge: 58
Registriert: Montag 4. Februar 2019, 11:38

Freitag 15. März 2019, 19:34

@ Sirius .... das wuerde ich ja gerne vermeiden, sofern moeglich .... also meine Idee ist es hier nicht auf die Ausgangsquelle, sondern auf das Resultat zurueck zu greifen (also auf 'username' aus der username_generator-Funktion) ..... ob das fuer die Praxis sehr vorteilig ist kann man zu Recht in Frage stellen, mir geht es nur darum, die Moeglichkeit in Erfahrung zu bringen .... :?

"Den IndexError bekommst Du, weil Indizes von 0 an zählen." .... aber ... als Beispiel ... "Moe" = 3 => 0, 1, 2 => 3 = "e" .... ah okay ..... also Index ist eben nicht 3 = 2 sondern eben nur len ist 3 = 0-2. Dass mich das immer noch confused aergert mich .... xO
Benutzeravatar
__blackjack__
User
Beiträge: 3896
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Freitag 15. März 2019, 19:38

@c.burkes: *Jede* Zeichenkette `s` hat keinen Index `len(s)`. Indexwerte gehen von 0 bis zur Länge minus 1. Und wenn man auf das letzte Element einer Sequenz zugreifen möchte, lässt man auch die Finger von `len()` und verwendet einen negativen Index.

Code: Alles auswählen

In [15]: s = 'hallo'

In [16]: len(s)
Out[16]: 5

In [17]: s[5]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-17-b5dece75d686> in <module>()
----> 1 s[5]

IndexError: string index out of range

In [18]: s[4]
Out[18]: 'o'

In [19]: s[-1]
Out[19]: 'o'
“There's also a certain pleasure in actually getting things to work in Java, somewhat like the pleasure, I imagine, of building ships in bottles.”
— David Cook in c.l.p
c.burkes
User
Beiträge: 58
Registriert: Montag 4. Februar 2019, 11:38

Freitag 15. März 2019, 19:44

okay ... check :)

leider funktioniert der code aber auch nach der Korrektur noch nicht ....

habe es mit def password_generator() und mit def password_generator(username) und den oben genannten calls versucht :/
Benutzeravatar
__blackjack__
User
Beiträge: 3896
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Freitag 15. März 2019, 19:53

@c.burkes: Was heisst „funktioniert … nicht“ und wie sieht der Code denn jetzt genau aus?
“There's also a certain pleasure in actually getting things to work in Java, somewhat like the pleasure, I imagine, of building ships in bottles.”
— David Cook in c.l.p
c.burkes
User
Beiträge: 58
Registriert: Montag 4. Februar 2019, 11:38

Freitag 15. März 2019, 19:55

Code: Alles auswählen

def username_generator(first_name, last_name):
    if len(first_name) >= 3 and len(last_name) >= 4:
        username = first_name[:3] + last_name[:4]
    elif len(first_name) < 3 and len(last_name) >= 4:
        username = first_name + last_name[:4]
    elif len(first_name) >= 3 and len(last_name) < 4:
        username = first_name[:3] + last_name
    else:
        username = first_name + last_name
    return username

print(username_generator("Abe", "Simpson"))
print()

def password_generator(username):
    password = []
    password.append(username[-1] + username[1:])
    return password
  
password_generator(username_generator(username))
Zuletzt geändert von c.burkes am Freitag 15. März 2019, 19:57, insgesamt 1-mal geändert.
Antworten