python - 优化逻辑计算器python
问题描述
我刚开始学习 python,我有一个项目来构建一个用于物流目的的距离计算器。所以主代码要求输入托盘的数量和以公里为单位的距离。然后前 150 公里的价格乘以 2。接下来的 150 公里(直到 300 公里)乘以 1.8。(前 150 公里相加,因此 300 美元)最后,在 300 公里以上,我们乘以 1.6。
但是我们还有另一个微妙之处,我们有一个乘数的托盘系数,它像价格系数一样随着公里的变化而变化。
所以我让你看看我当前的代码有点大,但我找不到优化它的方法。我将代码分成了 2 个文件,“Function”和“main”。
就这个 :
功能 :
`
def calcul150(pal, distance):
if distance > 150:
prix = 300
else:
prix = float(distance * 2)
if pal <= 4:
prix = prix * 0.4
elif pal <= 8:
prix = prix * 0.5
elif pal <= 12:
prix = prix * 0.6
elif pal <= 16:
prix = prix * 0.7
elif pal <= 20:
prix = prix * 0.8
elif pal <= 24:
prix = prix * 0.85
elif pal <= 28:
prix = prix * 0.9
print(prix)
return prix
def calcul300(pal, distance):
prix = calcul150(pal, distance)
if distance > 300:
distance = 300
if pal <= 4:
prix = prix + (distance-150) * 1.8 * 0.3
elif pal <= 8:
prix = prix + (distance-150) * 1.8 * 0.4
elif pal <= 12:
prix = prix + (distance-150) * 1.8 * 0.5
elif pal <= 16:
prix = prix + (distance-150) * 1.8 * 0.6
elif pal <= 20:
prix = prix + (distance-150) * 1.8 * 0.7
elif pal <= 24:
prix = prix + (distance-150) * 1.8 * 0.75
elif pal <= 28:
prix = prix + (distance-150) * 1.8 * 0.8
else:
prix = prix + (distance-150) * 1.8
print(prix)
return prix
def calculLD(pal, distance):
prix = calcul300(pal, distance)
if pal <= 4:
prix = prix + (distance-300) * 1.6 * 0.2
elif pal <= 8:
prix = prix + (distance-300) * 1.6 * 0.3
elif pal <= 12:
prix = prix + (distance-300) * 1.6 * 0.4
elif pal <= 16:
prix = prix + (distance-300) * 1.6 * 0.5
elif pal <= 20:
prix = prix + (distance-300) * 1.6 * 0.6
elif pal <= 24:
prix = prix + (distance-300) * 1.6 * 0.65
elif pal <= 28:
prix = prix + (distance-300) * 1.6 * 0.7
else:
prix = prix + (distance-300) * 1.6
print(prix)
return prix
`
和主要的:
from function import *
pal = int(input("How many palets ? "))
distance = float(input("Distance ? "))
prix = float(0.0)
i = int(0)
if distance <= 150:
prix = calcul150(pal, distance)
elif distance <= 300:
prix = calcul300(pal, distance)
else:
prix = calculLD(pal, distance)
print("price is {} dollars" .format(prix))
input("")
解决方案
您可以根据它们的 prix 乘法值存储您的调色板阈值dict
,然后查找该字典的最小键,pal
然后使用它的值来乘法 prix。
def calcul150(pal, distance):
if distance > 150:
prix = 300
else:
prix = float(distance * 2)
multipliers = {4: 0.4, 8: 0.5, 12: 0.6, 16: 0.7, 20: 0.85, 24: 0.85, 28: 0.9}
multiplier = [multipliers[i] for i in sorted(multipliers) if pal <= i]
if not multiplier:
multiplier = [1]
prix *= multiplier[0]
print(prix)
return prix
def calcul300(pal, distance):
prix = calcul150(pal, distance)
if distance > 300:
distance = 300
multipliers = {4: 0.3, 8: 0.4, 12: 0.5, 16: 0.6, 20: 0.7, 24: 0.75, 28: 0.8}
multiplier = [multipliers[i] for i in sorted(multipliers) if pal <= i]
if not multiplier:
multiplier = [1]
prix = prix + (distance-150) * 1.8 * multiplier[0]
print(prix)
return prix
def calculLD(pal, distance):
prix = calcul300(pal, distance)
multipliers = {4: 0.2, 8: 0.3, 12: 0.4, 16: 0.5, 20: 0.6, 24: 0.65, 28: 0.7}
multiplier = [multipliers[i] for i in sorted(multipliers) if pal <= i]
if not multiplier:
multiplier = [1]
prix = prix + (distance-300) * 1.6 * multiplier[0]
print(prix)
return prix
对于主要部分,您不需要转换0
为int
和转换0.0
为float
您可以启动这些值
pal = int(input("How many palets ? "))
distance = float(input("Distance ? "))
prix = 0.0
i = 0
if distance <= 150:
prix = calcul150(pal, distance)
elif distance <= 300:
prix = calcul300(pal, distance)
else:
prix = calculLD(pal, distance)
print("price is {} dollars" .format(prix))
input("")
输出:
How many palets ? 28
Distance ? 300
270.0
486.0
price is 486.0 dollars
推荐阅读
- sql - postgressql中的datediff函数
- excel - 如何在字符串 VBA 中分配范围?
- python - 为红绿灯添加发光效果 Imageprocessing skimage
- webrtc - 您能否提供一个 DispatcherOneToMany 的示例?
- java - 如何通过 JNDI 名称连接数据库?
- python - Return the index of selected test set Python
- asp.net-core-mvc - How to understand .netcore add scoped
- python - 数据采集和绘图在单独的线程中
- javascript - 如何将数组中的特定元素合并在一起?
- php - Laravel Nova 未按记录显示 userTimezone