20. Снова про таможню.

(открыть в новой вкладке)

Условие:

Дан список посылок с адресами и ценами в евро в виде списка кортежей:
packages = [('2-я Бауманская улица, 5', 141.59), ('ул. Воронцовская, д. 35Б, корп.2', 130.87), ('Ленинские Горы, 1П', 113.26), ('ул. Воронцовская, д. 35Б, корп.2', 108.54), ('ул. Радио, д.24, корпус 1', 98.04), ('ул. Бауманская, д. 6, стр. 2', 60.88), ('ул. Воронцовская, д. 35Б, корп.2', 40.3), ('2-я Бауманская улица, 5', 49.99), ('ул. Бауманская, д. 6, стр. 2', 51.07), ('ул. Воронцовская, д. 35Б, корп.2', 85.74), ('2-я Бауманская улица, 5', 99.38), ('Госпитальный переулок, д. 4/6', 4.51), ('3-я ул. Ямского Поля, д. 32', 29.24), ('2-я Бауманская улица, 5', 92.99), ('Ленинские Горы, 1П', 70.77), ('Госпитальный переулок, д. 4/6', 4.0), ('Госпитальный переулок, д. 4/6', 93.53), ('2-я Бауманская улица, 5', 51.13), ('2-я Бауманская улица, 5', 12.63), ('ул. Воронцовская, д. 35Б, корп.2', 31.96), ('ул. Бауманская, д. 6, стр. 2', 70.42), ('Ленинские Горы, 1с46', 8.56), ('ул. Радио, д.24, корпус 1', 49.98), ('Госпитальный переулок, д. 4/6', 105.0), ('ул. Радио, д.24, корпус 1', 118.84), ('Ленинские Горы, 1П', 5.59), ('Госпитальный переулок, д. 4/6', 4.47), ('Ленинские Горы, 1П', 100.7), ('3-я ул. Ямского Поля, д. 32', 15.18), ('Ленинские Горы, 1П', 19.01), ('Ленинские Горы, 1П', 8.68), ('ул. Бауманская, д. 6, стр. 2', 139.56), ('Ленинские Горы, 1П', 102.21), ('ул. Воронцовская, д. 35Б, корп.2', 106.15), ('ул. Воронцовская, д. 35Б, корп.2', 130.44), ('Ленинские Горы, 1П', 146.66), ('2-я Бауманская улица, 5', 41.63), ('Госпитальный переулок, д. 4/6', 54.06), ('Ленинские Горы, 1П', 21.08), ('ул. Воронцовская, д. 35Б, корп.2', 68.34), ('Ленинские Горы, 1П', 138.69), ('ул. Бауманская, д. 6, стр. 2', 77.28), ('ул. Воронцовская, д. 35Б, корп.2', 62.62), ('3-я ул. Ямского Поля, д. 32', 73.93), ('ул. Воронцовская, д. 35Б, корп.2', 96.33), ('3-я ул. Ямского Поля, д. 32', 98.77), ('Госпитальный переулок, д. 4/6', 123.99), ('ул. Бауманская, д. 6, стр. 2', 22.68), ('Ленинские Горы, 1с46', 113.53), ('Ленинские Горы, 1П', 13.08)]
Посчитать сумму таможенной пошлины для каждого адреса, исходя из суммарной стоимости посылок.
Пошлина считается следующим образом:
• меньше 200 евро - без пошлины;
• всё свыше 200 евро облагается 15% пошлиной (на разницу стоимости товара и 200 евро).

Код:

packages = [('2-я Бауманская улица, 5', 141.59), ('ул. Воронцовская, д. 35Б, корп.2', 130.87), ('Ленинские Горы, 1П', 113.26), ('ул. Воронцовская, д. 35Б, корп.2', 108.54), ('ул. Радио, д.24, корпус 1', 98.04), ('ул. Бауманская, д. 6, стр. 2', 60.88), ('ул. Воронцовская, д. 35Б, корп.2', 40.3), ('2-я Бауманская улица, 5', 49.99), ('ул. Бауманская, д. 6, стр. 2', 51.07), ('ул. Воронцовская, д. 35Б, корп.2', 85.74), ('2-я Бауманская улица, 5', 99.38), ('Госпитальный переулок, д. 4/6', 4.51), ('3-я ул. Ямского Поля, д. 32', 29.24), ('2-я Бауманская улица, 5', 92.99), ('Ленинские Горы, 1П', 70.77), ('Госпитальный переулок, д. 4/6', 4.0), ('Госпитальный переулок, д. 4/6', 93.53), ('2-я Бауманская улица, 5', 51.13), ('2-я Бауманская улица, 5', 12.63), ('ул. Воронцовская, д. 35Б, корп.2', 31.96), ('ул. Бауманская, д. 6, стр. 2', 70.42), ('Ленинские Горы, 1с46', 8.56), ('ул. Радио, д.24, корпус 1', 49.98), ('Госпитальный переулок, д. 4/6', 105.0), ('ул. Радио, д.24, корпус 1', 118.84), ('Ленинские Горы, 1П', 5.59), ('Госпитальный переулок, д. 4/6', 4.47), ('Ленинские Горы, 1П', 100.7), ('3-я ул. Ямского Поля, д. 32', 15.18), ('Ленинские Горы, 1П', 19.01), ('Ленинские Горы, 1П', 8.68), ('ул. Бауманская, д. 6, стр. 2', 139.56), ('Ленинские Горы, 1П', 102.21), ('ул. Воронцовская, д. 35Б, корп.2', 106.15), ('ул. Воронцовская, д. 35Б, корп.2', 130.44), ('Ленинские Горы, 1П', 146.66), ('2-я Бауманская улица, 5', 41.63), ('Госпитальный переулок, д. 4/6', 54.06), ('Ленинские Горы, 1П', 21.08), ('ул. Воронцовская, д. 35Б, корп.2', 68.34), ('Ленинские Горы, 1П', 138.69), ('ул. Бауманская, д. 6, стр. 2', 77.28), ('ул. Воронцовская, д. 35Б, корп.2', 62.62), ('3-я ул. Ямского Поля, д. 32', 73.93), ('ул. Воронцовская, д. 35Б, корп.2', 96.33), ('3-я ул. Ямского Поля, д. 32', 98.77), ('Госпитальный переулок, д. 4/6', 123.99), ('ул. Бауманская, д. 6, стр. 2', 22.68), ('Ленинские Горы, 1с46', 113.53), ('Ленинские Горы, 1П', 13.08)]
TAX = 0.15
PRICE_FREE = 200

packages_result = dict()                                                                                            # составим словарь, в котором ключом является адрес, а значеним ключа кортеж из суммы покупок и пошлины на покупки
for i in packages:                                                                                                  # обойдём все элементы списка в цикле
    if i[0] not in packages_result.keys():                                                                          # если адреса нет в новом словаре, то добавляем его со значением
        packages_result[i[0]] = i[-1]
    else:                                                                                                           # если адрес есть в словаре, то значение модифицируем
        packages_result[i[0]] += i[-1]

packages_result2 = dict()                                                                                           # составим новый словарь, в который будем помещать адреса, но уже с суммой пошлины
for a, b in packages_result.items():                                                                                # будем обходить в цикле значения словаря
    if b > PRICE_FREE:                                                                                              # если сумма покупок для адреса соответствует условию пошлины, то расчитываем пошлину и кладём вместе с адресом в новый словарь
        b = (b - PRICE_FREE) * 0.15
        packages_result2[a] = ("Таможенная пошлина:", round(b, 2))
    else:                                                                                                           # если сумма покупок для адреса не попадает под пошлину, то добавляем в словарь адрес с суммой пошлины 0
        packages_result2[a] = ("Таможенная пошлина:", 0)

for i in packages_result2.items():                                                                                  # цикл для печати
    print(i)