Проект "Кава" (EasyGUI)

Користувачеві пропонується обрати один чи кілька компонентів, які він полюбляє у кавовому напої: молоко, збиті вершки, молочна пінка, карамель, шоколадний сироп тощо.

Програма формує перелік напоїв, які відповідають обраним смакам. Наприклад, якщо вибрано молочну пінку, то можна запропонувати такі напої, як капучино, марочино, лате, мокко. 


Інформацію зчитуємо з файлу kava.txt:

флет вайт, молоко, еспресо
капучино, молоко, молочна пінка, еспресо
макіато, молочна пінка, еспресо
лате, молоко, молочна пінка, еспресо
кон панна, збиті вершки, еспресо
лате макіато, молоко, збиті вершки, еспресо
айріш, віскі, збиті вершки, еспресо
раф, сироп, молочна пінка, еспресо
глясе, морозиво, шоколад, еспресо
мокко, шоколад, молоко, збиті вершки, еспресо
марочино, шоколад, молочна пінка, еспресо

Спочатку в описі йде назва напою, далі - складники.

Отже, потрібно сформувати загальне меню, виділити назви напоїв та їхні рецепти (складники без назви). Також потрібно мати окремий список інгредієнтів, які б не повторювались, щоб запропонувати їх користувачеві на вибір.


Зчитуємо дані з файлу і з кожного рядка перший елемент (номер нуль) записуємо у список напоїв coffee, а решту елементів - у список рецептів recipes:

import easygui

file=open('kava.txt')

coffee=[] #список напоїв

recipes=[] #список рецептів

for line in file:

    coffee.append(line.split(', ')[0])

    recipes.append(line.split(', ')[1:])


Наступний крок - сформувати список унікальних складників components. Переглядаючи усі об'єкти у списку рецептів, якщо певного компонента немає у списку components, то дописуємо його у цей список:

components=[] #список складників

for item in recipes:

    for element in item:

        if element.strip() not in components:

            components.append(element.strip())


Опишемо функції вибору складників, та визначення рекомендованих напоїв.


У функції вибору складників використаємо вікно типу multchoicebox, з можливістю вибору кількох елементів:

def pokaz(components):

    vybir=easygui.multchoicebox("Оберіть улюблені смаки", choices=components) #вікно з вибором складників

    recommend(vybir) #виклик функції формування списку напоїв


Наступна функція формує список рекомендованих напоїв, у яких зустрічаються вибрані складові

def recommend(vybir):

    service=[] #список рекомендованих напоїв

    for variant in vybir:  #для кожного вибраного складника

        for n in range(len(recipes)): #переглядаємо рецепти

            if variant in recipes[n]: #якщо цей складник є у рецепті з певним номером

                service.append(coffee[n]) #додаємо напій з цим номером до списку рекомендованих

    menu(service) #виклик функції показу напоїв клієнту


Остання функція показує список рекомендованих напоїв у вигляді кнопкового меню:

def menu(service):    

    client=easygui.buttonbox(choices=service)


Не забудьте додати у програму виклик функції вибору складників:

pokaz(components)


Завдання

Проект, описаний вище, може надати рекомендації, в яких один і той же напій зустрічається кілька разів. Потрібно:

1) забезпечити показ кожного напою лише 1 раз.

2) відсортувати напої за пріоритетністю: якщо обраний сироп та молочна пінка, то найточніше такому запиту відповідає напій раф (у ньому є обидва цих складники), а решта: капучино, макіато, лате, марочино - мають лише один із улюблених компонентів.

3) додати зображення.

4) додати можливість вказання кількості порцій напою та обчислення суми до сплати.

5) додати можливість формування замовлення кількох людей з різними смаками (після опрацювання замовлення однієї людини додати можливість вибрати улюблені складники наступному клієнту).

Остання зміна: четвер 31 березня 2016 11:13