Meilenstein 2: CLI-App
Anforderungen
- argparse mit
--help - mind. 2 Argumente
- Logik-Funktionen mit Type Hints
- Fehlerfälle abgefangen
- mind. 2 unittest-Tests
- README (kurz)
- optional logging
Beispielidee: Punkte-Tool
python punkte.py add --name Luna --wert 5
python punkte.py list
Beispiellösung (einfacher Rechner-CLI)
Lösung anzeigen
import argparse
import unittest
def berechne(a: float, b: float, op: str) -> float:
if op == "+":
return a + b
if op == "-":
return a - b
if op == "*":
return a * b
if op == "/":
if b == 0:
raise ValueError("Division durch 0")
return a / b
raise ValueError("Unbekannte Operation")
def main() -> None:
p = argparse.ArgumentParser(description="Mini-Rechner")
p.add_argument("a", type=float)
p.add_argument("op", choices=["+", "-", "*", "/"])
p.add_argument("b", type=float)
args = p.parse_args()
try:
print(berechne(args.a, args.b, args.op))
except ValueError as e:
print("Fehler:", e)
class TestBerechne(unittest.TestCase):
def test_add(self):
self.assertEqual(berechne(2, 3, "+"), 5)
def test_div0(self):
with self.assertRaises(ValueError):
berechne(1, 0, "/")
if __name__ == "__main__":
# Zum Testen: python datei.py (ohne Args startet main und kann meckern)
# Besser Tests: python -m unittest datei.py
import sys
if len(sys.argv) > 1 and sys.argv[1] == "test":
unittest.main(argv=["x"])
else:
main()
Hinweis: Tests und CLI in einer Datei sind zum Lernen ok; später trennen.
Band 7 Abschluss
Du kannst jetzt:
- pathlib und Zeit stempel
- Web-APIs laden und absichern
- Type Hints und Dataclasses
- Logging und unittest
- CLI mit argparse und Schichten
Als Nächstes (Band 8+): mehr Werkzeuge, Visualisierung, Web – wenn du willst.