Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from dataclasses import dataclass
- CONSTANT_TERM_RANGE_MIN: int = 1
- CONSTANT_TERM_RANGE_MAX: int = 9999999999
- CONSTANT_KEY: str = f'{CONSTANT_TERM_RANGE_MIN}_{CONSTANT_TERM_RANGE_MAX}'
- @dataclass
- class PriceType:
- term_range_min: int
- term_range_max: int
- price: int
- @property
- def days_in_range(self) -> int:
- return self.term_range_max - self.term_range_min + 1
- def calculate_sum(self, days_count: int):
- range_len: int = self.days_in_range if days_count >= self.days_in_range else days_count
- result: int = range_len * self.price
- return result
- def __str__(self):
- return f'{self.term_range_min}_{self.term_range_max}'
- def get_item_sum(days_count: int, price_types: list[PriceType]) -> int:
- """
- Функция реализует для бизнеса просчет стоимости аренды инструмента в зависимости от количества дней (days_count)
- и промежутков оплаты аренды (price_types)
- (
- К примеру клиент арендует инструмент на 9 дней
- В первом промежутке за 1 и 3-й день клиент заплатит 600 грн (по 200 грн в день)
- Во втором за 4 - 7-й день 190 грн день клиент заплатит 760 грн (по 190 грн в день)
- В третьем 8-й и 9-й - 300 грн (по 150 грн в день)
- В сумме клиент заплатит 600 + 760 + 300 = 1660
- Но, если промежуток аренды равен от 1 до максимального кол ва дней (константа с 1С) то просто перемножаем кол во дней
- и сумму.
- )
- :param days_count:
- :param price_types:
- :return int:
- """
- if len(price_types) == 1 and str(price_types[0]) == CONSTANT_KEY:
- return days_count * price_types[0].price
- price_sum: int = 0
- i: int = 0
- new_days_count: int = days_count
- new_price_types: list[PriceType] = sorted(price_types, key=lambda x: x.term_range_max)
- while new_days_count > 0:
- price_sum += new_price_types[i].calculate_sum(new_days_count)
- new_days_count -= new_price_types[i].days_in_range
- i += 1
- return price_sum
- arr: list[PriceType] = [
- PriceType(term_range_min=1, term_range_max=3, price=200),
- PriceType(term_range_min=4, term_range_max=7, price=190),
- PriceType(term_range_min=8, term_range_max=CONSTANT_TERM_RANGE_MAX, price=150),
- ]
- days_in_rent: int = 9
- print(get_price_sum(days_in_rent, arr))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement