From a9c311c289a9bd497eeedaf93398173a5e9d888e Mon Sep 17 00:00:00 2001 From: schneefux Date: Tue, 11 Nov 2014 18:41:14 +0100 Subject: eliminiere globale Variablen --- alphametiken2.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/alphametiken2.py b/alphametiken2.py index 7b44143..c98f7aa 100755 --- a/alphametiken2.py +++ b/alphametiken2.py @@ -4,12 +4,10 @@ import re -Alphametik = "SUCHEN - MACHT = SPASS" -Zahlen = ["EINS", "ZWEI", "DREI", "VIER", "FÜNF", "SECHS", "SIEBEN", "ACHT", "NEUN"] +Alphametik = "SUCHEN-MACHT=SPASS" lösungen = [] -Alphametik_buchstaben = [] # Liste der Buchstaben erstellen aus `wort` def buchstaben_liste(wort): buchstaben = [] @@ -22,7 +20,11 @@ def buchstaben_liste(wort): # Ersetzt einen Buchstaben aus `b` in einem Wort `wort` nacheinander durch `0-9` # und ruft sich selbst auf. Ist `b` leer, wird das Alphametik auf Richtigkeit getestet # und ggf. zu `lösungen` hinzugefügt. -def ersetze(b, wort, benutzte_zahlen = []): +# Zurückgegeben wird eine Liste mit Lösungen, Element der Liste ist der Rechnungsstring und ein dict +def ersetze(b, wort, benutzte_zahlen = [], lösungen = [], alle_buchstaben = None): + if alle_buchstaben == None: + alle_buchstaben = b + if len(b): for j in range(10): if j in benutzte_zahlen: # jede Zahl nur einmal verwenden @@ -32,25 +34,25 @@ def ersetze(b, wort, benutzte_zahlen = []): m_benutzte_zahlen.append(j) m_wort = wort.replace(b[0], str(j)) - ersetze(b[1:], m_wort, m_benutzte_zahlen) + ersetze(b[1:], m_wort, m_benutzte_zahlen, lösungen, alle_buchstaben) else: if re.search(r"\b0", wort): # 0 als erste Ziffer in einer Zahl ist nicht erlaubt return - wort = wort.replace("=", "==") - if eval(wort): - lsg = dict() - for j, k in zip(Alphametik_buchstaben, benutzte_zahlen): - lsg[j] = k + if eval(wort.replace("=", "==")): + lsg = [wort, dict()] + for j, k in zip(alle_buchstaben, benutzte_zahlen): + lsg[1][j] = k - print(lsg) # DEBUG lösungen.append(lsg) -Alphametik_buchstaben = buchstaben_liste(Alphametik) -ersetze(Alphametik_buchstaben, Alphametik) + return lösungen + + +l = ersetze(buchstaben_liste(Alphametik), Alphametik) -if len(lösungen) == 0: +if len(l) == 0: print("Keine Lösungen vorhanden") else: print("Es konnten folgende Lösungen gefunden werden:") - print(lösungen) + print(l) -- cgit v1.3.1