Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Python Collections (2016, retired 2019) Lists Shopping List Take Three

2 issues in this lesson

I have two problems with my code in this lesson that are driving me crazy.

  1. When I type in a new item and hit enter, the add_to_list function doesn't show the new item in the string asking where to add the new item (e.g. where should I add?, as opposed to where should I add apple?)

  2. When I add my first item, and hit enter, the show_list function doesn't show any items in my list, just "Here's your list:" then the dashes. Once I add another item the list starts printing the complete list.

I have watched the complete video several times and I can't see where my code differs.

```import os

shopping_list = []

def clear_screen(): os.system("cls" if os.name == "nt" else "clear")

def show_help(): clear_screen() print("What should we pick up at the store?") print(""" Enter 'DONE' to stop adding items. Enter 'HELP' for this help. Enter 'SHOW' to see your current list. """)

def add_to_list(item): show_list()

if len(shopping_list): position = input("Where should I add {}? \n" "Press Enter to add to the end of the list \n" "> ".format(item))

else: position = 0

try: position = abs(int(position)) except ValueError: position = None if position is not None: shopping_list.insert(position - 1, item) else: shopping_list.append(item)

def show_list(): clear_screen()

print("Here's your list:")

index = 1

for item in shopping_list:
    print("{}. {}".format(index, item))
    index += 1

print("-"*10)

show_help()

while True: new_item = input("> ")

if new_item.upper() == 'DONE' or new_item.upper() == 'QUIT':
    break
elif new_item.upper() == 'HELP':
    show_help()
    continue
elif new_item.upper() == 'SHOW':
    show_list()
    continue
else:
  add_to_list(new_item)

show_list()```

1 Answer

Steven Parker
Steven Parker
231,275 Points

The input statement seems to contain 3 separate strings, but the "format" will only work on the last one. Use just one string instead:

# original
input("Where should I add {}? \n" "Press Enter to add to the end of the list \n" "> ".format(item))
# fixed
input("Where should I add {}?\nPress Enter to add to the end of the list\n> ".format(item))

The control flow issue will be difficult to diagnose in unformatted code. Edit your code to apply Markdown formatting as described in the Markdown Cheatsheet pop-up below the "Add an Answer" area. :arrow_heading_down:   Or watch this video on code formatting.