Kombinationen in einer Liste

Fragen zu Tkinter.
Antworten
marcobaumann
User
Beiträge: 4
Registriert: Dienstag 30. Juli 2019, 21:21

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 :D
Benutzeravatar
__blackjack__
User
Beiträge: 13114
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@marcobaumann: Was ist denn die Frage?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
marcobaumann
User
Beiträge: 4
Registriert: Dienstag 30. Juli 2019, 21:21

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
marcobaumann
User
Beiträge: 4
Registriert: Dienstag 30. Juli 2019, 21:21

Mit Pumpenbelegung meine ich das Getränk, was an die Pumpe angeschlossen ist
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

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)
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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...
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

snafu hat natuerlich recht, >= muss der Operator sein. Obwohl ich denke ein Cocktail mit 8 Zutaten etwas komisch schmeckt.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
marcobaumann
User
Beiträge: 4
Registriert: Dienstag 30. Juli 2019, 21:21

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
Antworten