python函数参数不匹配

时间:2018-01-30 11:25:18

标签: python function

我正在定义以下功能。

def trip_cost(days, city):
    return hotel_cost(days) + plane_ride_cost(city) + rental_car_cost(days)

然而,当它执行时,我收到以下错误:

trip_cost('Pittsburgh', 8) raised an error: cannot concatenate 'str' and 'NoneType' objects

但是,如果我执行以下代码;

def trip_cost(city,days):
    return hotel_cost(days) + plane_ride_cost(city) + rental_car_cost(days)

运行良好。

下面提供了完整的代码;

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

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

def trip_cost(days, city):
        return hotel_cost(days) + plane_ride_cost(city) + rental_car_cost(days)

3 个答案:

答案 0 :(得分:0)

这是因为函数期望第一个参数是一个整数,但是你传递一个str代替它。

处理此类案例的一种聪明方法是传递可能如下所示的对象:{'city':'Pittsburgh', 'days':10}

答案 1 :(得分:0)

守则运作良好:

打电话trip_cost(天,城市)即(8,' Pittsburgh')而不是(' Pittsburgh',8)

示例:

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

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

def trip_cost(days, city):
        return hotel_cost(days) + plane_ride_cost(city) + rental_car_cost(days)
print trip_cost(4,'Tampa')

输出:920

答案 2 :(得分:0)

我认为问题在于你在第一天将一个字符串'Pittsburg'传递给了城市8天。因此第一个函数hotel_cost返回一个字符串,第二个函数plane_ride_cost没有返回任何内容,因为它的大小写都不匹配8.因此它返回NoneType对象,不能附加到返回的字符串对象。

因此,将参数传递给函数时的最佳做法是列出参数然后传递值,如下所示。 :

trip_cost(days = 8 , city = 'Pittsburgh')