首页 > 解决方案 > 优化逻辑计算器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("")

标签: python

解决方案


您可以根据它们的 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

对于主要部分,您不需要转换0int和转换0.0float您可以启动这些值

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

推荐阅读