我想用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是重量,kronor是货币)
对于一些输入权重,这很好,但当我写7.15公斤,它应该花费178.75,我反而得到200.20000000000002。哪一个是不正确的,其次,有什么简单的方法不让它用那么多小数来显示成本呢?但是,如果我们让它显示正确的成本,我们甚至不会有这个问题。
发布于 2015-10-04 13:15:24
试着先评估你的最高体重:
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")发布于 2015-10-04 13:24:28
若要使其更具pythonic性质,请去掉多个测试,插入元组中的参数并使用生成器表达式。
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))发布于 2015-10-04 13:00:31
我认为最好使用函数来检索一个重量单位的成本:
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")https://stackoverflow.com/questions/32933667
复制相似问题