Programming lesson
UNIX-Systemprogrammierung: Wortfrequenzen, Piraten-Übersetzer und UPC-Prüfziffern in Python
Lerne in diesem Tutorial, wie du mit Python unter UNIX Wortfrequenzen zählst, einen Piraten-Übersetzer baust und UPC-Prüfziffern validierst – inklusive praktischer Codebeispiele.
Einführung in die UNIX-Systemprogrammierung mit Python
Die UNIX-Systemprogrammierung ist ein faszinierendes Feld, das dir die volle Kontrolle über Betriebssystemfunktionen gibt. In diesem Tutorial lernst du, wie du mit Python unter UNIX drei klassische Aufgaben löst: Wortfrequenzen in Textdateien zählen, einen Piraten-Übersetzer programmieren und UPC-Prüfziffern validieren. Diese Aufgaben sind nicht nur typisch für UNIX-Programmieraufgaben, sondern auch perfekt, um deine Python-Fähigkeiten zu vertiefen. Egal, ob du dich auf eine Prüfung vorbereitest oder deine Kenntnisse in Systemprogrammierung ausbauen möchtest – dieser Leitfaden hilft dir weiter.
Wortfrequenzen in einer Textdatei zählen
Das Zählen von Wortfrequenzen ist eine grundlegende Aufgabe in der Textverarbeitung. Stell dir vor, du analysierst die Songtexte deines Lieblings-Künstlers oder die Kommentare zu einem viralen AI-Tool – die Methode ist immer dieselbe. Hier ist ein Python-Programm, das eine Textdatei einliest und die Häufigkeit jedes Wortes in einem tabellarischen Format ausgibt.
def count_words(filename):
with open(filename, 'r') as file:
text = file.read().lower()
words = text.split()
freq = {}
for word in words:
# Entferne Satzzeichen
word = word.strip('.,!?;:"')
if word:
freq[word] = freq.get(word, 0) + 1
return freq
def print_table(freq):
# Sortiere nach Häufigkeit absteigend, dann alphabetisch
sorted_words = sorted(freq.items(), key=lambda x: (-x[1], x[0]))
print(f"{'Wort':<15}{'Häufigkeit':>10}")
print('-' * 25)
for word, count in sorted_words[:10]:
print(f"{word:<15}{count:>10}")
freq = count_words('input.txt')
print_table(freq)Dieses Programm öffnet die Datei, liest den gesamten Text, wandelt ihn in Kleinbuchstaben um und zählt die Wörter. Die Ausgabe erfolgt in einer sauberen Tabelle. Wenn du die ersten sieben Wörter ausgeben möchtest, kannst du die Schleife entsprechend anpassen. Diese Technik ist auch nützlich für die Analyse von Social-Media-Trends oder Produktbewertungen – ein echter Klassiker in der UNIX-Programmierung.
Piraten-Übersetzer: Text in Seemannssprache konvertieren
Ein Piraten-Übersetzer ist eine unterhaltsame Programmieraufgabe, die dir zeigt, wie du Textersetzungen automatisierst. Die Idee stammt aus einer bekannten Übung (Pb.4.3) und ist perfekt, um mit Wörterbüchern und String-Manipulation zu arbeiten. Stell dir vor, du willst einen Chatbot bauen, der wie ein Pirat spricht – das ist der gleiche Ansatz.
def pirate_translate(text):
translation = {
'hello': 'ahoy',
'friend': 'matey',
'my': 'me',
'you': 'ye',
'is': 'be',
'are': 'be',
'the': 'th''
}
words = text.lower().split()
translated = []
for word in words:
# Entferne Satzzeichen für den Vergleich
clean_word = word.strip('.,!?;:"')
if clean_word in translation:
translated.append(translation[clean_word])
else:
translated.append(word)
return ' '.join(translated)
with open('input.txt', 'r') as f:
original = f.read()
pirate_text = pirate_translate(original)
with open('hw8PirateOutput.txt', 'w') as f:
f.write(pirate_text)
print('Piratenübersetzung wurde in hw8PirateOutput.txt geschrieben.')Dieses Programm liest den Originaltext, ersetzt bestimmte Wörter durch Piratenbegriffe und schreibt das Ergebnis in eine Ausgabedatei. Du kannst das Wörterbuch leicht erweitern, um noch mehr Piratenflair zu bekommen. Diese Art der Texttransformation wird auch in der Sprachverarbeitung und bei Übersetzungsdiensten eingesetzt – ein praktisches Beispiel für UNIX-Systemprogrammierung.
UPC-Prüfziffern validieren
Universal Product Codes (UPC) sind allgegenwärtig – jedes Produkt im Supermarkt hat einen. Die Prüfziffer stellt sicher, dass der Code korrekt gescannt wurde. In dieser Aufgabe liest du eine Datei mit UPCs und gibst für jeden aus, ob die Prüfziffer gültig ist. Das ist ein tolles Beispiel für Datenvalidierung und Fehlererkennung, ähnlich wie bei Kreditkartennummern oder IBANs.
def validate_upc(upc):
# Entferne mögliche Leerzeichen oder Striche
upc = upc.replace('-', '').replace(' ', '')
if len(upc) != 12:
return False
# Extrahiere die Ziffern als Liste von Integern
digits = [int(d) for d in upc]
# Prüfziffer ist die letzte Ziffer
check_digit = digits[-1]
# Ziffern ohne Prüfziffer
body = digits[:-1]
# Summe der ungeraden Positionen (1.,3.,5.,... = Index 0,2,4,...)
odd_sum = sum(body[i] for i in range(0, len(body), 2))
# Summe der geraden Positionen (2.,4.,6.,... = Index 1,3,5,...)
even_sum = sum(body[i] for i in range(1, len(body), 2))
# Berechnung
total = odd_sum * 3 + even_sum
computed = (10 - (total % 10)) % 10
return computed == check_digit
# Beispiel: Datei mit UPCs lesen
with open('upc_list.txt', 'r') as f:
upcs = f.read().splitlines()
for upc in upcs:
if upc.strip():
valid = validate_upc(upc.strip())
print(f"{upc}: {valid}")Dieses Programm berechnet die Prüfziffer gemäß der beschriebenen Methode und vergleicht sie mit der angegebenen. Die Ausgabe zeigt für jeden UPC True oder False. Du kannst es leicht anpassen, um auch andere Prüfziffernverfahren zu implementieren, wie sie etwa bei ISBN oder EAN verwendet werden. Ein weiteres Beispiel für Systemprogrammierung unter UNIX.
Zusammenfassung und nächste Schritte
In diesem Tutorial hast du drei wichtige UNIX-Programmieraufgaben in Python gelöst: Wortfrequenzen zählen, einen Piraten-Übersetzer bauen und UPC-Prüfziffern validieren. Diese Aufgaben decken grundlegende Konzepte wie Dateiverarbeitung, String-Manipulation und Algorithmen ab. Die Beispiele sind direkt aus der Praxis gegriffen – ähnliche Techniken werden in Data Science, E-Commerce und Sprachverarbeitung eingesetzt. Versuche, die Programme zu erweitern: Füge weitere Piratenwörter hinzu, verarbeite große Dateien effizienter oder integriere eine grafische Oberfläche. Mit diesen Fähigkeiten bist du bestens gerüstet für weitere Herausforderungen in der UNIX-Systemprogrammierung.