Seite 1 von 1
Kombinationen ausgeben lassen
Verfasst: Dienstag 30. Mai 2017, 20:07
von Oxijohn
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
Re: An alle Schüler und Studenten mit Informatikproblemen
Verfasst: Dienstag 30. Mai 2017, 20:27
von nezzcarth
@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.
Re: Irgendwas mit Kombinationen
Verfasst: Dienstag 30. Mai 2017, 20:46
von 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.

Re: Irgendwas mit Kombinationen
Verfasst: Dienstag 30. Mai 2017, 21:05
von 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.
Re: Irgendwas mit Kombinationen
Verfasst: Donnerstag 1. Juni 2017, 10:58
von Oxijohn
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
Re: Kombinationen ausgeben lassen
Verfasst: Donnerstag 1. Juni 2017, 11:14
von 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')]
Re: Kombinationen ausgeben lassen
Verfasst: Donnerstag 1. Juni 2017, 11:27
von Oxijohn
Mach ich danke für eure Hilfe
Re: Kombinationen ausgeben lassen
Verfasst: Montag 12. Juni 2017, 11:16
von Oxijohn
Hat sich erledigt ich konnte den beitrag nur nicht löschen
Re: Kombinationen ausgeben lassen
Verfasst: Montag 12. Juni 2017, 14:28
von DeaD_EyE
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.