Text Menü

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
Itech
User
Beiträge: 20
Registriert: Freitag 6. Juli 2018, 15:44

Hallo zusammen,

bin noch totaler Anfänger und erstelle gerade ein Text Menü. Das Script soll am Ende Bits in Bytes umrechnen und Bytes in KiloBytes etc. Habe schon viel Zeit auf Google verbracht, konnte bis jetzt aber nicht rausfinden warum das Script nicht richtig funktioniert. Alle Punkte sind noch nicht fertig, aber aus meiner Sicht sollte es eigentlich funktionieren. Er geht richtig in den Menüpunkt 1 und fordert einen auf die Anzahl der Bits einzugeben. Danach springt er aber wieder sofort in das Menü. Mein Gedanke war das er jegliche Eingabe als falsch deklariert und er somit in den Loop geht. Ihr kennt euch bestimmt besser aus. :)

Code: Alles auswählen

# Menü
def print_menu():       
    print ("MENU:")
    print ("1. Eingabe in Bit 1")
    print ("2. Eingabe in Byte 2")
    print ("3. Eingabe in Kilobyte 3")
    print ("4. Eingabe in Megabyte 4")
    print ("5. Eingabe in Gigabyte 5")
    print ("6. Eingabe in Terabyte 6")
    print ("0. Programm schließen")
   

#def
def Byr():

    fehler = True
    while fehler == True:
        try:
            eingabe = input("Bitte Bits eingeben: ")
            x = eval(eingabe)
            fehler = False
        
        except:

            print ("Falsche Eingabe! Bitte nur ganze Zahlen eingeben")
        
            byte = x / 8
            print (x, "Bits entsprechen" , byte , "Bytes")


loop=True      
  
while loop:          
    print_menu()    
    choice = input("Wählen Sie einen Menüpunkt: ")
     
    if choice=='1':     
        Byr()
        
    elif choice=='2':
        print ("Bitte Anzahl Byte eingeben:")

    elif choice=='3':
        print ("Bitte Anzahl KiloByte eingeben:")
        
    elif choice=='4':
        print ("Bitte Anzahl MegaByte eingeben:")

    elif choice=='5':
        print ("Bitte Anzahl GigaByte eingeben:")

    elif choice=='6':
        print ("Bitte Anzahl TeraByte eingeben:")
        
    elif choice=='0':
        print ("Das Programm wurde beendet!")
        loop=False
        
    else:
        
        print ("Es sind nur ganze Zahlen von 0 bis 6 möglich")
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Itech: Was hattest Du denn erwartet was nach Eingabe der Bits passiert? Und wann denkst Du wird der Code in einem ``except``-Block ausgeführt?

Apropos ``except``: Nie ein nacktes ``except`` verwenden ohne Angabe der konkreten Ausnahme(n) die Du behandeln willst. Sonst behandelst Du *alle* Ausnahmen, auch solche mit denen Du gar nicht rechnest, zum Beispiel auch solche die durch Programmierfehler entstehen, die Du dann nur sehr schwer finden kannst.

Was ebenfalls ganz dringend weg muss ist das `eval()`. Du willst eine Zeichenkette in eine Zahl wandeln, speziell dafür gibt es `int()`.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Itech
User
Beiträge: 20
Registriert: Freitag 6. Juli 2018, 15:44

@__blackjack__: Dank Dir das hat mir schon geholfen. Was müsste ich dem except denn genau hinzufügen, damit es klar zuordbar ist?

except(?)
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Itech: Welche Ausnahmen möchtest Du denn da behandeln?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten