Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # encoding=utf8
- from decimal import Decimal
- def create_ladders(CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD, CBJL_DJ):
- ladders = []
- if CBJL_DJ.count('|'):
- code_array = filter(lambda x: x, CBJL_DJ.split('|'))
- price_array = zip(code_array[::2], code_array[1::2])
- price_array = [list(i) for i in price_array]
- for item in price_array:
- item[1] = int(item[1])
- assert len(price_array) > 0
- ok = False
- for i, (price, gas) in enumerate(price_array):
- if CBJL_BCBD > gas > CBJL_SCBD:
- if i == 0 or price_array[i - 1][1] < CBJL_SCBD:
- ladders.append([CBJL_JGLX_MS, CBJL_SCBD, gas, gas - CBJL_SCBD, price,
- Decimal(gas - CBJL_SCBD) * Decimal(price)])
- else:
- # 未覆盖
- ladders.append(
- [CBJL_JGLX_MS, price_array[i - 1][1], gas, gas - price_array[i - 1][1],
- price,
- Decimal(gas - price_array[i - 1][1]) * Decimal(price)])
- # 改行多余,测试未发现
- # ladders.append([CBJL_JGLX_MS, gas,CBJL_BCBD , CBJL_BCBD - gas, price,
- # Decimal(CBJL_BCBD - gas) * Decimal(price)])
- elif CBJL_BCBD <= gas:
- if i == 0:
- ladders.append(
- [CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD, CBJL_BCBD - CBJL_SCBD, price,
- Decimal(CBJL_BCBD - CBJL_SCBD) * Decimal(price)])
- else:
- # 未测试
- if price_array[i - 1][1] > CBJL_SCBD:
- ladders.append(
- [CBJL_JGLX_MS, price_array[i - 1][1], CBJL_BCBD,
- CBJL_BCBD - price_array[i - 1][1], price,
- Decimal(CBJL_BCBD - price_array[i - 1][1]) * Decimal(price)])
- else:
- ladders.append(
- [CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD,
- CBJL_BCBD - CBJL_SCBD, price,
- Decimal(CBJL_BCBD - CBJL_SCBD) * Decimal(price)])
- ok = True
- break
- # ok 处理
- if not ok:
- if price_array[-1][1] > CBJL_SCBD:
- ladders.append(
- [CBJL_JGLX_MS, price_array[- 1][1], CBJL_BCBD,
- CBJL_BCBD - price_array[- 1][1], code_array[-1],
- Decimal(CBJL_BCBD - price_array[- 1][1]) * Decimal(code_array[-1])])
- else:
- ladders.append(
- [CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD,
- CBJL_BCBD - CBJL_SCBD, code_array[-1],
- Decimal(CBJL_BCBD - CBJL_SCBD) * Decimal(code_array[-1])])
- else:
- ladders.append([CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD, CBJL_BCBD - CBJL_SCBD, CBJL_DJ,
- Decimal(CBJL_BCBD - CBJL_SCBD) * Decimal(CBJL_DJ)])
- return ladders
- if __name__ == '__main__':
- assert create_ladders('a', 100, 200, '2.5') == [['a', 100, 200, 100, '2.5', 250]]
- # 2个阶梯
- assert create_ladders('a', 29, 59, '2.5|60|3.5') == [['a', 29, 59, 30, '2.5', 75]]
- assert create_ladders('a', 30, 60, '2.5|60|3.5') == [['a', 30, 60, 30, '2.5', 75]]
- # ok
- assert create_ladders('a', 60, 70, '2.5|60|3.5') == [['a', 60, 70, 10, '3.5', 35]]
- # ok
- assert create_ladders('a', 61, 71, '2.5|60|3.5') == [['a', 61, 71, 10, '3.5', 35]]
- # ok
- assert create_ladders('a', 59, 61, '2.5|60|3.5') == [
- ['a', 59, 60, 1, '2.5', Decimal('2.5')],
- ['a', 60, 61, 1, '3.5', Decimal('3.5')],
- ]
- assert create_ladders('a', 58, 62, '2.5|60|3.5') == [
- ['a', 58, 60, 2, '2.5', 5],
- ['a', 60, 62, 2, '3.5', 7],
- ]
- ## 3个阶梯,原样复制上面的代码,然后追加阶梯,之后仍然有一组测试不通过
- assert create_ladders('a', 29, 59, '2.5|60|3.5|80|4.5') == [['a', 29, 59, 30, '2.5', 75]]
- assert create_ladders('a', 30, 60, '2.5|60|3.5|80|4.5') == [['a', 30, 60, 30, '2.5', 75]]
- # 调整后改组失败,ok
- assert create_ladders('a', 60, 70, '2.5|60|3.5|80|4.5') == [['a', 60, 70, 10, '3.5', 35]]
- # ok,这是一组临界值
- assert create_ladders('a', 61, 71, '2.5|60|3.5|80|4.5') == [['a', 61, 71, 10, '3.5', 35]]
- assert create_ladders('a', 59, 61, '2.5|60|3.5|80|4.5') == [
- ['a', 59, 60, 1, '2.5', Decimal('2.5')],
- ['a', 60, 61, 1, '3.5', Decimal('3.5')],
- ]
- assert create_ladders('a', 58, 62, '2.5|60|3.5|80|4.5') == [
- ['a', 58, 60, 2, '2.5', 5],
- ['a', 60, 62, 2, '3.5', 7],
- ]
- # 类似的补充,未发现问题
- assert create_ladders('a', 80, 90, '2.5|60|3.5|80|4.5') == [['a', 80, 90, 10, '4.5', 45]]
- assert create_ladders('a', 81, 91, '2.5|60|3.5|80|4.5') == [['a', 81, 91, 10, '4.5', 45]]
- assert create_ladders('a', 79, 81, '2.5|60|3.5|80|4.5') == [
- ['a', 79, 80, 1, '3.5', Decimal('3.5')],
- ['a', 80, 81, 1, '4.5', Decimal('4.5')],
- ]
- assert create_ladders('a', 78, 82, '2.5|60|3.5|80|4.5') == [
- ['a', 78, 80, 2, '3.5', Decimal('7')],
- ['a', 80, 82, 2, '4.5', Decimal('9')],
- ]
- # 跨两个阶梯,未发现问题
- assert create_ladders('a', 59, 81, '2.5|60|3.5|80|4.5') == [
- ['a', 59, 60, 1, '2.5', Decimal('2.5')],
- ['a', 60, 80, 20, '3.5', Decimal('70')],
- ['a', 80, 81, 1, '4.5', Decimal('4.5')],
- ]
- assert create_ladders('a', 58, 82, '2.5|60|3.5|80|4.5') == [
- ['a', 58, 60, 2, '2.5', Decimal('5')],
- ['a', 60, 80, 20, '3.5', Decimal('70')],
- ['a', 80, 82, 2, '4.5', Decimal('9')],
- ]
- # assert create_ladders('a', 1625, 1675, '1.90|390|2.28|630|2.85') == [
- # ['a', 1625, 1675, 2, '2.5', Decimal('5')],
- # ]
- # ooo
- assert create_ladders('a', 0, 8, '1.90|390|2.28|630|2.85') == [
- ['a', 0, 8, 8, '1.90', Decimal('1.90') * Decimal('8')],
- ]
- print create_ladders('a', 1231, 1271, '1.90|390|2.28|630|2.85')
Add Comment
Please, Sign In to add comment