2016-09-21 2 views
0

Ich habe einen grundlegenden Rechner mit Python gemacht und ich bin auf dieses Problem gestoßen. Nachdem die Berechnungen vorgenommen wurden, wird immer "Ungültige Nummer" gedruckt und dann wird die Pause ausgeführt. Ich denke, es hat etwas damit zu tun, dass die Zeilenumbrüche die blockieren, wenn blockieren, aber ich bin mir nicht sicher.Else-Anweisung in Python 3 läuft immer

Jede Hilfe wird geschätzt. Vielen Dank im Voraus.

def badnum(): 
     print("Invalid Number") 
     print("Press enter to continue") 
     input("") 
def main(): 
     print("Select an action ") 
     print("1.) Add") 
     print("2.) Subtract") 
     print("3.) Multiply") 
     print("4.) Divide") 
     ac = int(input(">>>")) 
     if ac == 1: 
       print("First number :") 
       fn = float(input(">>>")) 
       print("Second number :") 
       sn = float(input(">>>")) 
       a = fn+sn 
       print(a) 
     if ac == 2: 
       print("First number :") 
       fn = float(input(">>>")) 
       print("Second number :") 
       sn = float(input(">>>")) 
       a = fn-sn 
       print(a) 
     if ac == 3: 
       print("First number :") 
       fn = float(input(">>>")) 
       print("Second number :") 
       sn = float(input(">>>")) 
       a = fn*sn 
      print(a) 
     if ac == 4: 
       print("First number :") 
       fn = float(input(">>>")) 
       print("Second number :") 
       sn = float(input(">>>")) 
       a = fn/sn 
       print(a) 
     else: 
       badnum() 
print("\n"*100) 
while True: 
    try: 
     main() 
    except ValueError: 
     badnum() 
    except ZeroDivisionError: 
     print("Infinity") 
    print("\n"*100) 
+3

Sie sollten 'if ... elif' machen, nicht diese separaten' if' Blöcke. Und ich frage mich, was diese einzelne 'input (" ")' tun soll –

+0

Ich würde empfehlen, Ihren Einzug * und die Verwendung von elifs *. – Li357

+0

@MosesKoledoye Danke, das hat es behoben. –

Antwort

2

Nein, hat es etwas bekam zu tun, wie Sie Ihren Code geschrieben haben, sollten Sie dies mit if...elif:

ac = int(input(">>>")) 
if ac == 1: 
     print("First number :") 
     fn = float(input(">>>")) 
     print("Second number :") 
     sn = float(input(">>>")) 
     a = fn+sn 
     print(a) 
elif ac == 2: 
     print("First number :") 
     fn = float(input(">>>")) 
     print("Second number :") 
     sn = float(input(">>>")) 
     a = fn-sn 
     print(a) 
elif ac == 3: 
     print("First number :") 
     fn = float(input(">>>")) 
     print("Second number :") 
     sn = float(input(">>>")) 
     a = fn*sn 
     print(a) 
elif ac == 4: 
     print("First number :") 
     fn = float(input(">>>")) 
     print("Second number :") 
     sn = float(input(">>>")) 
     a = fn/sn 
     print(a) 
else: 
     badnum() 


Erläuterung: Bevor Sie wurden für ac == 1 Überprüfung und ac == 4, die nicht beide wahr sein können, so wurde die zweite else Anweisung auch ausgeführt. Dies kann mit der if..elif Konstruktion weggelassen werden: einmal, einer der früheren Vergleiche wird wahr, der Rest wird nicht mehr ausgeführt.

+1

Große Antwort! Ich kann es nicht als die Antwort für zehn Minuten markieren, aber ich werde, sobald ich kann. –

+0

@EliR: Keine Sorge, froh zu helfen :) – Jan

2

Sie shoud elif verwenden:

if ac == 1: 
    ... 
elif ac == 2: 
    ... 
elif ac == 3: 
    ... 
elif ac == 4: 
    ... 
else: 
    ... 
+0

Dies ist eine großartige Antwort, aber der andere Benutzer antwortete zuerst, und seine hat Erklärung hinzugefügt, so dass ich seine als die Antwort markieren muss. –

0

Wenn ich Sie richtig verstehe, Sie brauchen nur zu ersetzen, zweite und weitere if mit elif:

if ac == 1: 
... 
elif ac == 2: 
... 
if ac == 3: 
...   
if ac == 4: 
...   
else: 
... 

Und "Invalid Number" wird nicht gedruckt nach jeder Berechnung.