Hallo Forum
Ich bin noch relativ neu zu python und habe eine logigfrage.
Mein programm soll die kombination von 5 buchstaben ausgeben die wenn man alle Wörter welche diese buchststaben einthalten entfernt möglichst viele Wörter entfernt.
Dies ist mein bisheriger code abgesehen von dem vergleichendem Teil am ende habe ich aber das problem das
nicht weiß wie ich die funktion kombinationen schreiben soll oder auch nur welches vorgehen ich benutzen soll um alle möglichen Kombinationen zu ermitteln, ihgendwie hab ich dagerade nen Knoten im Kopf.
Kann mir jemand helfen?
[codebox=python file=Unbenannt.txt]from string import *
from string import *
fin = open ('D:/Python36/own stuff/wortliste.txt')
abc = (list(string.ascii_lowercase))
x = 0
def kombinationen():
# gibt sämmtliche mögliche kombination von
# 5 Buchstaben in einer Liste
def test(a,b,c,d,e):
x = 0
for zeile in fin:
z = 0
y = 97
for i in range(5):
print (chr(y))
z = z + zeile.count(chr(y))
y = y+1
if z == 0:
x = x+1
else:
pass
return x
def controul():
liste = kombinationen()
x = 0
y = []
for i in liste:
a = liste[x]
a = list(a)
y = y +[test(a[0],a[1],a[2],a[3],a[4])]
return y
def vergleich():
y = conroul()
x = 0
a = 0
b = 0
for i in y:
if y[a] > y:
x = y[a]
elif y[a] < y:
x = y
else:
x = y[a]
a = a+1
b = b+1
return y.find(x)
print (vergleich(9))
[/code]
Danke im Vorraus
Kombinationen ausgeben lassen
@Oxijohn:
Wenn ich es richtig verstanden habe, suchst du ja im Prinzip einfach nur die fünf häufigsten Buchstaben, die in den Wörtern deiner Eingabedatei vorkommen, wobei jeder Buchstabe pro Wort nur einmal gezählt wird, oder? Wenn das so ist, kannst du dein Problem mit collections.Counter in einer handvoll Zeilen lösen, ohne irgendwas mit Kombinationen machen zu müssen.
Wenn ich es richtig verstanden habe, suchst du ja im Prinzip einfach nur die fünf häufigsten Buchstaben, die in den Wörtern deiner Eingabedatei vorkommen, wobei jeder Buchstabe pro Wort nur einmal gezählt wird, oder? Wenn das so ist, kannst du dein Problem mit collections.Counter in einer handvoll Zeilen lösen, ohne irgendwas mit Kombinationen machen zu müssen.
Zuletzt geändert von nezzcarth am Dienstag 30. Mai 2017, 20:51, insgesamt 1-mal geändert.
Ich habe das mal von dem „An alle Schüler und Studenten mit Informatikproblemen“-Thema abgetrennt. Das mit dem neuen Titel tut mir leid, aber ich habe die Frage nicht verstanden.
@Oxijohn: Wie gesagt, ich habe die Frage nicht verstanden. Und der Quelltext ist auch nicht gerade hilfreich, denn da funktioniert ja gar nichts. Dann kannst Du Dir den Quelltext auch sparen. Du rufst dort eine `vergleich()`-Funktion mit einem Argument auf, die nimmt aber gar kein Argument entgegen. Sie ruft eine `conroul()`-Funktion auf die es nicht gibt. Es gibt allerdings eine `controul()`-Funktion.
Alle ``for``-Schleifen in dem Quelltext machen nichts mit der Laufvariablen. Sollten sie aber. Oder es sollte nicht als ``for``-Schleife ausgedrückt werden.
Sternchen-Importe sind Böse™. Zumal Du dann auch noch versuchst dann doch über das Modul, was Du gar nicht importiert hast, auf `ascii_lowercase` zuzugreifen.
Die Datei auf Modulebene zu öffnen und dann in einer Funktion auszulesen ist Murks. Das öffnen (und schliessen!) sollte mit in der Funktion stehen. Variablen haben insgesamt auf Modulebene nichts zu suchen. Dort sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Alle ``for``-Schleifen in dem Quelltext machen nichts mit der Laufvariablen. Sollten sie aber. Oder es sollte nicht als ``for``-Schleife ausgedrückt werden.
Sternchen-Importe sind Böse™. Zumal Du dann auch noch versuchst dann doch über das Modul, was Du gar nicht importiert hast, auf `ascii_lowercase` zuzugreifen.
Die Datei auf Modulebene zu öffnen und dann in einer Funktion auszulesen ist Murks. Das öffnen (und schliessen!) sollte mit in der Funktion stehen. Variablen haben insgesamt auf Modulebene nichts zu suchen. Dort sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Erst einmal noch einmal entschuldigen für das nochmalige öffnen ds Themas ich dachte der post sei gelöscht nicht verschoben worden.
Zum thema des Quellcodes ja das sind Fehler welche mir auch hätten auffallen müssen und sind mitlerweile corrigiert. Der Code ist größtenteils ungetestet auch wenn das zugegeben zwar eine misserable Erklärung ist. Obwohl ich das Problem mit den schleifen nicht verstehe. Die Idee wahr das die schleife sich ein mal pro Element in der Liste bzw. in der Datei wiederholt
Ich glaube ich hab mich grundsätzlich falsch ausgedrückt lass es mich noch mal probieren.
Ich würde gerne eine Funktion schreiben welche mir sämmtliche möglichen 5 Buchstaben Kombinationen ausgibt wobei die Reihenfolge egal ist und ich komme selbst momentan nicht einmal darauf wie ich dies theoretisch auf dem Papier tun könnte.
Ich habe momentan das Gefühl ein wenig nervig zu sein.
Sollte das der Fall sein tut es mir leid ich bin nicht besonders oft auf Foren unterwechs.
Ich Hoffe ihr könnt mir helfen und danke im Vorraus
Zum thema des Quellcodes ja das sind Fehler welche mir auch hätten auffallen müssen und sind mitlerweile corrigiert. Der Code ist größtenteils ungetestet auch wenn das zugegeben zwar eine misserable Erklärung ist. Obwohl ich das Problem mit den schleifen nicht verstehe. Die Idee wahr das die schleife sich ein mal pro Element in der Liste bzw. in der Datei wiederholt
Vielen Dank dafür aber ich mir geht es tatsächlich momentan mehr darum das ich nicht herausbeckommen kann wie ich mein Problem löse als um das Ergebniss trotzdem vielen Dank.nezzcarth hat geschrieben:@Oxijohn:
Wenn ich es richtig verstanden habe, suchst du ja im Prinzip einfach nur die fünf häufigsten Buchstaben, die in den Wörtern deiner Eingabedatei vorkommen, wobei jeder Buchstabe pro Wort nur einmal gezählt wird, oder? Wenn das so ist, kannst du dein Problem mit collections.Counter in einer handvoll Zeilen lösen, ohne irgendwas mit Kombinationen machen zu müssen.
Ich glaube ich hab mich grundsätzlich falsch ausgedrückt lass es mich noch mal probieren.
Ich würde gerne eine Funktion schreiben welche mir sämmtliche möglichen 5 Buchstaben Kombinationen ausgibt wobei die Reihenfolge egal ist und ich komme selbst momentan nicht einmal darauf wie ich dies theoretisch auf dem Papier tun könnte.
Ich habe momentan das Gefühl ein wenig nervig zu sein.
Sollte das der Fall sein tut es mir leid ich bin nicht besonders oft auf Foren unterwechs.
Ich Hoffe ihr könnt mir helfen und danke im Vorraus
@Oxijohn: Schau Dir mal die kombinatorischen Funktionen im `itertools`-Modul an.
Code: Alles auswählen
In [11]: import string, itertools
In [12]: string.ascii_lowercase
Out[12]: 'abcdefghijklmnopqrstuvwxyz'
In [13]: xs = list(itertools.combinations(string.ascii_lowercase, 5))
In [14]: len(xs)
Out[14]: 65780
In [15]: xs[::6578]
Out[15]:
[('a', 'b', 'c', 'd', 'e'),
('a', 'e', 'q', 'x', 'y'),
('b', 'c', 'f', 'j', 'v'),
('b', 'h', 'k', 's', 'u'),
('c', 'f', 'g', 'w', 'y'),
('d', 'e', 'j', 'u', 'z'),
('e', 'f', 'g', 'i', 'n'),
('f', 'g', 'm', 'n', 'y'),
('g', 'k', 'p', 'q', 't'),
('i', 'o', 'r', 'w', 'z')]
- DeaD_EyE
- User
- Beiträge: 1012
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Ja hallo löschen?! Wie egoistisch ist das denn?.. mein Blutdruck
Es gibt vielleicht noch andere Menschen mit der selben Frage, die dann hier die Antwort finden.
Es gibt vielleicht noch andere Menschen mit der selben Frage, die dann hier die Antwort finden.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server