0

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

在这段代码的底部,我有一个名为“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)
4

3 回答 3

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
于 2013-05-26T00:25:14.223 回答
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)))

另一种选择是使用生成器表达式,但它要求每个函数都接受相同的输入参数,即使它们没有同时使用它们。如果它们被重写为这种方式,它将允许您按照以下方式做一些事情:

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()作为附加参数传递给函数,而不是对它们进行硬编码。但是,根据您当前的代码和明显的需求,第一种方法可能是最好的方法。

于 2013-05-26T00:28:57.283 回答
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)
于 2016-12-15T10:33:15.883 回答