Das Erstellen von Testdaten gehört zu den unangenehmeren Aufgaben in der Softwareentwicklung. Wenn es jedoch um fiktive Szenarien wie Spiele oder Simulationen geht, wirken reale Namen oft fehl am Platz. Ein Ansatz zur Lösung dieses Problems ist die prozedurale Generierung von Fantasynamen – und das Ganze sogar ohne zusätzliche Bibliotheken.
Einfache Silbenkombination statt vorgefertigter Listen
Die klassische Methode, Namen aus einer statischen Liste zu ziehen, führt schnell zu Wiederholungen und begrenzter Vielfalt. Stattdessen bietet sich der Ansatz an, Namen aus kleinen Fragmenten zusammenzusetzen. Diese Fragmente lassen sich nach Rassen oder sprachlichen Mustern gruppieren und kombinieren. Ein Beispiel für Elfen-Namen könnte so aussehen:
import random
ELF_START = ["Ae", "Fae", "Lael", "Cael", "Syl"]
ELF_MID = ["", "la", "ri", "va", "thy"]
ELF_END = ["riel", "wyn", "thas", "lor", "ndil"]
def elf_name(rnd=random.random):
pick = lambda pool: pool[int(rnd() * len(pool))]
return (pick(ELF_START) + pick(ELF_MID) + pick(ELF_END)).capitalize()
print(elf_name()) # Ausgabe: 'Faewyn'Mit fünf Fragmenten pro Kategorie entstehen bereits 125 mögliche Kombinationen. Durch die Beschränkung der Fragmente auf bestimmte phonetische Muster lassen sich gezielt Namen für verschiedene Rassen erzeugen. Für Orks eignen sich beispielsweise härtere Konsonantencluster und kürzere Endungen:
ORC_START = ["Gr", "Mog", "Rok", "Dur", "Kra"]
ORC_MID = ["", "u", "a", "o"]
ORC_END = ["gor", "mash", "thar", "zak", "ruk"]Eine Kombination aus diesen Fragmenten ergibt Namen wie Grukgor oder Rokmash, die sofort als orkisch erkennbar sind.
Reproduzierbare Namen für Tests und Entwicklung
Ein entscheidender Vorteil dieser Methode liegt in der Reproduzierbarkeit. Indem der Zufallsgenerator als Parameter übergeben wird, lassen sich Namen gezielt steuern – besonders nützlich für Testdaten:
import random
def generate(seed=None):
rnd = random.Random(seed)
# ... Name-Generierung mit rnd() statt random.random()Durch das Setzen eines festen Seeds bleibt die Ausgabe in jeder Testlauf konsistent. Zudem sollte die Großschreibung erst am Ende der Funktion erfolgen, um inkonsistente Formatierungen wie FaeWyn zu vermeiden. Eine leere Zeichenkette im mittleren Fragment ermöglicht zudem eine einfache Variation der Namenslänge, ohne zusätzliche Bedingungen prüfen zu müssen.
Fertige Lösung für verschiedene Rassen
Wer nicht selbst die Fragmente definieren möchte, kann auf eine fertige Implementierung zurückgreifen. Das Paket dnd-name-generator bietet Namen für sieben Rassen – darunter Menschen, Elfen, Zwerge und Orks – sowie die Unterscheidung nach Geschlecht. Das Beste: Es kommt ohne externe Abhängigkeiten aus.
Die Installation erfolgt mit pip:
pip install dnd-name-generatorÜber die Kommandozeile lassen sich Namen direkt generieren:
dnd-name-generator -r dwarf -g masculine -n 5
# Ausgabe:
# Thorin
# Durgrim
# Balek
# Khazdin
# GimnorAuch die Integration in Python-Code ist einfach:
from dnd_name_generator import generate, generate_many
# Einzelner Name
generate("Tiefling", "Feminine") # Ausgabe: 'Kallieth'
# Mehrere Namen
generate_many(3, race="Orc") # Ausgabe: ['Grishnak', 'Moguk', 'Rokgor']Das Paket ist unter der MIT-Lizenz verfügbar und ermöglicht – wie die selbst implementierte Variante – das Setzen eines Seeds für reproduzierbare Ergebnisse.
Fazit: Flexible Namen ohne Ballast
Prozedurale Namensgenerierung bietet eine elegante Lösung für das Problem wiederkehrender Testdaten. Ob für Spiele, Simulationen oder automatisierte Tests – die Methode lässt sich schnell anpassen und bleibt dabei vollständig unabhängig von externen Bibliotheken. Wer eine sofort einsatzbereite Lösung sucht, findet im dnd-name-generator ein praktisches Werkzeug. So vermeiden Sie in Zukunft unpassende Namen wie Test User 3 und setzen stattdessen auf fantasievolle, aber konsistente Alternativen.
KI-Zusammenfassung
Faker kütüphanesiyle yetinmeyen geliştiriciler için hazırlanan, sadece Python standart kütüphanesiyle çalışan bir yöntem. Fantazi dünyalarına özgü gerçekçi karakter adları nasıl oluşturulur? İşte basit ve bağımsız bir çözüm.