2013-06-19 3 views
0

Я только начиная и получать с ума по этой функции (она дает мне неправильные выходы):Не уверен, что функции питона

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

rent_car_cost (2) должен равняться 60, но он дает мне «пожалуйста, введите nr дней» – 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>= 7 и else положения никогда не вызвать, потому что ранее days >= 3 триггеры на одних и тех же входных данных. if/elif/else статьи обрабатываются, пока один из них не запускается.

Для чего нужны статьи для days < 2, days < 7 и else.

обнаружить негерметичность номера, начните с

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

Но ни одно из ваших утверждений, если это не будет соответствовать 2. 2 не менее 2 и не является больше или равно 3, а также не больше или равным 7. Следуйте рекомендациям из двух других ответов от larsmans и Ankit Jaiswal, но я предполагаю, что 2 должен соответствовать части days*x-20. Просто измените elif days >= 3: на elif days >= 2:.

+0

спасибо. должен был заметить это самостоятельно, хотя я искал ошибку в течение некоторого времени. – aaaa

+0

@aaaa: Всякий раз, когда вы некоторое время ищете ошибку, вы теряете ее. Это случается со мной все время. – refi64

Смежные вопросы