如果陈述和条件:邮局代码

时间:2015-10-04 12:50:20

标签: python

我想在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。哪个是不正确的,第二个是否有任何简单的方法可以不显示那么多小数的成本?但也许如果我们让它显示正确的成本,我们甚至不会有这个问题。

感谢我的帮助!

5 个答案:

答案 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的所有分支都合并为一个。