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

如何优化(=缩短)我的Python代码?,python,calculation,Python,Calculation,我的用例如下: 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 =

我的用例如下:

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)
我想做一个不同单位有不同价格的电费发生器。在下面的程序中,如果用户输入介于
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)
units=int(输入(“输入单位”))
如果(1=单位):
首和=单位*2.50
打印(“首和:-”,首和)
如果(151=单位):
初和=150*2.50
亚单位=单位-150
secondSum=firstSum+(子单元*3.60)
打印(二次合计)
如果(301=单位):
初和=150*2.50
子单元1=单位-150
首和+=150*3.60
亚单位=亚单位1-150
第二和=第一和+亚单位*4.75
打印(二次合计)
如果(451=单位):
初和=150*2.50
子单元1=单位-150
首和+=150*3.60
亚单位1-=150
首和+=子单元1*4.75
亚单位=亚单位1-150
第二和=第一和+子单元*5
打印(二次合计)

如果(601需要缩短它的特殊原因?无论如何,您可以从将重复的代码块重构为方法开始

firstSum = 150 * 2.50
subUnits1 = units - 150
firstSum += 150 * 3.60
subUnits = subUnits1 - 150
发生三次


所有if语句而不是elif是否都有特殊原因?并不是因为它会使代码变短。

需要缩短它的特殊原因?无论如何,您可以从将重复的代码块重构为方法开始。例如

firstSum = 150 * 2.50
subUnits1 = units - 150
firstSum += 150 * 3.60
subUnits = subUnits1 - 150
发生三次


所有if语句而不是elif是否也有特殊原因?并不是因为它会使代码变短。

您在换行中一次又一次地向变量添加值,而不是将它们绑定在一行中。您的代码可以是:

units = int(input("Enter the units: "))
if 1<=units and 150>=units:
    print("First sum:-", units * 2.50)
elif 300>=units:
    print((150 * 2.50) + ((units - 150) * 3.60))
elif 450>=units:
    print(((150 * 2.50)+150 * 3.60) + ((units - 300) * 4.75))
elif 600>= units:
    print((((150 * 2.50) + 150 * 3.60) + (units - 300) * 4.75) + ((units - 300) - 150 ) * 5)
else:
    print(((((150 * 2.50) +150 * 3.60)+(units - 300) * 4.75)+150 * 5) + (((units - 300) - 150) - 150) * 6)
units=int(输入(“输入单位:”)
如果1=单位:
打印(“首和:-”,单位*2.50)
elif 300>=单位:
印刷品(150*2.50)+(150*3.60)
elif 450>=单位:
印刷品((150*2.50)+150*3.60)+(300个单位)*4.75))
elif 600>=单位:
印刷品(((150*2.50)+150*3.60)+(单位-300)*4.75)+(单位-300)-150)*5)
其他:
打印((((150*2.50)+150*3.60)+(单位-300)*4.75)+150*5)+((单位-300-150)-150)*6

您在换行中一次又一次地向变量添加值,而不是将它们绑定在一行中。您的代码可以是:

units = int(input("Enter the units: "))
if 1<=units and 150>=units:
    print("First sum:-", units * 2.50)
elif 300>=units:
    print((150 * 2.50) + ((units - 150) * 3.60))
elif 450>=units:
    print(((150 * 2.50)+150 * 3.60) + ((units - 300) * 4.75))
elif 600>= units:
    print((((150 * 2.50) + 150 * 3.60) + (units - 300) * 4.75) + ((units - 300) - 150 ) * 5)
else:
    print(((((150 * 2.50) +150 * 3.60)+(units - 300) * 4.75)+150 * 5) + (((units - 300) - 150) - 150) * 6)
units=int(输入(“输入单位:”)
如果1=单位:
打印(“首和:-”,单位*2.50)
elif 300>=单位:
印刷品(150*2.50)+(150*3.60)
elif 450>=单位:
印刷品((150*2.50)+150*3.60)+(300个单位)*4.75))
elif 600>=单位:
印刷品(((150*2.50)+150*3.60)+(单位-300)*4.75)+(单位-300)-150)*5)
其他:
打印((((150*2.50)+150*3.60)+(单位-300)*4.75)+150*5)+((单位-300-150)-150)*6

谈到优化,要优化代码,您所能做的事情要少得多

您完全可以通过使用if elif条件语句来优化它,而不只是使用if

if(1<=units and 150>=units):
    ...

elif(151<=units and 300>=units):
    ...

:
:

else:
    ...
如果(1=单位):
...
elif(151=单位):
...
:
:
其他:
...

当您这样做时,您可以确保在达到正确的条件后不会进行条件检查。因此,可以减少已完成的比较次数并优化程序。

说到优化,您可以做的优化代码的工作非常少

您完全可以通过使用if elif条件语句来优化它,而不只是使用if

if(1<=units and 150>=units):
    ...

elif(151<=units and 300>=units):
    ...

:
:

else:
    ...
如果(1=单位):
...
elif(151=单位):
...
:
:
其他:
...

进行此操作时,您要确保在达到正确的条件后不会进行条件检查。从而减少已完成的比较次数并优化程序。

如果您不介意不可读性,这里是您的一行:

print(units * 2.5 + max(0, units - 150) * 1.1 + max(0, units - 300) * 1.15 + max(0, units - 450) * 0.25 + max(0, units - 600))

另外,您的示例代码在第23行有错误(
firstSum+=subUnits1*4.75
),它应该与另一个150相乘。

如果您不介意不可读性,这里是您的一行代码:

print(units * 2.5 + max(0, units - 150) * 1.1 + max(0, units - 300) * 1.15 + max(0, units - 450) * 0.25 + max(0, units - 600))

另外,您的示例代码在第23行有错误(
firstSum+=subUnits1*4.75
),它应该与另一个150相乘。

如果我理解您的问题,我会