Boredless Tourist

I could not complete the Boredless Tourist project. So I watched the video tutorial and copied the code as best I could. However, I have an error. When I try to run the code it says:

Traceback (most recent call last):
File “script.py”, line 63, in
smills_france = get_attractions_for_traveler([‘Dereck Smill’, ‘Paris, France’, [‘monument’]])
File “script.py”, line 60, in get_attractions_for_traveler
interests_string += "the " + traveler_attractions[i] + ", "
TypeError: must be str, not list

I have compared the code on my screen to that on the video tutorial a few times, I can’t see a difference.

Can anyone help here? Does anyone have a solution to the boredless tourist project?

The full code I tried to use is below:

destinations = ['Paris, France', 'Shanghai, China', 'Los Angeles, USA','São Paulo, Brazil', 'Cairo, Egypt']

test_traveler = ['Erin Wilkes', 'Shanghai, China', ['historical site', 'art']]

def get_destination_index(destination):
  destination_index = destination.index(destination)
  return destination_index

def get_traveler_location(traveler):
  traveler_destination = traveler[1]
  traveler_destination_index = get_destination_index(traveler_destination)
  return traveler_destination_index

attractions = []
for destination in destinations:
  attractions.append([])

def add_attraction(destination, attraction):
  destination_index = get_destination_index(destination)
  attractions_for_destination = attractions[destination_index].append(attraction)

add_attraction("Los Angeles, USA", ['Venice Beach', ['beach']])

add_attraction("Paris, France", ["the Louvre", ["art", "museum"]])
add_attraction("Paris, France", ["Arc de Triomphe", ["historical site", "monument"]])
add_attraction("Shanghai, China", ["Yu Garden", ["garden", "historical site"]])
add_attraction("Shanghai, China", ["Yuz Museum", ["art", "museum"]])
add_attraction("Shanghai, China", ["Oriental Pearl Tower", ["skyscraper", "viewing deck"]])
add_attraction("Los Angeles, USA", ["LACMA", ["art", "museum"]])
add_attraction("São Paulo, Brazil", ["São Paulo Zoo", ["zoo"]])
add_attraction("São Paulo, Brazil", ["Pátio do Colégio", ["historical site"]])
add_attraction("Cairo, Egypt", ["Pyramids of Giza", ["monument", "historical site"]])
add_attraction("Cairo, Egypt", ["Egyptian Museum", ["museum"]])

def find_attractions(destination, interests):
  destination_index = get_destination_index(destination)
  attractions_in_city = attractions[destination_index]
  attractions_with_interest = []

  for attraction in attractions_in_city:
    possible_attraction = attraction
    attraction_tags = attraction[1]

    for interest in interests:
      if interest in attraction_tags:
        attractions_with_interest.append(possible_attraction)

  return attractions_with_interest

def get_attractions_for_traveler(traveler):
  traveler_destination = traveler[1]
  traveler_interests = traveler[2]
  traveler_attractions = find_attractions(traveler_destination, traveler_interests)

  interests_string = "Hi " + traveler[0] + ", we think you'll like these places around " + traveler_destination + ": "
  for i in range(len(traveler_attractions)):
    if traveler_attractions[-1] == traveler_attractions[i]:
      interests_string += "the " + traveler_attractions[i] + ", "
    else: 
      interests_string += "the " + traveler_attractions[i] + ", "
  return interests_string

smills_france = get_attractions_for_traveler(["Dereck Smill", "Paris, France", ["monument"]])

print(smills_france)

Thank you.

Hi!

  1. You have a typo on line 6: index is called on destination instead of destinations.
  2. On line 53 you get a list of lists in traveler_attractions (the first item is the name of the attraction, the second is the list of interests). So on lines 58 and 60 you are trying to concatenate a string with a list. For concatenation, you need to use the first element of traveler_attractions[i].
1 Like