Python If语句和条件:邮局代码
我想用Python编写一个代码,询问用户一个包的重量,然后在我们有成本的情况下发送它需要多少成本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
重量(千克):每千克价格 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")