@Giben: Weiter zum Taschenrechner-Quelltext:
Es gelten weiterhin die allgemeinen Anmerkungen zum Mohrhun-Quelltext bezüglich Namensgebungen und so weiter.
`sys.exit()` sollte nur verwendet werden wenn man auch tatsächlich, mindestens potentiell, einen anderen Rückgabecode als 0 an den Aufrufer übermitteln will. Nicht einfach so nur weil man das Programm beenden will. In dem Fall sollte man den Programmablauf einfach zu seinem natürlichen Ende kommen lassen. Im vorliegenden Programm in dem man die Schleife mit ``break`` verlässt.
Bei den Funktionen für die Rechenarten braucht man das Ergebnis nicht an einen Namen binden wenn alles was man damit macht ist, den beim ``return`` zu verwenden. Allerdings braucht man diese Funktionen auch gar nicht selbst schreiben, denn die gibt es bereits fertig im `operator`-Modul.
Vergiss am besten gleich das es ``global`` gibt. Wenn eine Funktion ein Ergebnis hat, dann gibt man das per ``return`` an den Aufrufer zurück, und müllt damit nicht den Modulnamensraum zu.
Statt `choise` meintest Du sicher `choice`.
Beim Code für die Auswertung der Eingabe für die vier Rechenarten wiederholt sich der Code bis auf kleine Änderungen. Die Gemeinsamkeiten lassen sich in eine Funktion herausziehen, mit den Unterschieden als Parameter.
Feste, literale Zahlen in eine Zeichenkette formatieren macht wenig Sinn. Die 5 sollte auch nicht hart kodiert im Code stehen, sondern sich aus der Anzahl der Menüpunkte ergeben. Dazu kann man die in eine Liste stecken, deren Länge man abfragen kann.
Zwischenstand (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
from operator import add, mul, sub, truediv
def eingabe():
while True:
try:
a = int(input("1. Zahl: "))
b = int(input("2. Zahl: "))
except ValueError:
print("Fehler: Zahl muss eine Ganzzahl sein!")
else:
return a, b
def rechenaufgabe_bearbeiten(rechenart, ergebnisbezeichnung, funktion):
print(rechenart.upper())
a, b = eingabe()
ergebnis = funktion(a, b)
print(
f"\n{ergebnisbezeichnung.capitalize()}"
f" von {a} und {b} ist {ergebnis}\n"
)
def main():
print("Taschenrechner 02.04.2020 By Roli\n")
rechenarten = [
"Addition",
"Subtraktion",
"Multiplikation",
"Division",
]
while True:
for nummer, rechenoperation in enumerate(rechenarten):
print(f"{nummer}. {rechenoperation}")
print("0. EXIT")
choice = int(input("Ihre Wahl? "))
if choice == 0:
print("\nAUF WIEDERSEHEN")
break
if choice == 1:
rechenaufgabe_bearbeiten("Addition", "die Summe", add)
elif choice == 2:
rechenaufgabe_bearbeiten("Subtraktion", "die Differenz", sub)
elif choice == 3:
rechenaufgabe_bearbeiten("Multiplikation", "das Produkt", mul)
elif choice == 4:
rechenaufgabe_bearbeiten("Division", "der Quotient", truediv)
else:
print(
f"Bitte nur Zahlen zwischen 0 und {len(rechenarten)} eingeben!"
)
if __name__ == "__main__":
main()
Die Wiederholung der Rechenartnamen ist hier noch unschön. Hier liessen sich die Informationen zu einer Rechenart schön zu einem Objekt zusammenfassen und statt der Namen in einer Liste ablegen (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
from collections import namedtuple
from operator import add, mul, sub, truediv
Rechenart = namedtuple("Rechenart", "name ergebnisbezeichnung funktion")
def eingabe():
while True:
try:
a = int(input("1. Zahl: "))
b = int(input("2. Zahl: "))
except ValueError:
print("Fehler: Zahl muss eine Ganzzahl sein!")
else:
return a, b
def rechenaufgabe_bearbeiten(rechenart):
print(rechenart.name.upper())
a, b = eingabe()
ergebnis = rechenart.funktion(a, b)
print(
f"\n{rechenart.ergebnisbezeichnung.capitalize()}"
f" von {a} und {b} ist {ergebnis}\n"
)
def main():
print("Taschenrechner 02.04.2020 By Roli\n")
rechenarten = [
Rechenart("Addition", "die Summe", add),
Rechenart("Subtraktion", "die Differenz", sub),
Rechenart("Multiplikation", "das Produkt", mul),
Rechenart("Division", "der Quotient", truediv),
]
while True:
for nummer, rechenart in enumerate(rechenarten, 1):
print(f"{nummer}. {rechenart.name}")
print("0. EXIT")
choice = int(input("Ihre Wahl? "))
if choice == 0:
print("\nAUF WIEDERSEHEN")
break
if 1 <= choice < len(rechenarten):
rechenaufgabe_bearbeiten(rechenarten[choice - 1])
else:
print(
f"Bitte nur Zahlen zwischen 0 und {len(rechenarten)} eingeben!"
)
if __name__ == "__main__":
main()