首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >If声明和条件:邮局代码

If声明和条件:邮局代码
EN

Stack Overflow用户
提问于 2015-10-04 12:50:19
回答 5查看 76关注 0票数 0

我想用Python编写一段代码,它向用户询问包的重量,然后在我们有成本的情况下发送它的费用。

公斤重量:每公斤价格

最多2公斤: 30

从2公斤到6公斤: 28

从6公斤到12公斤: 25

12公斤及以上: 23公斤

这就是我所写的:

代码语言:javascript
复制
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。哪一个是不正确的,其次,有什么简单的方法不让它用那么多小数来显示成本呢?但是,如果我们让它显示正确的成本,我们甚至不会有这个问题。

EN

回答 5

Stack Overflow用户

发布于 2015-10-04 13:15:24

试着先评估你的最高体重:

代码语言:javascript
复制
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")
票数 1
EN

Stack Overflow用户

发布于 2015-10-04 13:24:28

若要使其更具pythonic性质,请去掉多个测试,插入元组中的参数并使用生成器表达式。

代码语言:javascript
复制
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))

产生所需的输出。

示例:

代码语言:javascript
复制
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所建议,使用等分会更好

代码语言:javascript
复制
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))
票数 1
EN

Stack Overflow用户

发布于 2015-10-04 13:00:31

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

代码语言:javascript
复制
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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32933667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档