Python 回溯(最近一次调用last):和TypeError:

Python 回溯(最近一次调用last):和TypeError:,python,python-2.7,Python,Python 2.7,我仍然是Python的初学者,目前正在使用codecademy。我决定将其中一个练习程序稍微复杂化,我遇到了以下错误: Traceback (most recent call last): File "python", line 30, in <module> File "python", line 24, in trip_cost File "python", line 18, in rental_car_cost TypeError: unsupported operand ty

我仍然是Python的初学者,目前正在使用codecademy。我决定将其中一个练习程序稍微复杂化,我遇到了以下错误:

Traceback (most recent call last):
File "python", line 30, in <module>
File "python", line 24, in trip_cost
File "python", line 18, in rental_car_cost
TypeError: unsupported operand type(s) for -: 'unicode' and 'int'
回溯(最近一次呼叫最后一次):
文件“python”,第30行,在
文件“python”,第24行,在trip_cost中
文件“python”,第18行,在租车成本中
TypeError:-:“unicode”和“int”的操作数类型不受支持
这是我的密码:

def hotel_cost(nights):
  # the hotel costs $140 per night
  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

x = raw_input("Where are you going? ")
y = raw_input("How many days are you going for? ")
z = raw_input("How much spending money are you taking? ")

print trip_cost(x, y, z)
def酒店成本(夜):
#这家旅馆每晚140美元
返回140*晚
def飞机驾驶费用(城市):
如果城市==“夏洛特”:
返回183
elif city==“坦帕”:
返回220
elif city==“匹兹堡”:
返回222
elif city==“洛杉矶”:
返回475
def租车费用(天):
费用=天*40
如果天数>=7:
成本-=50
elif天数>=3天,天数<7天:
成本-=20
退货成本
def出行成本(城市、天数、支出):
归还租车费(天)+酒店费(天-1)+飞机费(城市)+消费费
x=原始输入(“你要去哪里?”)
y=原始输入(“您打算用多少天?”)
z=原始输入(“你花了多少钱?”)
打印行程成本(x、y、z)

任何帮助都将不胜感激,谢谢!我是个初学者,所以我的python行话有点生疏。

你正在做
days-1
cost-=50
,但是
days
cost
是用户输入,因此是字符串(在你的例子中更准确地说是unicode字符串),你应该在做任何事情之前(尤其是数学)转换成
int
既然这是你的意图:

y = int(raw_input("How many days are you going for? "))
z = int(raw_input("How much spending money are you taking? "))
这是因为您使用它们时,就好像它们是数字一样,没有进行转换


然而,请注意,输入数字以外的任何内容都会产生错误,但这是另一个问题的主题

您正在做的
天-1
成本-=50
,但是
天和
成本
是用户输入,因此是字符串(在您的情况下更准确地说是unicode字符串),在做任何事情(尤其是数学)之前,您应该先转换为
int
,因为这是您的意图:

y = int(raw_input("How many days are you going for? "))
z = int(raw_input("How much spending money are you taking? "))
这是因为您使用它们时,就好像它们是数字一样,没有进行转换


然而,请注意,输入除数字以外的任何内容都会产生错误,但这是另一个问题的主题

只是对R.Palmer的回答的补充。你还应该考虑使用try…除了用户输入块之外。您可能希望处理无法转换为int的字符串,例如“nine”或其他完全不同的字符串。这只是对R.Palmer的回答的补充。您还应该考虑使用try…除了用于用户输入的块之外。您可能希望处理无法转换为int的字符串,例如“nine”或完全不同的字符串。