Python If语句和条件:邮局代码

Python If语句和条件:邮局代码,python,Python,我想用Python编写一个代码,询问用户一个包的重量,然后在我们有成本的情况下发送它需要多少成本 重量(千克):每千克价格 2公斤以下:30 从2公斤到6公斤:28 从6公斤到12公斤:25 12公斤及以上:23 这是我写的: vikt = float(input("Weight of package?: ")) if vikt = 0: print("Please insert a weight") elif vikt < 2: print("The cost i

我想用Python编写一个代码,询问用户一个包的重量,然后在我们有成本的情况下发送它需要多少成本


重量(千克):每千克价格

2公斤以下:30

从2公斤到6公斤:28

从6公斤到12公斤:25

12公斤及以上:23


这是我写的:

vikt = float(input("Weight of package?:  "))

if vikt = 0:
    print("Please insert a weight")
elif vikt < 2:
    print("The cost is", vikt*30, "kronor")
elif vikt >= 2:
    print("The cost is", vikt*28, "kronor")
elif vikt >= 6:
    print("The cost is", vikt*25, "kronor")
elif vikt >= 12:
    print("The cost is", vikt*23, "kronor")
vikt=float(输入(“包装重量:”)
如果vikt=0:
打印(“请插入重量”)
elif vikt<2:
打印(“成本为”,vikt*30,“克朗”)
elif vikt>=2:
打印(“成本为”,vikt*28,“克朗”)
elif vikt>=6:
打印(“成本为”,vikt*25,“克朗”)
elif vikt>=12:
打印(“成本为”,vikt*23,“克朗”)
(维克特是重量,克朗是货币)


对于某些输入重量,这很好,但当我写下例如7.15 kg,成本为178.75时,我得到的是200.20000000002。这是不正确的,第二,有没有简单的方法不让它以这么多小数显示成本?但是,如果我们让它显示正确的成本,我们甚至不会有这个问题

我认为最好使用函数检索一个重量单位的成本:

def get_price(weight):
   if weight < 2:
       return 30
   elif 2 <= weight < 6:
       return 28
   elif 6 <= weight < 12:
       return 25
   else:
       return 23


vikt = float(input("Weight of package?:  "))
if vikt = 0:
    print("Please insert a weight")
else:
    print("The cost is", vikt*get_price(vikt), "kronor")
def get_价格(重量):
如果重量<2:
返回30

elif 2尤金,谢谢你!我是这样做的:

vikt=浮动(输入(“包装重量:”)

如果vikt==0:打印(“请插入重量”)
elif vikt<2:打印(“成本为”,vikt*30,“克朗”)

elif 2首先尝试评估你的最高体重:

vikt = float(input("Weight of package?:  "))

if vikt >= 12:
    print("The cost is", vikt*23, "kronor")
elif vikt >= 6:
    print("The cost is", vikt*25, "kronor")
elif vikt >= 2:
    print("The cost is", vikt*28, "kronor")
elif vikt > 0:
    print("The cost is", vikt*30, "kronor")
else:
    print("Please insert a weight")

为了使它更具python风格,请摆脱多个测试,在元组中插入参数并使用生成器表达式

weights = (2, 6, 12)
vals = (30, 28, 25)

while True:
    vikt = float(input("Weight of package?:  "))
    if vikt > 0.0:
        break

k = next((v for w,v in zip(weights, vals) if w > vikt), 23)
print(round(k*vikt, 2))
产生所需的输出

示例:

vikt = 0.5
k = 30
k * vikt = 15.0

vikt = 7.15
k = 25
k * vikt = 178.75

vikt = 14.2
k = 23
k * vikt = 326.6
编辑: 正如@lvc所建议的,使用会更好

import bisect

weights = (2, 6, 12)
vals = (30, 28, 25, 23)

while True:
    vikt = float(input("Weight of package?:  "))
    if vikt > 0.0:
        break

k = vals[bisect.bisect(weights, vikt)]
print(round(k*vikt, 2))

与几乎所有内容一样,Python实际上有一个标准的库模块,可以很容易地为您完成这类工作。它被称为,它可以做的一件事就是查表。要使用它,请将截止值放入一个列表,并将相关乘数按相同顺序放入另一个列表,如下所示:

weights = [2, 6, 12]
unit_prices = [30, 38, 25, 23]
然后,在给定任意权重的情况下查找正确的乘数是一个函数调用:

from bisect import bisect
weight = float(input("Weight of package?: "))
total = weight * unit_prices[bisect(unit_prices, weight)]
print("The cost is", total, "kronor")

您仍然需要对无效输入进行特殊处理,但会导致计算总成本的
if
的所有分支都合并为一个分支。

您可能希望从您的最高权重开始,然后逐步降低。感谢Pynchia对其进行编辑以使其看起来更好,jchamp,您的确切意思是什么?那会有什么不同呢?(我不是生气地说)
elif vikt>=2:
赢了,其他测试被忽略了。我希望你当前的方案是2,如果你有一个12公斤重的包,它会得到一个2到6公斤重的包的价格。作为一个表查找是很好的,但是生成器表达式。。不是。请改用stdlib模块。
from bisect import bisect
weight = float(input("Weight of package?: "))
total = weight * unit_prices[bisect(unit_prices, weight)]
print("The cost is", total, "kronor")