Zum Hauptinhalt springen

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.