优化逻辑计算器python

优化逻辑计算器python,python,Python,我刚开始学习python,我有一个项目,为逻辑目的构建一个距离计算器。 因此,主代码要求输入一些调色板和以公里为单位的距离。 然后前150公里乘以2作为价格。 接下来的150公里(直到300公里)乘以1.8。(前150公里加起来是300美元) 最后,在300公里以上,我们乘以1.6 但我们还有另一个微妙之处,我们有一个帕莱系数,它是乘的,它随着公里数的变化而变化,就像价格系数一样 所以我让你看看我目前的代码,它有点大,但我找不到优化它的方法。 我将代码分为两个文件,“Function”和“mai

我刚开始学习python,我有一个项目,为逻辑目的构建一个距离计算器。 因此,主代码要求输入一些调色板和以公里为单位的距离。 然后前150公里乘以2作为价格。 接下来的150公里(直到300公里)乘以1.8。(前150公里加起来是300美元) 最后,在300公里以上,我们乘以1.6

但我们还有另一个微妙之处,我们有一个帕莱系数,它是乘的,它随着公里数的变化而变化,就像价格系数一样

所以我让你看看我目前的代码,它有点大,但我找不到优化它的方法。 我将代码分为两个文件,“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

`
`
def计算器150(pal,距离):
如果距离>150:
prix=300
其他:
prix=浮动(距离*2)

如果pal您可以根据palets阈值的prix相乘值存储在
dict
中,然后查找该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
输出:

How many palets ? 28
Distance ? 300
270.0
486.0
price is 486.0 dollars

伙计,太棒了!我试图理解你用dict做了什么我不明白,这是一个很好的方法,因为你用了很多我还没有掌握的东西。我会学习你的方法,试着去理解,非常感谢!为了帮助您理解,这里有一个简单的解释<代码>乘法器
是一个dict,其中键(调色板)对应于乘法器。首先,我们找到所有调色板数量高于用户提供的调色板数量的乘数,然后选择最小的一个(
multiplier[0]
)。如果调色板的数量高于我们的任何键(
multiplier
为空列表),我们会手动选择multiplier为1(
multiplier=[1]
)。
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