Möglichkeiten bei Zahlenreihen?...

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
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Freitag 12. Januar 2007, 18:34

(Hm, schwierig eine Überschrift dafür zu finden...)

Hallöschen erstmal, tolles Forum hier. Ich programmier noch nicht sonderlich lange Python, aber ich finde die Sprache sehr interessant und auch recht toll. Hab in meiner momentanen Schule ein Jahr Java gelernt. Gelernt ist vllt das falsche Wort, wir haben überhaupt nichts gelernt... egal. Auf jedenfall gibt es ein Problem, dass ich gerne mit Python lösen möchte...

Ein Konsolenprogramm was Zahlen abfragt und alle möglichen Umstellungen anzeigt. Die Eingabe und so krieg ich ja schon hin, auch wenn's bestimmt nicht sonderlich elegant ist, aber irgendwie harpert es bei der Ausgabe... Um nochmal zu zeigen was ich meine... Beispielsweise eine Reihe von diesen Zahlen:

1, 5, 6

Und anschließend soll das Programm dies hier ausgeben:

1, 5, 6
1, 6, 5
5, 1, 6
5, 6, 1
[...]

Mein Quellcode sieht bis jetzt so aus:

Code: Alles auswählen

#Einlesen der Eingabe...
zahlen = []
zahlenstring = raw_input("Geben sie bitte die Zahlen ein (Mit Kommatas trennen): ")
zahlenstring = zahlenstring.replace(" ","")
zahlen = zahlenstring.split(",")

#Ausgabe der Möglichkeiten.
for i in zahlen:
    print
    for y in zahlen:
        print i, y
Bestimmt nicht toll und so, aber ich mach das ja noch nicht so lange, also seid bitte nett o.o Ich krieg bis jetzt noch nicht sonderlich viel hin, eine simple Oberfläche in wxPython, Rechenprobleme lösen usw... aber hier verzweifle ich gerade ein bisschen...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Freitag 12. Januar 2007, 18:51

Ups, Dein Avatar hat mich verwirrt - habe geglaubt, Du bist jemand anderer. :oops:

Also: Herzlich willkommen im Forum. Die Links sind Rezepte für verschiedene Permutationen. Am besten einfach mal ausprobieren.

Gruß,
Christian
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 12. Januar 2007, 18:56

Hallo BlackVivi, willkommen im Forum,

Das gesuchte Stichwort lautet "Permutationen". Stochastik, 12. Klasse, eigentlich recht nett.

Hier findest du einen Generator, der Permutationen ausgibt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Freitag 12. Januar 2007, 22:31

So hab ich das nun gelöst :)

Code: Alles auswählen

#Methode zur Berechnung von allen Permutationen
def all_perms(str): 
    if len(str) <=1: 
        yield str 
    else: 
        for perm in all_perms(str[1:]): 
            for i in range(len(perm)+1): 
                #nb str[0:1] works in both string and list contexts 
                yield perm[:i] + str[0:1] + perm[i:]

#Einlesen der Eingabe...
zahlen = []
zahlenstring = raw_input("Geben sie bitte die Zahlen ein (Mit Kommatas trennen): ")
zahlenstring = zahlenstring.replace(" ","")
zahlenstring = zahlenstring.replace(",","")

#Berechnung der Möglichkeiten mithilfe der all_perms-Methode.
for perms in all_perms(zahlenstring):
    zahlen.append(perms)

#Sortierung und Ausgabe
zahlen.sort()
for i in zahlen:
    print i
Vielleicht nicht der tollste code, aber es klappt.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 12. Januar 2007, 23:45

Hi und willkommen im Forum.

Bitte keine Keywords, etc überschreiben auch wenn es fälschlicherweise in dem Originalscript so gemacht wurde. Im Zweifelsfall, wenn einem kein besserer Name einfällt, dann einen unterstrich ans ende hängen wie in PEP8 beschrieben.

Daher lieber so:

Code: Alles auswählen

#Methode zur Berechnung von allen Permutationen
def all_perms(str_):
    if len(str_) <=1:
        yield str_
    else:
        for perm in all_perms(str_[1:]):
            for i in range(len(perm)+1):
                yield perm[:i] + str_[0:1] + perm[i:] 
lg
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Samstag 13. Januar 2007, 10:59

sape hat geschrieben:Hi und willkommen im Forum.

Bitte keine Keywords, etc [...]
Ja, der Code war auch kopiert. Hät' ich das komplett allein' geschrieben, hät' ich das nicht gemacht... Würde mich auch total durcheinanderbringen.
Antworten