gpt4 book ai didi

python - 如何优化(= 缩短)我的 Python 代码?

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:47 25 4
gpt4 key购买 nike

我的用例如下:

我想制作一个电费生成器,不同的单位有不同的价格。在下面的程序中,如果用户输入 1-150 之间的单位,那么为了计算价格值,它将与 2.50 相乘并计算价格。如果用户单位在 151-300 之间,那么它会将前 150 单位乘以 2.50,剩下的单位将乘以 >3.60 表示如果用户输入 155 那么对于前 150 个 150 * 2.50 和左边的单元 5 它将执行乘法 5 * 3.60。就像上面我说的,我正在做下面给出的四种变体:-

  • 如果单位介于 1-150 之间,则它将乘以 2.50 并计算价格。

  • 如果单位介于 151-300 之间,则它将前 150 个单位乘以价格 2.50,剩下低于 300 的单位将乘以 3.60 并计算价格。

  • 如果单位介于 301-450 之间,则它将前 150 个单位乘以价格 2.50,其他 150 个单位乘以 3.60,剩下的单位乘以 4.75 并计算价格。

  • 如果单位介于 451-600 之间,则它将前 150 个单位乘以价格 2.50,其他 150 个单位乘以 3.60,其他 150 个单位乘以 4.75,剩下的单位乘以 5并计算价格。

  • 如果单位高于 600,则它将前 150 个单位乘以价格 2.50,其他 150 个单位乘以 3.60,其他 150 个单位乘以 4.75,接下来的 150 个单位乘以 5 和剩下的单位乘以 6 计算价格。

这是我寻求优化的代码,即缩短:

units = int(input("Enter the units"))
if(1<=units and 150>=units):
firstSum = units * 2.50
print("First sum:-", firstSum)
if(151<=units and 300>=units):
firstSum = 150 * 2.50
subUnits = units - 150
secondSum = firstSum + (subUnits * 3.60)
print(secondSum)
if(301<=units and 450>=units):
firstSum = 150 * 2.50
subUnits1 = units - 150
firstSum += 150 * 3.60
subUnits = subUnits1 - 150
secondSum = firstSum + subUnits * 4.75
print(secondSum)
if(451<=units and 600>= units):
firstSum = 150 * 2.50
subUnits1 = units - 150
firstSum += 150 * 3.60
subUnits1 -= 150
firstSum += subUnits1 * 4.75
subUnits = subUnits1 - 150
secondSum = firstSum + subUnits * 5
print(secondSum)
if(601<=units):
firstSum = 150 * 2.50
subUnits1 = units - 150
firstSum += 150 * 3.60
subUnits1 -= 150
firstSum += subUnits1 * 4.75
subUnits2 = subUnits1 - 150
firstSum += 150 * 5
subUnits = subUnits2 - 150
secondSum = firstSum + subUnits * 6
print(secondSum)

任何人都可以帮助我以简短的方式制作我的程序。

感谢您宝贵的时间

最佳答案

如果我很清楚你的问题,我认为你的代码在最后两种情况下没有做正确的事情。它看起来像是对之前案例的错误复制/粘贴;)

我认为对于最后两种情况你应该:

if(451<=units and 600>= units):
firstSum = 150 * 2.50
subUnits1 = units - 150
firstSum += 150 * 3.60
subUnits1 -= 150
firstSum += 150 * 4.75
subUnits = subUnits1 - 150
secondSum = firstSum + subUnits * 5
print(secondSum)
if(601<=units):
firstSum = 150 * 2.50
subUnits1 = units - 150
firstSum += 150 * 3.60
subUnits1 -= 150
firstSum += 150 * 4.75
subUnits2 = subUnits1 - 150
firstSum += 150 * 5
subUnits = subUnits2 - 150
secondSum = firstSum + subUnits * 6
print(secondSum)

要回答你的问题,如果我理解得很好,你可以这样做:

units = int(input("Enter the units : "))
factor_list = [2.5, 3.6, 4.75, 5]
last_factor = 6
upper_bound = 600
step = 150
SUM = 0


if (units > upper_bound):
SUM += (units-upper_bound)*last_factor
units = upper_bound

nb150 = units/step

for i in range(0,int(nb150)):
SUM += step*factor_list[i]

if(int(nb150) < len(factor_list)):
SUM += (units-int(nb150)*step)*factor_list[int(nb150)]

print(SUM)

此解决方案通过计算 units 的欧氏除法,简单地避免了多个 if 语句。这样您就可以轻松更改系数或添加其他系数,而无需编写其他案例。

第一个 if 语句处理所有大于上限的单位。它基本上是将所有超过 600 的单元乘以 6,然后将它们从要处理的单元中移除。

通过行 nb150 = units/step 并取整数部分,我获得了 150 个单位的组数。然后我可以在 for 循环中将它们乘以它们相应的系数。

最后,如果单元数低于 600 但不是 150 的倍数,则代码需要处理其余部分。因此它删除了 150 的组:(units-int(nb150)*step),然后将其余部分乘以相应的因子 factor_list[int(nb150)]

如果您需要进一步的解释,请随时询问!

关于python - 如何优化(= 缩短)我的 Python 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51889218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com