我想在Python中编写一个代码,询问用户包的重量,然后考虑到我们有成本,发送它的成本是多少。
体重(kg):每公斤价格
最多2公斤:30
从2 kg到6 kg:28
从6 kg到12 kg: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是权重,克朗是货币)
对于某些输入权重,这工作正常,但是当我写7.15千克应该花费178.75我而不是200.20000000000002。哪个是不正确的,第二个是否有任何简单的方法可以不显示那么多小数的成本?但也许如果我们让它显示正确的成本,我们甚至不会有这个问题。
感谢我的帮助!
答案 0 :(得分:0)
我认为使用函数检索一个重量单位的成本会更好:
<a class="item item-thumbnail-left" href="#" ng-repeat="(key, value) in searchedInfos()">
<h2>{{ value.name }}</h2>
</a>
答案 1 :(得分:0)
vikt = float(输入(&#34;包装重量?:&#34;)
if vikt == 0: print("Please insert a weight")
elif vikt < 2: print("The cost is", vikt*30, "kronor")
elif 2 <= vikt <6: print("The cost is", vikt*28, "kronor")
elif 6 <= vikt < 12: print("The cost is", vikt*25, "kronor")
elif vikt >= 12: print("The cost is", vikt*23, "kronor")
它似乎正在运作
答案 2 :(得分:0)
首先尝试评估您的最高体重:
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")
答案 3 :(得分:0)
为了使它更加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所建议的,使用bisect会更好
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))
答案 4 :(得分:0)
与相当多的东西一样,Python实际上有一个标准的库模块,可以很容易地为你做这种事情。它被称为bisect
,它可以做的一件事就是查表。要使用它,您可以将截止值放入列表中,并将相关的乘数放入另一个列表中,顺序如下:
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
的所有分支都合并为一个。