2014-12-25 5 views
0

Посмотрите на сообщение об ошибке, все, что я не могу найти ошибку, мы вставляем значение в функцию trip_cost ('Los Angeles', 4), а город будет строкой и дни будут int типа, то что любое знание, котор я должен знать?ошибка: объект 'int' не повторяется в Python

код:

def hotel_cost(nights): 
    return 140*nights 

def plane_ride_cost(city):  
    if city == "Charlotte": 
     return 183 
    elif city == "Tampa": 
     return 220 
    elif city == "Pittsburgh": 
     return 222 
    elif city == "Los Angeles": 
     return 475 
    else : 
     return 123 

def rental_car_cost(days): 
    total = days *40 
    if days >=7: 
     total=total-50 
     return total 
    elif days >= 3 : 

     total=total-20 
     return total 
    else : 
     return total 
def prev_add(a,b): 
    return sum(a,b) 
def trip_cost(city,days): 
    nights = days 
    hotel_cost_price = hotel_cost(nights) 
    rental_car_price=rental_car_cost(days) 
    prev_price = prev_add(rental_car_price,hotel_cost_price) 
    plane_ride_price = plane_ride_cost(city) 
    return sum(prev_price,plane_ride_price) 

======================== код

ошибка:

trip_cost('Los Angeles', 4) raised an error: 'int' object is not iterable 

===================

+0

Из любопытства, что вы пишете/погонный это? Я помню, как один из моих учеников дал мне такую ​​ошибку, как ваша, и я был очень смущен, потому что не было следа, показывающего, где ошибка была на всех уровнях (а не только самый верхний, например, вызов 'trip_cost'). Я действительно ненавижу «дружественные» интерфейсы, которые скрывают важную деталь. –

ответ

4

sum() вычисляет сумму итерации, такую ​​как список. Тем не менее, вы пытаетесь использовать его, чтобы добавить два числа:

def prev_add(a,b): 
    return sum(a,b) 

Если вы хотите просто добавить a и b, используйте +:

def prev_add(a,b): 
    return a + b 

В этом случае я бы избавиться от функции в целом и просто использовать дополнение.

То же самое для использования в sum()

return sum(prev_price,plane_ride_price) 
+0

Вы бы также предложили 'def prev_add (* nunbers): return sum (numbers)', –

+0

@GrijeshChauhan: Интересное предложение, спасибо. Тем не менее, я считаю, что он слишком продвинут для этого вопроса (и в этом случае на самом деле ничего не добавляет к простому использованию '+'). – NPE

+0

Вы верны, несколько дней назад я начал читать кулинарную книгу (предварительный курс), где я нашел [это предложение оттуда] (https://books.google.co.in/books?id=S_SJ2LaZH8EC&pg=PT324&lpg=PT324&dq=def + ср% 28first + * остальные% 29: & источник = бл & отс = Dyd1AodTmT & сиг = 4pZyUTryQ53GpPB8fKhYTjDd-QS & гл = еп & са = Х & е = oNCbVPHYOIixuASYiYLICQ & вед = 0CCgQ6AEwAg # v = OnePage & д = защиту% 20avg (первый% 2C% 20 * остальное)% 3A & F = ложь) –

2

Просто проверьте документацию сумма помощи. сумма (3,2) потерпит неудачу, но сумма ((3,2)) будет работать. Так как сумма (3,2) рассматривается как функция суммы, называемая двумя переданными параметрами, тогда как сумма ((3,2)) рассматривается как один параметр, переданный функции суммы.

>>> help(sum) 
Help on built-in function sum in module __builtin__: 

sum(...) 
    sum(sequence[, start]) -> value 

    Return the sum of a sequence of numbers (NOT strings) plus the value 
    of parameter 'start' (which defaults to 0). When the sequence is 
    empty, return start. 

>>> 
0

Проще, вам не нужна дополнительная функция prev_add.

Решение, чтобы установить city переменную (которую вы передаете trip_cost) в результате plane_ride_cost(city) внутри trip_cost

def trip_cost(city, days): 
    city = plane_ride_cost(city) 
    return city + rental_car_cost(days) + hotel_cost(days) 
Смежные вопросы