Guest User

Untitled

a guest
Jan 16th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. # encoding=utf8
  2. from decimal import Decimal
  3.  
  4.  
  5. def create_ladders(CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD, CBJL_DJ):
  6. ladders = []
  7.  
  8. if CBJL_DJ.count('|'):
  9. code_array = filter(lambda x: x, CBJL_DJ.split('|'))
  10. price_array = zip(code_array[::2], code_array[1::2])
  11.  
  12. price_array = [list(i) for i in price_array]
  13. for item in price_array:
  14. item[1] = int(item[1])
  15.  
  16. assert len(price_array) > 0
  17. ok = False
  18. for i, (price, gas) in enumerate(price_array):
  19. if CBJL_BCBD > gas > CBJL_SCBD:
  20. if i == 0 or price_array[i - 1][1] < CBJL_SCBD:
  21. ladders.append([CBJL_JGLX_MS, CBJL_SCBD, gas, gas - CBJL_SCBD, price,
  22. Decimal(gas - CBJL_SCBD) * Decimal(price)])
  23. else:
  24. # 未覆盖
  25. ladders.append(
  26. [CBJL_JGLX_MS, price_array[i - 1][1], gas, gas - price_array[i - 1][1],
  27. price,
  28. Decimal(gas - price_array[i - 1][1]) * Decimal(price)])
  29. # 改行多余,测试未发现
  30. # ladders.append([CBJL_JGLX_MS, gas,CBJL_BCBD , CBJL_BCBD - gas, price,
  31. # Decimal(CBJL_BCBD - gas) * Decimal(price)])
  32. elif CBJL_BCBD <= gas:
  33. if i == 0:
  34. ladders.append(
  35. [CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD, CBJL_BCBD - CBJL_SCBD, price,
  36. Decimal(CBJL_BCBD - CBJL_SCBD) * Decimal(price)])
  37. else:
  38. # 未测试
  39. if price_array[i - 1][1] > CBJL_SCBD:
  40. ladders.append(
  41. [CBJL_JGLX_MS, price_array[i - 1][1], CBJL_BCBD,
  42. CBJL_BCBD - price_array[i - 1][1], price,
  43. Decimal(CBJL_BCBD - price_array[i - 1][1]) * Decimal(price)])
  44. else:
  45. ladders.append(
  46. [CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD,
  47. CBJL_BCBD - CBJL_SCBD, price,
  48. Decimal(CBJL_BCBD - CBJL_SCBD) * Decimal(price)])
  49. ok = True
  50. break
  51. # ok 处理
  52. if not ok:
  53. if price_array[-1][1] > CBJL_SCBD:
  54. ladders.append(
  55. [CBJL_JGLX_MS, price_array[- 1][1], CBJL_BCBD,
  56. CBJL_BCBD - price_array[- 1][1], code_array[-1],
  57. Decimal(CBJL_BCBD - price_array[- 1][1]) * Decimal(code_array[-1])])
  58. else:
  59. ladders.append(
  60. [CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD,
  61. CBJL_BCBD - CBJL_SCBD, code_array[-1],
  62. Decimal(CBJL_BCBD - CBJL_SCBD) * Decimal(code_array[-1])])
  63.  
  64. else:
  65. ladders.append([CBJL_JGLX_MS, CBJL_SCBD, CBJL_BCBD, CBJL_BCBD - CBJL_SCBD, CBJL_DJ,
  66. Decimal(CBJL_BCBD - CBJL_SCBD) * Decimal(CBJL_DJ)])
  67. return ladders
  68.  
  69.  
  70. if __name__ == '__main__':
  71. assert create_ladders('a', 100, 200, '2.5') == [['a', 100, 200, 100, '2.5', 250]]
  72.  
  73. # 2个阶梯
  74. assert create_ladders('a', 29, 59, '2.5|60|3.5') == [['a', 29, 59, 30, '2.5', 75]]
  75. assert create_ladders('a', 30, 60, '2.5|60|3.5') == [['a', 30, 60, 30, '2.5', 75]]
  76.  
  77. # ok
  78. assert create_ladders('a', 60, 70, '2.5|60|3.5') == [['a', 60, 70, 10, '3.5', 35]]
  79. # ok
  80. assert create_ladders('a', 61, 71, '2.5|60|3.5') == [['a', 61, 71, 10, '3.5', 35]]
  81. # ok
  82. assert create_ladders('a', 59, 61, '2.5|60|3.5') == [
  83. ['a', 59, 60, 1, '2.5', Decimal('2.5')],
  84. ['a', 60, 61, 1, '3.5', Decimal('3.5')],
  85. ]
  86. assert create_ladders('a', 58, 62, '2.5|60|3.5') == [
  87. ['a', 58, 60, 2, '2.5', 5],
  88. ['a', 60, 62, 2, '3.5', 7],
  89. ]
  90.  
  91. ## 3个阶梯,原样复制上面的代码,然后追加阶梯,之后仍然有一组测试不通过
  92. assert create_ladders('a', 29, 59, '2.5|60|3.5|80|4.5') == [['a', 29, 59, 30, '2.5', 75]]
  93. assert create_ladders('a', 30, 60, '2.5|60|3.5|80|4.5') == [['a', 30, 60, 30, '2.5', 75]]
  94.  
  95. # 调整后改组失败,ok
  96. assert create_ladders('a', 60, 70, '2.5|60|3.5|80|4.5') == [['a', 60, 70, 10, '3.5', 35]]
  97. # ok,这是一组临界值
  98. assert create_ladders('a', 61, 71, '2.5|60|3.5|80|4.5') == [['a', 61, 71, 10, '3.5', 35]]
  99.  
  100. assert create_ladders('a', 59, 61, '2.5|60|3.5|80|4.5') == [
  101. ['a', 59, 60, 1, '2.5', Decimal('2.5')],
  102. ['a', 60, 61, 1, '3.5', Decimal('3.5')],
  103. ]
  104. assert create_ladders('a', 58, 62, '2.5|60|3.5|80|4.5') == [
  105. ['a', 58, 60, 2, '2.5', 5],
  106. ['a', 60, 62, 2, '3.5', 7],
  107. ]
  108.  
  109. # 类似的补充,未发现问题
  110. assert create_ladders('a', 80, 90, '2.5|60|3.5|80|4.5') == [['a', 80, 90, 10, '4.5', 45]]
  111. assert create_ladders('a', 81, 91, '2.5|60|3.5|80|4.5') == [['a', 81, 91, 10, '4.5', 45]]
  112.  
  113. assert create_ladders('a', 79, 81, '2.5|60|3.5|80|4.5') == [
  114. ['a', 79, 80, 1, '3.5', Decimal('3.5')],
  115. ['a', 80, 81, 1, '4.5', Decimal('4.5')],
  116. ]
  117. assert create_ladders('a', 78, 82, '2.5|60|3.5|80|4.5') == [
  118. ['a', 78, 80, 2, '3.5', Decimal('7')],
  119. ['a', 80, 82, 2, '4.5', Decimal('9')],
  120. ]
  121.  
  122. # 跨两个阶梯,未发现问题
  123. assert create_ladders('a', 59, 81, '2.5|60|3.5|80|4.5') == [
  124. ['a', 59, 60, 1, '2.5', Decimal('2.5')],
  125. ['a', 60, 80, 20, '3.5', Decimal('70')],
  126. ['a', 80, 81, 1, '4.5', Decimal('4.5')],
  127. ]
  128. assert create_ladders('a', 58, 82, '2.5|60|3.5|80|4.5') == [
  129. ['a', 58, 60, 2, '2.5', Decimal('5')],
  130. ['a', 60, 80, 20, '3.5', Decimal('70')],
  131. ['a', 80, 82, 2, '4.5', Decimal('9')],
  132. ]
  133.  
  134. # assert create_ladders('a', 1625, 1675, '1.90|390|2.28|630|2.85') == [
  135. # ['a', 1625, 1675, 2, '2.5', Decimal('5')],
  136. # ]
  137.  
  138. # ooo
  139. assert create_ladders('a', 0, 8, '1.90|390|2.28|630|2.85') == [
  140. ['a', 0, 8, 8, '1.90', Decimal('1.90') * Decimal('8')],
  141. ]
  142.  
  143. print create_ladders('a', 1231, 1271, '1.90|390|2.28|630|2.85')
Add Comment
Please, Sign In to add comment