Kombinationen ausgeben lassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Oxijohn
User
Beiträge: 12
Registriert: Dienstag 30. Mai 2017, 14:13

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
Zuletzt geändert von Oxijohn am Dienstag 30. Mai 2017, 20:37, insgesamt 1-mal geändert.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

@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.
Zuletzt geändert von nezzcarth am Dienstag 30. Mai 2017, 20:51, insgesamt 1-mal geändert.
BlackJack

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. :-(
BlackJack

@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.
Oxijohn
User
Beiträge: 12
Registriert: Dienstag 30. Mai 2017, 14:13

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
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.
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.

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
BlackJack

@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')]
Oxijohn
User
Beiträge: 12
Registriert: Dienstag 30. Mai 2017, 14:13

Mach ich danke für eure Hilfe
Oxijohn
User
Beiträge: 12
Registriert: Dienstag 30. Mai 2017, 14:13

Hat sich erledigt ich konnte den beitrag nur nicht löschen
Benutzeravatar
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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten