generator, Kombinationsmöglichkeiten

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
rollo70
User
Beiträge: 6
Registriert: Donnerstag 16. Juli 2015, 14:03

Hi zusammen,
bin zwar noch in den Anfängen von Python, verusche mich jedoch stetigen durch eigens gewählte Probleme zu steigern.
Mein Problem das ich mir gebastelt habe ist nun das Folgende:

Ich habe 3 Parameter mit jeweils einem Bereich von Min bis Max. Den Bereich möchte ich wiederum variabel unterteilen können. Als Beispiel nehmen wir die Anzahl an Pizzen, die man bestellen kann, Mindestens 1 und maximal 5. Den Bereich kann man z.B. halbieren wodruch die Anzahl an zu bestellbaren Pizzen gleich 3 ensteht. Es können demnach Pizzen in der Anzahl [1,3,5] bestellt werden. Bei den jeweilgen anderen Parametern ist dann die gleiche Teilung des Bereichs vorgesehen.
Gibt es nun einen Generator, der mir aus den drei Parametern mit den jeweiligen Faktoren die einzelnen Möglichkeiten der Reihe nach ausgibt. Also 3**3 Möglicheiten.
Zuletzt soll der Genrator jede Möglichkeit in ein eigenes File schreiben.

Code: Alles auswählen

import fileinput

minimal_radius_pizza=22
maximal_radius_pizza=28

minimal_anzahl_pizza=1
maximal_anzahl_pizza=5

minimal_nr_pizza=1
maximal_nr_pizza=9

unterteilung=2  <-- Bereich/Intervall halbieren

def bestellung_moeglichkeiten( )
       .
       . 
       .


with open('Bestellung_%d' %k, 'w') as out:
   for line in fileinput.input("vorlage_bestellung"):
      line = line.replace("anzahl_pizzen", str(anzahl_pizza))
      line = line.replace("radius_pizzen", str(radius_pizza))
      line = line.replace("nr_pizzen", str(nr_pizza))
      out.write(line)
vorlage_bestellung:
Möglichkeit X ist:

Anzahl: anzahl_pizzen
Nummer: nr_pizzen
Radius: radius_pizzen
Ich habe bereits gesehen, dass es hier entwickelte Generatoren für Permutationen und Kombinationen gibt. Permutationen und Kombinationen treffen ja nun nicht ganz zu. Hat jemand einen Ansatz oder eine Lösung, wie ich an die Sache herngehen könnte?
Zuletzt geändert von cofi am Freitag 24. Juli 2015, 14:05, insgesamt 1-mal geändert.
Grund: Code Markup korrigiert
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Verstehe ich nicht. Du ermittelst für eine Liste den min- und den max-Wert und willst den Mittelwert bestimmen, also sum(liste) / len(liste), wobei nur ein Integer Sinn macht.

Zum besseren Verständnis: Wenn du deine Problemstellung klarer formulierst, dann sollte dir geholfen werden. Für mich klingt es zu kompliziert, u. a. in 3 Dateien schreiben...
rollo70
User
Beiträge: 6
Registriert: Donnerstag 16. Juli 2015, 14:03

Ich habe drei Parameter in dem Beispiel Radius, Anzahl und Nummer der Pizza. Wodurch die eine Möglichkeit einer Bestellung besteht
-->Eine Bestellung mit der Anzahl an Pizzen, die alle den gleichen gewählten Radius haben und die selbe Bestellnummer.
Dadurch, dass ich nun ein Intervall einführe für die drei Parameter, aufgespannt durch mit min und max ergeben sich natürlich mehr Möglichkeiten da mehr Faktoren pro Parameter vorhanden sind:
Parameter 1 Radius --> range (22, 28, 6)
Parameter 2 Anzahl --> range (1, 5, 4)
Parameter 3 Nummer --> range (1, 9, 8 )

mit den Angaben aus dem Beispiel:
1. Möglichkeit: Radius Pizzen=22, Anzahl Pizzen=1 und Nummer Pizzen=1
2. Möglichkeit: Radius Pizzen=28, Anzahl Pizzen=5 und Nummer Pizzen=9
3. Möglichkeit: Radius Pizzen=28, Anzahl Pizzen=1 und Nummer Pizzen=9
4. Möglichkeit: Radius Pizzen=22, Anzahl Pizzen=1 und Nummer Pizzen=9
usw. insgesamt 2^3 Möglichkeiten.

Schritt zwei
Wenn ich das Intervall z.B. durch 2 weiter unterteilen möchte ensteht pro Parameter ein Faktor mehr. Dann gibt es 3^3 Möglichkeiten:
Parameter 1 Radius --> range (22, 28, 6/2)
Parameter 2 Anzahl --> range (1, 5, 4/2)
Parameter 3 Nummer --> range (1, 9, 8/2)

1. Möglichkeit: Radius Pizzen=22, Anzahl Pizzen=1 und Nummer Pizzen=1
2. Möglichkeit: Radius Pizzen=28, Anzahl Pizzen=5 und Nummer Pizzen=9
3. Möglichkeit: Radius Pizzen=25, Anzahl Pizzen=3 und Nummer Pizzen=5
4. Möglichkeit: Radius Pizzen=25, Anzahl Pizzen=1 und Nummer Pizzen=1
5. Möglichkeit: Radius Pizzen=25, Anzahl Pizzen=1 und Nummer Pizzen=5
6. Möglichkeit: Radius Pizzen=25, Anzahl Pizzen=1 und Nummer Pizzen=9
usw.

Schritt drei
Jede Möglichkeit soll in ein eigenes File geschrieben werden.

Es soll noch mehr dazukommen, doch hier klemmt es gerade sehr bei mir fürs erste. Hoffe so ist es verständlicher :)
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@rollo70: suchst Du itertools.product?
rollo70
User
Beiträge: 6
Registriert: Donnerstag 16. Juli 2015, 14:03

Ja genau das habe ich gesucht!!!

Danke dir vielmals Sirius3
Antworten