Hallo..bin ein Newbie und von Python an sich begeistert..klappt nur leider noch immer nicht ganz.
FRAGE Nr. 1:
Ich möchte einen STRING namens 'chain' generieren, soweit:
alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
A = alphabet[0]
B = alphabet[0]
C = alphabet[0]
D = alphabet[0]
chain = A+B+C+D
print (chain)
Allerdings möchte ich nun auch AAAB, AAAC,...ZZZZ, also alle möglichen Varianten generieren.
Die Frage: Wie erhöhe ich z.B. D auf alphabet[1]...alphabet[26], weiters dass dieses wieder auf alphabet[0] springt wenn C das erste mal auf alphabet[1] erhöht wird? So dass eben one-after-another alle Kombinationen an 26^4 Buchstabenkombinationen ausgegeben werden?
FRAGE Nr. 2
Jetzt wird's knackig: Ich möchte nun jeden gefundenen string mit einem dictionary.py bzw. .txt abgleichen. Und zwar am besten so, dass ich alle Kombinationen mit mehreren Wörtern ausgespuckt bekomme. In der Praxis ist meine 'chain' tatsächlich 12 Buchstaben lang (manche Buchstaben sind vorgegeben, andere werden durch Fragestellung Nr. 1 ergänzt).
Ein Beispiel:
Der Generator spuckt mehrere strings aus, z.B.:
QMEINXNAMEER
YSEINHAUSTHI
QPIEFJÖALENI
...
Mit dem Dictionary wird nun abgeglichen. Optimales Ergebnis wäre (bei Mindestanzahl Worte: 2)
['MEIN', 'NAME'] ['MEIN', 'MEER']
['SEIN', 'HAUS']
[]
so dass man erkennen kann, welcher synthetisch generierte String nun tatsächlich einen lesbaren Text beinhaltet (also idealerweise eine Mindestanzahl an Worten berücksichtigt).
Momentan schaffe ich es mit
import re
dict = ['Haus', 'Baum', 'Pflanze']
a = 0
x = re.findall(dict[a], chain)
print (x)
leider nur ein Wort innerhalb eines strings zu finden.
x = re.findall(dictionary.py, chain)
funktioniert leider auch nicht. Gefunden werden sollen dennoch mehrere, also z.B. zumindest zwei Worte. Mit
input = open ('dictionary.py','r')
Z = input.read()
x = re.findall(Z, chain)
print (x)
komme ich leider ebenfalls nicht wirklich weiter. Das ganze ist zum Entschlüsseln einer klassischen Chiffre (z.B. Edward Elgar) gedacht.
Danke für Eure Ideen, eine Lösung die mir das ganze so ausspuckt, dass man auch noch erkennen kann von welchem String die Ergebnisse kommen, ist mir auf jeden Fall ein Wiener Schnitzel wert..an der Chiffre (nicht Edward Elgar) bin ich im übrigen seit etwa sechs Jahren dran..nun wesentlichen einen Schritt weiter, würde ich gerne das Ergebnis technisch komplettieren (Excel funktioniert für diese Methode, aber viel zu langsam ).
Quicktrader
findall
-
- User
- Beiträge: 16
- Registriert: Freitag 6. November 2015, 20:24
Danke für den Tipp mit itertools.product..bzgl. Frage zwei ist im Grunde einfach - wie kann ich einen String dahingehend überprüfen ob mehrere Worte aus einer Dictionary enthalten sind?Üpsilon hat geschrieben:Zu Frage 1: Googel mal nach itertools.product
Und Frage 2 versteh ich nicht.
Bin für jeden Tip dankbar,
QT
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
ist gleich in zweierlei Hinsicht schlecht.
1. ist `dict` eine Build-in Funktion von Python, die du so überschreibst
2. ist das so wie so kein Dictionary, sondern eine Liste.
Ob z.B. ein String ein Element einer Liste ist, kann du mittels `in` überprüfen. Wenn du wissen willst, welche Elemente von Liste A in Liste B vorhanden sind, kannst du z.B. über Liste A iterieren und jedes Element so mittels `in` gegen Liste B prüfen
Gruß, noisefloor
Code: Alles auswählen
dict = ['Haus', 'Baum', 'Pflanze']
1. ist `dict` eine Build-in Funktion von Python, die du so überschreibst
2. ist das so wie so kein Dictionary, sondern eine Liste.
Ob z.B. ein String ein Element einer Liste ist, kann du mittels `in` überprüfen. Wenn du wissen willst, welche Elemente von Liste A in Liste B vorhanden sind, kannst du z.B. über Liste A iterieren und jedes Element so mittels `in` gegen Liste B prüfen
Brute-Force Attacken sind nun mal zeitaufwendig bzw. rechen(zeit)intensiv. Das ist bei Python nicht viel anders.Excel funktioniert für diese Methode, aber viel zu langsam
Gruß, noisefloor