Проблема при решении вопроса в приложении infytq - PullRequest
0 голосов
/ 22 июня 2019

Проблема даже в том, что калькулятор должен написать ответ, но он неверен на веб-сайте.

Постановка проблемы

Магазин драгоценных камней ARS продает своим клиентам различные виды драгоценных камней.

Напишите программу на Python для расчета суммы счета, подлежащего оплате клиентом, на основе списка драгоценных камней и количества купленных.Любая покупка с общей суммой счета выше 30000 рупий имеет право на скидку 5%.Если какой-либо драгоценный камень, требуемый покупателем, недоступен в магазине, то следует считать, что общая сумма счета равна -1.

Предположим, что количество, требуемое покупателем для любого драгоценного камня, всегда будет больше 0.

Выполняйте сравнение с учетом регистра, где это применимо.

#List of gems available in the store
gems_list=['Amber', 'Aquamarine', 'Opal', 'Topaz']
#Price of gems available in the store. gems_list and price_list have one-to-one correspondence
price_list=[4392, 1342, 8734, 6421]

#List of gems required by the customer
reqd_gems=['Amber', 'Opal', 'Topaz']
#Quantity of gems required by the customer. reqd_gems and reqd_quantity have one-to-one correspondence
reqd_quantity=[2, 1, 3]
bill_amount=calculate_bill_amount(gems_list, price_list, reqd_gems, reqd_quantity)
print(bill_amount)

Я ожидаю, что на выходе получится 36781

Это решение, которое я до сих пор придумал:

def calculate_bill_amount(gems_list, price_list, reqd_gems, reqd_quantity):
    bill_amount = 0
    for i in range(0, len(reqd_gems)):
        if (reqd_gems[i] in gems_list) and reqd_quantity[i] > 0:
            for j in range(0, len(gems_list)):
                if gems_list[j] == reqd_gems[i]:
                    price = price_list[j]
                    break
            bill_amount = bill_amount + (price) * reqd_quantity[i]
            bill_amount_amt = bill_amount - (5 / 100) * bill_amount
        else:
            bill_amount = -1
            break
    return bill_amount

1 Ответ

0 голосов
/ 22 июня 2019

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

попробуйте это:

def calculate_bill_amount(gems_list, price_list, reqd_gems, reqd_quantity):
    price_dict = {gems_list[i]: price_list[i] for i in range(len(gems_list))}
    reqd_dict = {reqd_gems[i]: reqd_quantity[i] for i in range(len(reqd_gems))}

    try:
        bill = sum(price_dict[gem] * reqd_dict[gem] for gem in reqd_dict)
    except KeyError:
        return -1

    if bill > 30000:
        bill = 0.95*bill
    return bill

#List of gems available in the store
gems_list=['Amber', 'Aquamarine', 'Opal', 'Topaz']
#Price of gems available in the store. gems_list and price_list have one-to-one correspondence
price_list=[4392, 1342, 8734, 6421]

#List of gems required by the customer
reqd_gems=['Amber', 'Opal', 'Topaz']
#Quantity of gems required by the customer. reqd_gems and reqd_quantity have one-to-one correspondence
reqd_quantity=[2, 1, 3]
bill_amount=calculate_bill_amount(gems_list, price_list, reqd_gems, reqd_quantity)
print(bill_amount)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...