Problem mit Gültigkeitsbereich oder return?

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
noname89
User
Beiträge: 1
Registriert: Montag 1. August 2022, 09:18

Hallo,

ich möchte ein kleines Programm schreiben, was das Wetter abfragen soll. Zum einen soll im Vorfeld gefragt werden, ob eine PLZ oder ein Städtename eingegeben werden soll.
Danach soll die Stadt oder PLZ eingegeben werden.
Anhand dieses Wertes soll dann die entsprechende Abfrage laufen. Da ich dies gerne in Funktionen unterteilen möchte bekomme ich ein Problem - wahrscheinlich mit der Gültigkeit der Variablen bzw. mit der return-Werten.


Code: Alles auswählen



# Startvariablen auf False gesetzt
plz = False
stadtname = False

# Abfrage ob Eingabe PLZ oder Staedtenamen entspricht
def auswahl(eingabe):
    if eingabe == 'p' or eingabe == 'P':
        plz = True
        return plz
    elif eingabe == 'n' or eingabe == 'N':
        stadtname = True
        return stadtname
    else:
        print('ungültige Eingabe')



    
eingabe = input('Moechten Sie eine PLZ eingeben - dann waehlen Sie P aus \n oder moechten Sie einen Staedtenamen eingeben, dann waehlen Sie n aus: ')
auswahl(eingabe)

# hier erwarte ich die Ausgabe True oder False, je nach Auswahl, es kommt aber bei beiden Aufrufen False raus
print(plz)			
print(stadtname)


Ich quäle mich schon eine Zeit lang und ich bin fast sicher, dass es nur eine Kleinigkeit ist.
Ich freue mich über eine kleine Unterstützung - vielen Dank!
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dein Programm arbeitet mit globalen Variablen, und das ist schlecht. Und es sieht sehr geraten aus, dass du mit return irgendwie versuchst, die globalen Namen zu beeinflussen.

Und dann stellt sich die Frage: warum zwei Variablen, wenn eine reicht? Denn wenn man *nicht* eine Postleitzahl eingeben will, dann will man ja einen Standnamen eingeben. Denn weder Postleitzahl noch Stadt geht ja nicht. Deine Variablen lassen das aber zu. Und auch, dass man beides eingeben will.

Darum wuerde ich sowas machen:

Code: Alles auswählen

def auswahl_postleitzahl_oder_stadt():
    while True:
        eingabe = input('Moechten Sie eine PLZ eingeben - dann waehlen Sie P aus \n oder moechten Sie einen Staedtenamen eingeben, dann waehlen Sie n aus: ')
        if eingabe.lower() == "p":
              return True
        elif eingabe.lower() == "n":
              return False

def main():
     eingabe_via_postleitzahl = auswahl_postleitzahl_oder_stadt()
     if eingabe_via_postleitzahl:
         ...
     else:
         ...

if __name__ == "__main__":
     main()
Antworten