Seite 1 von 1
Kombinationen in einer Liste
Verfasst: Dienstag 30. Juli 2019, 21:30
von marcobaumann
Hallo,
Ich programmiere/baue im Moment eine Cocktail-Maschine und habe bis jetzt 8 feste Zutaten aus denen eine bestimmte Anzahl an Rezepten möglich ist. Mein Ziel ist es, dass der Benutzer in der Tkinter GUI festlegen kann, welche Zutaten er hat und ihm dann mögliche Rezepte vorgeschlagen werden, die er machen kann. Ich habe dort an eine Liste gedacht aber so einen richtigen Ansatz habe ich leider noch nicht. Ein Teil der Tkinter GUI ist schon fertig. Bitte bedenkt, dass ich noch ein Anfänger bin...
Vielen Dank schonmal im Vorraus
LG Marco

Re: Kombinationen in einer Liste
Verfasst: Dienstag 30. Juli 2019, 21:58
von __blackjack__
@marcobaumann: Was ist denn die Frage?
Re: Kombinationen in einer Liste
Verfasst: Sonntag 18. August 2019, 15:14
von marcobaumann
Die Frage ist, wie ich mit Python die Pumpenbelegung angeben kann und dann die möglichen Rezepte angezeigt werden. Ich hoffe man versteht was ich meine.
LG
Re: Kombinationen in einer Liste
Verfasst: Sonntag 18. August 2019, 15:15
von marcobaumann
Mit Pumpenbelegung meine ich das Getränk, was an die Pumpe angeschlossen ist
Re: Kombinationen in einer Liste
Verfasst: Sonntag 18. August 2019, 15:25
von __deets__
Wie sieht denn bei dir eine Rezeptdefinition im Code aus? Und wie sieht die Zuordnung der 8 Pumpen zu dem gefoerderten Getraenk aus? Aus letzterem musst du dann nur eine Menge bilden, und aus ersteren all die raussuchen, deren Zutaten eine Teilmenge darstellen.
Code: Alles auswählen
AVAILABLE = { "VODKA", "MARTINI", "RUM", "SCHLUMPFPISSE" }
RECIPES = {
"Vodka Martini" : { "VODKA", "MARTINI" },
...
}
for name, zutaten in RECIPES.items():
if AVAILABLE > zutaten:
print(name)
Re: Kombinationen in einer Liste
Verfasst: Sonntag 18. August 2019, 15:44
von snafu
Es sind also für eine bestimmte Belegung alle Rezepte gesucht, deren Zutaten komplett von der Belegung abgedeckt werden, richtig? Ich würde das mit Mengen (Sets) lösen. Hier mal grob umrissen:
Code: Alles auswählen
RECIPES = [
{'A', 'C', 'F'},
{'B', 'D', 'G', 'H'},
{'A', 'I', 'J'},
{'B', 'C'},
{'D', 'E', 'F', 'G'},
{'A', 'B', 'C', 'D'},
{'I', 'J', 'K'}
]
def find_recipes(ingredients):
return [recipe for recipe in RECIPES if recipe <= ingredients]
def main():
print(find_recipes({'A', 'I', 'J', 'K'}))
if __name__ == '__main__':
main()
Anstelle der Buchstaben hätte man natürlich die tatsächlichen Zutaten stehen. Hierbei werden erstmal nur die Arten an Zutaten betrachtet. Wenn auch die vorhandene Menge ins Spiel kommen soll, muss hierfür noch eine gesonderte Prüfung eingebaut werden...
Re: Kombinationen in einer Liste
Verfasst: Sonntag 18. August 2019, 16:35
von __deets__
snafu hat natuerlich recht, >= muss der Operator sein. Obwohl ich denke ein Cocktail mit 8 Zutaten etwas komisch schmeckt.
Re: Kombinationen in einer Liste
Verfasst: Sonntag 18. August 2019, 17:16
von snafu
Hier mal eine Variante, bei der auch die vorhandene Menge betrachtet wird:
Code: Alles auswählen
RECIPES = {
'Ham': {'A': 3, 'I': 5, 'J': 2},
'Spam': {'B': 2, 'C': 6},
'Eggs': {'I': 4, 'J': 1, 'K': 3}
}
def match(recipe, setup):
return all(name in setup and setup[name] >= amount
for name, amount in recipe.items())
def find_recipes(setup):
return [name for name, recipe in RECIPES.items()
if match(recipe, setup)]
def main():
print(find_recipes({'A': 25, 'I': 15, 'J': 10, 'K': 30}))
if __name__ == '__main__':
main()
Echte Rezepte möge man auch hier selbst einsetzen. Denkbar für die Zahlen wären Angaben in cl.
Re: Kombinationen in einer Liste
Verfasst: Montag 19. August 2019, 18:58
von marcobaumann
Vielen Dank für eure Hilfe. Ein Problem hätte ich jetzt noch. Wie kann ich dies geschickt in eine Tkinter GUI einbetten, sodass statt einer print Meldung der richtige Button zum Mixen erscheint? Außerdem muss man ja noch eine Oberfläche erstellen, sodass der Nutzer der Cocktailmaschine die Zutaten Angeben kann. Gibt es dazu ein geeignetes Tkinter Widget? Trotzdem schonmal vielen Dank, ihr habt mir sehr weitergeholfen...
LG