无法将用户定义函数的输入传递给其他函数并将返回值相加

时间:2013-05-26 00:13:34

标签: python function sum

我是一个N00b学习Python。作为创建简单计算器的小项目的一部分,我需要一个函数来获取两个输入并确定旅行的总成本。

在这段代码的底部,我有一个名为“trip_cost()”的函数,它接受两个输入,city和days。城市是您要访问的城市的一串,天数是您入住日期的整数值。

trip_cost()将输入传递给rental_car_cost,hotel_cost和plane_ride_cost函数,并返回各自输出的总和。

我理解一个函数可以通过名称从另一个函数作为变量调用但是我很困惑我应该如何处理trip_cost()到其他函数的输入并返回三个值以在trip_cost中求和( )。

非常感谢任何建议。

谢谢,

- 马特

def hotel_cost(n):
    nights = n * 140
    return nights

hotel_cost(3)

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

plane_ride_cost("Tampa")

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

rental_car_cost(3)

def trip_cost(c,d):
    return sum (hotel_cost) + sum(rental_car_cost) + sum (plane_ride_cost)

trip_cost("Tampa",3)

3 个答案:

答案 0 :(得分:1)

我已经创建了一个“更好”的版本,你正在学习python,我在这里放了很多东西:

def plane_ride_cost(city):  # First, in this case, I used a dictionary
    return {                # to get a value of a city
        'Charlotte': 183,
        'Tampa': 220,
        'Pittsburgh': 222,
        'Los Angeles': 475
    }[city]

def hotel_cost(nights):     # You can always use expressions in
    return nights * 140     # the return statement

def rental_car_cost(days):  # If it is possible, use long variable
    cost = 40               # names, not just one letters -> readability counts
    if days >= 7:
        return days * cost - 50
    elif days >= 3:
        return days * cost - 20
    else:
        return days * cost

def trip_cost(city, days):  # You can just add the values together, that is SUM
    return hotel_cost(days) + rental_car_cost(days) + plane_ride_cost(city)

演示:

print trip_cost('Tampa', 3) # Call the 'main' function, with variables

这将返回:

# 740

答案 1 :(得分:0)

这里你真的不需要sum()因为以下内容可行并且需要很少的开销:

def trip_cost(c, d):
    return hotel_cost(d) + rental_car_cost(d) + plane_ride_cost(c)

但是,你可以使用sum()之类的东西,它会创建一个调用每个代价函数的结果的元组,然后将该对象传递给sum()总计。

def trip_cost(c, d):
    return sum((hotel_cost(d), rental_car_cost(d), plane_ride_cost(c)))

另一种选择是使用generator expression,但它需要每个函数接受相同的输入参数,即使它们没有同时使用它们。 如果 他们被重写为这样,它将允许您按照以下方式执行某些操作:

def trip_cost(c, d):
    cost_functions = (hotel_cost, rental_car_cost, plane_ride_cost)
    return sum(cf(c, d) for cf in cost_functions)

这样,对每个成本函数的调用将在sum()执行的同时发生。如果你想让函数的元组变化,那么这样的东西可能会有用,在这种情况下,你可以将它们作为附加参数传递给trip_cost()函数,而不是硬编码它们。但是,根据您当前的代码和明显的需求,第一种方式可能是最佳方式。

答案 2 :(得分:0)

消退:

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):
    day = 40
    cost = days*day
    if days >= 7:
        cost = cost - 50
    elif days >= 3:
        cost = cost - 20
    return cost

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