我正在使用codecademy进行Python并且在计划假期任务(7/7)时遇到了麻烦。
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 and days <7:
cost -= 20
return cost
def trip_cost(city,days,spending_money):
return rental_car_cost(days)+hotel_cost(days - 1)+plane_ride_cost(city)+spending_money
city = raw_input('city?')
days = raw_input('days?')
spending_money = raw_input('money?')
print trip_cost(city,days,spending_money)
当我运行脚本并在提示符下输入时,它无法显示以下错误:
Traceback (most recent call last):
File "python", line 28, in <module>
File "python", line 23, in trip_cost
File "python", line 17, in rental_car_cost
TypeError: unsupported operand type(s) for -=: 'unicode' and 'int'
答案 0 :(得分:0)
raw_input
返回一个字符串,你不能用字符串做数学运算。您需要将适当的值转换为数字,例如:
days = int(raw_input('days?'))
spending_money = float(raw_input('money?'))
答案 1 :(得分:0)
这里有一些问题,但首先,如果您的作业允许,我会使用一个类而不是多个函数。我只想创建一个大对象。原因是你有这么多参数,将参数传递给类,然后允许函数操作它们而不是将参数传递给多个函数更有意义。一切都很相似,因为它都与旅行有关,所以我会把它存放在一个班级里。我使用的是Python 3.6,所以这与您使用的Python 2版略有不同,但正如您所看到的,我仍然需要将用户输入转换为整数值。在您的代码中,您不是将用户输入转换为整数值,而是尝试对数据执行数学运算。那也应该给你一个追溯。您必须在raw_input之前实际定义数据类型。输入函数在Python 2中不会像在Python 3.6中那样工作。但是,如果你曾用Java编写代码,那么它就像声明一个变量一样。此外,在这里获取用户输入时,我会更改城市以评估.lower()方法的值。信任用户资本化是有风险的。我在这里做了一些其他的改变,并希望它有所帮助。
class BigTrip():
def __init__(self, nights, days, city, spending_money):
self.nights = nights
self.days = days
self.city = city
self.spending_money = spending_money
def hotel_cost(self):
self.hotel_cost = 140 * self.nights
return "Your hotel cost will be " + str(self.hotel_cost) + " dollars."
def plane_ride_cost(self):
if city.lower() == 'charlotte':
self.plane_cost = 183
elif city.lower() == 'tampa':
self.plane_cost = 220
elif city.lower() == 'pittsburgh':
self.plane_cost = 222
elif city.lower() == 'los angeles':
self.plane_cost = 475
return "Your plane cost will be " + str(self.plane_cost) + " dollars."
def rental_car_cost(self):
self.rental_cost = self.days * 40
if int(self.days) >= 7:
self.rental_cost -= 50
elif int(self.days) >= 3 and int(self.days) <7:
self.rental_cost -= 20
return "Your rental car cost will be " + str(self.rental_cost) + " dollars."
def trip_cost(self):
return "Your total trip cost will be: {} dollars".format(self.days + self.hotel_cost + self.plane_cost + self.spending_money)
nights = int(input("How many nights will you stay in the city?: "))
city = input('\nSelect a city[Charlotte, Tampa, Pittsburgh or Los Angeles]: ')
days = int(input('How many days will you be staying?: '))
spending_money = int(input('How much spending money do you have?: '))
my_trip = BigTrip(nights, days, city, spending_money)
print(my_trip.hotel_cost())
print(my_trip.plane_ride_cost())
print(my_trip.rental_car_cost())
print(my_trip.trip_cost())
这是你的输出:
How many nights will you stay in the city?: 4
Select a city[Charlotte, Tampa, Pittsburgh or Los Angeles]: charlotte
How many days will you be staying?: 3
How much spending money do you have?: 1200
Your hotel cost will be 560 dollars.
Your plane cost will be 183 dollars.
Your rental car cost will be 100 dollars.
Your total trip cost will be: 1946 dollars