#python #variables
#python #переменные
Вопрос:
В настоящее время я пытаюсь создать какую-то простую систему рекомендаций для покупателей в винном магазине. После ответа на пару простых вопросов с помощью input() (тип алкоголя, например, вино, подтип, например, шираз, цена):
class Customer(object):
def __init__(self, alcohol, interest, budget, preference):
self.alcohol = alcohol
self.interest = interest
self.budget = budget
self.preference = preference
# recording user input
@classmethod
def ask_customer(c):
while True:
# getting alcohol kind
alcohol = input("What the customer would like to purchase?")
if alcohol.lower() not in alcohol_types:
print("Enter the right type of alcohol that we have in store")
alcohol = input("> ")
else:
pass
# getting the type of preferred alcohol
interest = input(f"What type of {alcohol} is the customer is looking for?> ")
if interest.lower() not in wine_types:
print(f"Enter the right type of {alcohol}")
interest = input("> ")
else:
pass
# getting how much money the customer is willing to spend
budget = input(f"How much is the customer willing to spend on a bottle of {interest}> ")
if not budget.isdigit():
print("Enter the number")
budget = input("> ")
else:
pass
# getting taste preferences of the customer
preference = input(f"What style of {interest} is the customer looking for?")
if preference.lower() not in preference_list:
print(f"Enter a different description for {interest}")
preference = input("> ")
else:
break
Затем я получаю доступ к списку списков с параметрами пользователя:
if interest == "shiraz":
# get_wines to extract items from shiraz list that satisfy the taste and price requirements
chosen_wines = []
for sublist in shiraz_list:
if sublist[1] == budget and sublist[2] == preference:
chosen_wines.append(sublist[0])
else:
continue
if len(chosen_wines) == 1:
print(chosen_wines[0])
elif len(chosen_wines) > 1:
print(random.choice(chosen_wines))
else:
print("No wines found")
Вот пример shiraz_list:
shiraz_list = [
["Wine name 1", "15", "sweet"],
["Wine name 2", "15", "sweet"],
["Wine name 3", "10", "sweet"],
["Wine name 4", "5", "dry"],
["Wine name 5", "30", "sour"],
["Wine name 6", "20", "sweet"]
]
Работает просто отлично. Проблема в том, что в настоящее время у меня есть 8 видов вина (merlot_list, cabernet_list и т.д.), Несколько сортов пива и спиртных напитков, и создание условия «если» для каждого из них на самом деле не кажется очень эффективным решением.
Чтобы решить эту проблему, я хочу использовать ввод пользователя (интерес), чтобы определить, к какому *_list необходимо получить доступ. Я знаю, что следующий код непростительно неправильный и никогда не будет работать, но он отразит и объяснит, что я пытаюсь здесь сделать:
testlist = interest "_list"
for sublist in testlist:
if sublist[1] == budget and sublist[2] == preference:
chosen_wines.append(sublist[0]) etc...
И здесь возникает вопрос: как мне получить доступ к существующему списку в зависимости от ввода клиента, не используя дюжину if
s?
Комментарии:
1. Почти всегда ответ на вопрос «как мне превратить строку в переменную» — «не надо; используйте словарь».
Ответ №1:
Может быть, вы можете создать словарь, соответствующий интересам и спискам.
# some sample lists
shiraz_list = [["Wine name 1", "15", "sweet"], ["Wine name 2", "15", "sweet"]]
merlot_list = [["Wine name 3", "10", "sweet"], ["Wine name 4", "5", "dry"]]
cabernet_list = [["Wine name 5", "30", "sour"], ["Wine name 6", "20", "sweet"]]
# we can use dictionary to create key:value pairs, then get value by key
# which is similar to get value by index when using list
interest_match = {
"shiraz": shiraz_list,
"merlot": merlot_list,
"cabernet": cabernet_list
}
interest = input()
# interest_match[interest] get the list by interest, e.g. interest_match["shiraz"] return shiraz_list
for sublist in interest_match[interest]:
print(sublist[0])
Вывод:
# Input: shiraz
Wine name 1
Wine name 2
# Input: merlot
Wine name 3
Wine name 4
# Input: cabernet
Wine name 5
Wine name 6
Ответ №2:
Я думаю, вы можете использовать ассоциативный массив или систему ключ-значение.
alcohol = {}
for x in shiraz_list:
alcohol["shiraz"].push(x)
for x in other_list:
alcohol["other"].push(x)
и так далее. Затем вы можете получить к нему доступ следующим образом
alcohol[input_variable][iteration]