Skip to main content
 首页 » 编程设计

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

2025年05月04日10TianFang

我的用例如下:

我想制作一个电费生成器,不同的单位有不同的价格。在下面的程序中,如果用户输入 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)]。

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