2013-06-19 44 views
0

我才刚刚开始,并在此功能惹毛了(它给我的错误输出):不知道关于Python功能

def rental_car_cost(days): 
    x = 40 
    if days < 2: 
     return days*x 
    elif days >= 3: 
     return days*x-20 
    elif days>= 7: 
     return days*x-50 
    else: 
     print "Please enter nr of days" 

而且,我如何确保一个数字输入的“天” ?

+0

给我们一个实际与预期产出的例子,并解释函数应该如何表现。另外,请问每个问题一个问题。 –

+0

rental_car_cost(2)应该等于60,但它给了我“请输入天数” – aaaa

+3

@aaa嗯,2不小于2,也不大于或等于3或7,所以它只是做你问了什么...... – twalberg

回答

5

不知道你是什么期待,但是改变的elif条件的顺序:

def rental_car_cost(days): 
    if isinstance(days, int): 
     x = 40 
     if days < 2: 
      return days*x 
     elif days >= 7: 
      return days*x-50 
     elif days>= 3: 
      return days*x-20 
    else: 
     print "Please enter nr of days" 
+0

谢谢你的答案。但为什么我必须这样做呢? – aaaa

+1

考虑日= 15,其大于7,但会在您的情况下陷入以前elif天> = 3:块。 –

+2

这是因为任何大于7的数字也大于3,所以它满足条件x> = 3。你想要x> = 3和x <7 – xgord

3

days>= 7else条款从来没有触发,因为早期days >= 3上相同的输入触发。按顺序处理if/elif/else子句,直到其中的一个被触发。

您需要的是days < 2,days < 7else的条款。

检测非数字,开始

if not isinstance(days, int): 

这确实为整数类型检查。

+0

这是python 2.7,所以最好是'isinstance(days ,(int,long))'。虽然在这种情况下,我认为不应该这样。 – arshajii

+0

@arshajii:购买汽车通常比租用它超过2 ** 31-1天更好的主意:) –

+0

我在为完整着想,但touché:) – arshajii

1

rental_car_cost(2)应该等于60

但是,没有你的if语句将匹配2.2不小于2,也不是大于或等于3,也不是大于或者等于7.遵循larsmans和Ankit Jaiswal的其他两个答案的建议,但我假设2应该匹配days*x-20部分。只需将elif days >= 3:更改为elif days >= 2:即可。

+0

谢谢。应该已经发现,虽然我一直在寻找这个错误。 – aaaa

+0

@aaaa:每当你寻找一段时间的错误,你最终会错过它。它总是发生在我身上。 – refi64