Anfänger - Vereinfachung für Rechner Code - Schleife - gesucht

Code-Stücke können hier veröffentlicht werden.
Antworten
Ralfm
User
Beiträge: 2
Registriert: Sonntag 5. Februar 2017, 21:55

Sonntag 5. Februar 2017, 22:13

Hallo zusammen, habe gerade mit python angefangen, und Probleme eine einfache "while" Schleife hinzubekommen...
Es geht um einen Taschenrechner. Nach der ersten Rechnung soll das Programm nicht stoppen, sondern der Nutzer soll eine neue Rechnung ausführen können.
Mit meinem Code funktioniert das- ich konnte aber keine einfache Schleife hinbekommen und habe daher einen Teil des Codes doppelt (ab 33).
Wie kann ich den Code verschlanken? Kann bitte Jemand helfen? Danke!

[codebox=python file=Unbenannt.php]def add(num1, num2):
return num1 + num2
def sub(num1, num2):
return num1 - num2
def mul(num1, num2):
return num1 * num2
def div(num1, num2):
return num1 / num2

print("Taschenrechner")
print (" ")
def main():
operation = input("Was willst Du machen? Gib das Rechensymbol ein (+,-,*,/)")
if (operation != "+" and operation != "-" and operation != "*" and operation != "/"):
print("Entschuldige, aber Du must zuerst eins der vier Rechensymbole auswählen")
else:
var1 = float(input("Gib Zahl 1 ein (anstelle eines Kommas mußt Du einen . eingeben):"))
var2 = float(input("Gib Zahl 2 ein (anstelle eines Kommas mußt Du einen . eingeben):"))
if (operation == "+"):
print("Das Ergebnis der Addition ist:")
print(add(var1, var2))
elif (operation == "-"):
print("Das Ergebnis der Subtraktion ist:")
print(sub(var1, var2))
elif (operation == "/"):
print("Das Ergebnius der Division ist:")
print(div(var1, var2))
else:
print("Das Ergebnis der Multiplikation ist:")
print(mul(var1, var2))
frage = input("Willst Du noch einmal rechnen lassen? Schreibe 'Ja' oder 'Nein':")
while frage == 'Ja':
operation = input("Was willst Du machen? Gib das Rechensymbol ein (+,-,*,/)")
if (operation != "+" and operation != "-" and operation != "*" and operation != "/"):
print("Entschuldige, aber Du must zuerst eins der vier Rechensymbole auswählen")
else:
var1 = float(input("Gib Zahl 1 ein (anstelle eines Kommas mußt Du einen . eingeben):"))
var2 = float(input("Gib Zahl 2 ein (anstelle eines Kommas mußt Du einen . eingeben):"))
if (operation == "+"):
print("Das Ergebnis der Addition ist:")
print(add(var1, var2))
elif (operation == "-"):
print("Das Ergebnis der Subtraktion ist:")
print(sub(var1, var2))
elif (operation == "/"):
print("Das Ergebnius der Division ist:")
print(div(var1, var2))
else:
print("Das Ergebnis der Multiplikation ist:")
print(mul(var1, var2))
frage = input("Willst Du noch einmal rechnen lassen? Schreibe 'Ja' oder 'Nein':")
print("Das Programm wird beendet")
main ()[/code]
Zuletzt geändert von Anonymous am Montag 6. Februar 2017, 00:23, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 8101
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 5. Februar 2017, 22:21

@Ralfm: Python kennt keinen Schleifentyp, bei dem die Bedingung am Ende ausgewertet wird, daher behilft man sich mit einer Endlosschleife und break:

Code: Alles auswählen

while True:
    ...
    if frage == 'Ja':
        break
Ansonsten: eingerückt wird immer mit 4 Leerzeichen pro Ebene. if und elif sind keine Funktionen, brauchen also keine Klammern. »in« ist hilfreich: »operation not in ("+", "-", "*", "/")«.
bb1898
User
Beiträge: 130
Registriert: Mittwoch 12. Juli 2006, 14:28

Montag 6. Februar 2017, 15:39

Zwei kleine Einwände zur Abfrage:

Die Variable, die das "Ja" oder "Nein" aufnimmt, sollte besser "antwort" heißen oder so, nicht "frage". Tut dem Programmablauf nicht weh, dem Leser des Codes aber nicht gut. Und mir scheint es unfreundlich, vom Nutzer zu verlangen, dass er "Ja" oder "Nein" ausschreibt, noch dazu mit großem Anfangsbuchstaben. Es reicht doch ein "j" oder "J", abfragbar mit

Code: Alles auswählen

if antwort.lower().startswith("j"):
    ...
das akzeptiert dann von "j" bis "JAAA!" alles halbwegs Einschlägige. Mit dem "Nein" wirst Du geradezu fies, denn Du lässt den Nutzer das ganze Wort hinschreiben, in Wirklichkeit reagiert Dein Programm aber nur darauf, dass er nicht "Ja" geschrieben hat.
BlackJack

Montag 6. Februar 2017, 17:28

Kleiner Hinweis: Die Funktionen am Anfang gibt es schon fertig im `operator`-Modul in der Standardbibliothek.
Ralfm
User
Beiträge: 2
Registriert: Sonntag 5. Februar 2017, 21:55

Dienstag 7. Februar 2017, 21:01

Hallo,

@BlackJack, bb1898 und Sirius3 vielen Dank für Eure Hilfe! Hab´ Eure Tips umgesetzt, sieht schon viel besser aus. Echt klasse das Forum!


Code: Alles auswählen

print(" ")
print(" ")
print("******************")
print("* Taschenrechner *")
print("******************")
print (" ")
while True:
    operation = input("Was willst Du machen? Gib das Rechensymbol ein (+,-,*,/):")
    if operation not in ("+", "-", "*", "/"):
        print("Bitte zuerst eins der vier Rechensymbole auswählen")
    else:
        var1 = float(input("Zahl 1 (anstelle von ',' bitte '.' eingeben):"))
        var2 = float(input("Zahl 2 (anstelle von ',' bitte '.' eingeben):"))
        if operation == "+":
            print("Das Ergebnis der Addition ist: ", (var1 + var2))
        elif operation == "-":
            print("Das Ergebnis der Subtraktion ist: ", (var1 - var2))
        elif operation == "/":
            print("Das Ergebnius der Division ist: ", (var1 / var2))
        else:
            print("Das Ergebnis der Multiplikation ist: ", (var1 * var2))
            print (" ")
        antwort = input("Willst Du noch einmal rechnen lassen? J / N:\n")
        if not antwort.lower().startswith("j"):
            break
print ("Das Programm wird beendet")
Antworten