Innerhalb einer Funktion eine Funktion einsetzen

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
l.b.2404
User
Beiträge: 2
Registriert: Dienstag 26. Juli 2022, 17:00

Hallo Python-Forum!

Ein Freund und ich sind gerade an der Umsetzung eines Projektes... dabei wäre es ganz gut eine Funktion innerhalb einer Funktion laufen lassen zu können, ersichtlich im nachstehenden Code.

Code: Alles auswählen

def welcome_loginnumber():
    print('Wilkommen in der vorzeitigen xyz-Umgebung!')
    print()
    update='xyz_P1_D1'
    print('Derzeitiger Stand ist: '+update)
    print()
    print('Tippe deine Nutzernummer ein: ')


loginnumber=0 #NUTZERNUMMER

while loginnumber < 1 or loginnumber > 2:
    welcome_loginnumber()
    loginnumber = int(input('eingeben:'))
    if loginnumber == 1:
        print('hallo leon')

    elif loginnumber == 2:
        print('hallo dominik')

    else:
        print('Es scheint als hättest du keine Zugansgberechtigung. Versuche es noch einmal. Programm wird neugestartet...')

def description_xyz() :
    print(' abcd')



def action():[b]
    print('Was möchtest du als nähhstes tun?')
    print()
    print('____________________________________')
    print('1. - Beschreibung abcd')
    print('2. - FM')
    print('3. - Programme')
    action_1=input('eingeben (1,2,3): ')
    if action_1 == 1:
        description_asct()
 action()
Unresolved reference 'description_xyz' ist die Fehlermeldung

Wie könnte man das lösen? Hat da jemand eine Idee?

LG Leon
Zuletzt geändert von l.b.2404 am Dienstag 26. Juli 2022, 17:18, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte den Code in die dafuer vorgesehenen Code-Tags stecken, das ist der </>-Knopf im vollstaendigen Editor. Und statt Fehlermeldungen aus dem Kopf zu beschreiben, bitte die vollstaendige Fehlermeldung ebenfalls in Code-Tags hier einstellen.
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Strings setzt man nicht mit + zusammen, sondern nutzt Format-Strings. Das mit dem `update` sieht aber noch komisch aus; ›derzeitiger Stand‹ läßt ja vermuten, dass sich das ändern läßt, steht aber nicht so im Code.
Man mischt keine Funktionsdefinitionen und Code, der direkt ausgeführt wird; der sollte auch in einer Funktion stehen.
Warum nennst du Deine Variable `loginnumber` um dann einen Kommentar `NUTZERNUMMER` dahinter zu schreiben? Was denn nun?
Man setzt keine Dummy-Werte, nur damit eine while-Schleife starten kann, sondern nutzt dann eine while-True-Schleife.
Warum hat `action_1` eine 1? Variablennamen sollten aussagekräftig sein, irgendwelche Nummern an Namen sind das nicht.
`action_1` muß in eine Zahl umgewandelt werden. `description_asct` ist nirgends definiert. Was bedeutet `asct`? Benutzt keine Abkürzungen.

Code: Alles auswählen

def welcome_loginnumber():
    print('Wilkommen in der vorzeitigen xyz-Umgebung!')
    print()
    update = 'xyz_P1_D1'
    print(f'Derzeitiger Stand ist: {update}')
    print()
    print('Tippe deine Nutzernummer ein: ')


def login():
    while True:
        welcome_loginnumber()
        user_number = int(input('eingeben:'))
        if user_number in [1, 2]:
            break
        print('Es scheint als hättest du keine Zugansgberechtigung. Versuche es noch einmal. Programm wird neugestartet...')
    return user_number

def description_abcd():
    print(' abcd')


def action():
    print('Was möchtest du als nähhstes tun?')
    print()
    print('____________________________________')
    print('1. - Beschreibung abcd')
    print('2. - FM')
    print('3. - Programme')
    action = int(input('eingeben (1,2,3): '))
    if action == 1:
        description_abcd()

def main():
    user_number = login()
    if user_number == 1:
        print('hallo leon')
    elif user_number == 2:
        print('hallo dominik')
    action()

if __name__ == "__main__":
    main()
l.b.2404
User
Beiträge: 2
Registriert: Dienstag 26. Juli 2022, 17:00

Sirius3 hat geschrieben: Dienstag 26. Juli 2022, 18:21 Strings setzt man nicht mit + zusammen, sondern nutzt Format-Strings. Das mit dem `update` sieht aber noch komisch aus; ›derzeitiger Stand‹ läßt ja vermuten, dass sich das ändern läßt, steht aber nicht so im Code.
Man mischt keine Funktionsdefinitionen und Code, der direkt ausgeführt wird; der sollte auch in einer Funktion stehen.
Warum nennst du Deine Variable `loginnumber` um dann einen Kommentar `NUTZERNUMMER` dahinter zu schreiben? Was denn nun?
Man setzt keine Dummy-Werte, nur damit eine while-Schleife starten kann, sondern nutzt dann eine while-True-Schleife.
Warum hat `action_1` eine 1? Variablennamen sollten aussagekräftig sein, irgendwelche Nummern an Namen sind das nicht.
`action_1` muß in eine Zahl umgewandelt werden. `description_asct` ist nirgends definiert. Was bedeutet `asct`? Benutzt keine Abkürzungen.

Code: Alles auswählen

def welcome_loginnumber():
    print('Wilkommen in der vorzeitigen xyz-Umgebung!')
    print()
    update = 'xyz_P1_D1'
    print(f'Derzeitiger Stand ist: {update}')
    print()
    print('Tippe deine Nutzernummer ein: ')


def login():
    while True:
        welcome_loginnumber()
        user_number = int(input('eingeben:'))
        if user_number in [1, 2]:
            break
        print('Es scheint als hättest du keine Zugansgberechtigung. Versuche es noch einmal. Programm wird neugestartet...')
    return user_number

def description_abcd():
    print(' abcd')


def action():
    print('Was möchtest du als nähhstes tun?')
    print()
    print('____________________________________')
    print('1. - Beschreibung abcd')
    print('2. - FM')
    print('3. - Programme')
    action = int(input('eingeben (1,2,3): '))
    if action == 1:
        description_abcd()

def main():
    user_number = login()
    if user_number == 1:
        print('hallo leon')
    elif user_number == 2:
        print('hallo dominik')
    action()

if __name__ == "__main__":
    main()
[/quote]
Antworten