Skip to content

Commit 858da79

Browse files
authored
diet smoothie generator
1 parent e3bff50 commit 858da79

File tree

1 file changed

+143
-0
lines changed

1 file changed

+143
-0
lines changed

diet.py

+143
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
import random
2+
import sys
3+
from time import sleep
4+
5+
6+
ingridients = sorted(["огурец", "сельдерей", "банан", "апельсин", "капуста", "морковка", "киви", "помидор", "груша", "вишня", "петрушка", "имбирь", "яблоко", "персик", "клубника", "смородина", "ежевика", "малина", "укроп", "мята", "шпинат", "брокколи", "грейпфрут", "авокадо", "болгарский перец", "манго", "личи", "драконий фрукт"])
7+
8+
9+
def intro():
10+
print("Программа автоматического выбора ингридиентов для смузи\n")
11+
show_ingridients()
12+
13+
14+
def outro(sec):
15+
sleep(sec)
16+
sys.exit()
17+
18+
19+
def show_ingridients():
20+
print("Доступные ингридиенты:\n")
21+
for i, v in enumerate(ingridients):
22+
print(f'{i+1:3}. {v}')
23+
24+
25+
def is_correct_int(user_input, num = 6):
26+
if user_input.isdigit() and (0 <= int(user_input) <= num):
27+
return True
28+
return False
29+
30+
31+
def is_correct_str(user_input):
32+
if user_input.isalpha():
33+
return True
34+
return False
35+
36+
37+
def menu_print():
38+
print(f'''\nМеню управления:
39+
-- 1. Показать доступные ингридиенты
40+
-- 2. Добавить ингридиент
41+
-- 3. Удалить ингридиент
42+
-- 4. Смешать 2 ингридиента
43+
-- 5. Смешать 3 ингридиента
44+
-- 6. Смешать заданное количество ингридиентов
45+
46+
-- 0. Выход\n''')
47+
48+
49+
def menu_ask():
50+
menu_print()
51+
menu_len = 6 # Изменить при изнемении количества пунктов меню
52+
num = -1
53+
while num % 10 != num:
54+
user_input = input("Выбран пункт: ")
55+
if is_correct_int(user_input, menu_len):
56+
return int(user_input)
57+
else:
58+
print("Неверный ввод. Повторите.")
59+
60+
61+
def menu_act():
62+
match (menu_ask()):
63+
case 1:
64+
show_ingridients()
65+
menu_act()
66+
case 2:
67+
add_ingridient()
68+
case 3:
69+
remove_ingridient()
70+
case 4:
71+
output_smoothie(get_smoothie(2))
72+
case 5:
73+
output_smoothie(get_smoothie(3))
74+
case 6:
75+
output_smoothie(get_smoothie(0))
76+
case 0:
77+
print("Завершение программы...")
78+
outro(2)
79+
case _:
80+
print("Что пошло не так. Через 3 секунды программа завершиться...")
81+
outro(3)
82+
83+
84+
def add_ingridient():
85+
user_input = input("Введите один ингридиент: ").lower().strip().split(" ")
86+
if is_correct_str(user_input[0]):
87+
if user_input[0] not in ingridients:
88+
ingridients.append(user_input[0])
89+
print(f'Ингридиент "{user_input[0]}" добавлен.\n')
90+
menu_act()
91+
else:
92+
print("Что-то пошло не так. Ингридиент не добавлен.")
93+
menu_act()
94+
95+
96+
def remove_ingridient():
97+
num = -1
98+
show_ingridients()
99+
print("\n0. для выхода")
100+
101+
while True:
102+
user_input = input("Введите номер ингридиента для удаления: ")
103+
if is_correct_int(user_input, len(ingridients)):
104+
num = int(user_input)
105+
break
106+
print(num)
107+
if num == 0:
108+
menu_act()
109+
elif 0 < num <= len(ingridients):
110+
dct = {k:v for k, v in enumerate(ingridients)}
111+
ingridients.remove(dct[num-1])
112+
print(f'Ингридиент "{dct[num-1]}" удален.\n')
113+
menu_act()
114+
115+
116+
def get_smoothie(num = 3):
117+
if not (2 >= num >= 3):
118+
while num > len(ingridients) or num < 1:
119+
user_input = input(f"Сколько ингридиентов использовать? Доступно {len(ingridients)} ингридиентов: ")
120+
if is_correct_int(user_input):
121+
num = int(user_input)
122+
break
123+
else:
124+
print("Неверный ввод. Повторите.")
125+
smoothie = set()
126+
while len(smoothie) < num:
127+
smoothie.add(random.choice(ingridients))
128+
return smoothie
129+
130+
131+
def output_smoothie(lst):
132+
print(f"Вот ингридиенты для вашего смузи: {lst}.")
133+
134+
135+
def run():
136+
intro()
137+
menu_act()
138+
139+
140+
if __name__ == "__main__":
141+
assert sys.version_info >= (3, 10), f'\n\nОбновите Python до версии 3.10 или новее\nВаша текущая версия Python: {sys.version_info[0]}.{sys.version_info[1]}'
142+
run()
143+
outro(2)

0 commit comments

Comments
 (0)