Возникли проблемы при назначении функций Python - PullRequest
0 голосов
/ 06 июня 2018

Я делаю Python из codecademy и у меня проблемы с планированием отпуска (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'

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Здесь есть несколько проблем, но прежде всего, если ваше назначение позволяет, я бы использовал класс вместо нескольких функций.Я бы просто создал 1 большой объект.Причина в том, что у вас так много параметров, что имеет больше смысла передавать параметры в класс и затем разрешать функциям манипулировать ими, а не передавать параметры нескольким функциям.Все похоже, так как все это связано с поездкой, поэтому я бы сохранил ее в классе.Я использую 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
0 голосов
/ 06 июня 2018

raw_input возвращает строку, и вы не можете выполнять математику со строками.Вам необходимо преобразовать соответствующие значения в числа, например:

days = int(raw_input('days?'))
spending_money = float(raw_input('money?'))
...