Как получить доступ к значению из списка и связать два списка в python - PullRequest
1 голос
/ 07 августа 2020

Я изучал основы python и застрял на этой проблеме: введите описание изображения здесь

Код, который я мог написать до сих пор:

def calculate_bill_amount(gems_list, price_list, reqd_gems,reqd_quantity):
    bill_amount=0
    
    for i in reqd_gems:
        if(i=="Emerald"):
            bill_amount=____*1760
    return bill_amount

#List of gems available in the store
gems_list=["Emerald","Ivory","Jasper","Ruby","Garnet"]

#Price of gems available in the store. gems_list and price_list have one-to-one correspondence
price_list=[1760,2119,1599,3920,3999]

#List of gems required by the customer
reqd_gems=["Ivory","Emerald"]

#Quantity of gems required by the customer. reqd_gems and reqd_quantity have one-to-one correspondence
reqd_quantity=[3,2]

bill_amount=calculate_bill_amount(gems_list, price_list, reqd_gems, reqd_quantity)
print(bill_amount)

Я не могу получить значение из reqd_quantity и связать его с точным reqd_gem. Может ли кто-нибудь помочь мне понять logi c или предоставить logi c (чтобы я мог понять это самостоятельно, используя отладчик). Не требуется лог c для целых вопросов, а только то, как связать количество с этим конкретным самоцветом.

Ответы [ 5 ]

2 голосов
/ 07 августа 2020

Если это может помочь: вы можете использовать gems_list.index('name_of_gem'), чтобы найти позицию вашего reqd_gems, тогда у вас будет доступ к цене.

1 голос
/ 07 августа 2020

Вы можете сделать что-то вроде этого:


def calculate_bill_amount(gems_list, price_list, reqd_gems, reqd_quantity):
    gems_rate_mapping = {}
    for gem, price in zip(gems_list, price_list):
        gems_rate_mapping[gem] = price

    calculated_bill = 0
    for gem, qty in zip(reqd_gems, reqd_quantity):
        gem_price = gems_rate_mapping.get(gem)
        calculated_bill += qty * gem_price

    # apply 5% discount above 30k sale
    discount = 0
    if calculated_bill > 30000:
        discount = calculated_bill * (0.05)
    print(f"discount: {discount}")
    bill = calculated_bill - discount

    return bill


#List of gems available in the store
gems_list=["Emerald","Ivory","Jasper","Ruby","Garnet"]

#Price of gems available in the store. gems_list and price_list have one-to-one correspondence
price_list=[1760,2119,1599,3920,3999]



#List of gems required by the customer
reqd_gems=["Ivory","Emerald"]

#Quantity of gems required by the customer. reqd_gems and reqd_quantity have one-to-one correspondence
reqd_quantity=[3,2]

bill_amount=calculate_bill_amount(gems_list, price_list, reqd_gems, reqd_quantity)
print(bill_amount)

1 голос
/ 07 августа 2020

Вы можете связать каждый драгоценный камень с его количеством, используя их индекс в списке:

for gem in requested_gems:
    if gem == ‘Emerald’:
        bill_amount = req_quantity[requested_gems.index(gem)] * 1760

Это решит вашу проблему. Однако не стоит привыкать к подобным решениям. Один из первых шагов для решения любой проблемы - это выяснить, какую структуру данных использовать. Я знаю, что вы в процессе обучения, но хорошей структурой данных для этой проблемы является рассмотрение объекта для каждой покупки с разными атрибутами.

1 голос
/ 07 августа 2020

Пожалуйста, обратитесь к следующему, используйте dictionary, чтобы быстро решить проблему -

gems_list=["Emerald","Ivory","Jasper","Ruby","Garnet"]
price_list=[1760,2119,1599,3920,3999]
price_dict=dict(zip(gems_list, price_list))

reqd_gems=["Ivory", "Emerald"]
reqd_qty=[3,2]
reqd_dict=dict(zip(reqd_gems, reqd_qty))

total=0
for gem in reqd_gems:
    total+=price_dict[gem]*reqd_dict[gem]
1 голос
/ 07 августа 2020
#List of gems available in the store
gems_list=["Emerald","Ivory","Jasper","Ruby","Garnet"]
#Price of gems available in the store. gems_list and price_list have one-to-one correspondence
price_list=[1760,2119,1599,3920,3999]

# create dictionary based on both lists since there is a 1:1 relationship without duplicates
gem_dict = {gem_name:gem_price for (gem_name, gem_price) in zip(gems_list, price_list)}

#List of gems required by the customer
reqd_gems=["Ivory","Emerald"]
#Quantity of gems required by the customer. reqd_gems and reqd_quantity have one-to-one correspondence
reqd_quantity=[3,2]

# create dictionary based on both lists since there is a 1:1 relationship without duplicates
purchase_dict = {gem_name:gem_amount for (gem_name, gem_amount) in zip(reqd_gems, reqd_quantity)}

# now you can get the price from the gem_dict by simply using .get("NameOfGem")
total_normal = sum([gem_dict.get(gem_name)*gem_amount for (gem_name, gem_amount) in purchase_dict.items()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...