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 Basics (2015) Shopping List App Refactor

AJ Esamann
AJ Esamann
2,748 Points

Python Coding Task

This challenge is a little different. You shouldn't have to write very much code. You probably recognize this code. It's pretty much our shopping_list_2.py from before. I want you to help me with a little refactor, though. Refactoring is when we change code to make it better, often by creating new functions. Create a new function named main that doesn't take any arguments. Move everything from line 22 (show_help()) and below into your new function. You shouldn't have any code that isn't inside of a function.

I understand how to add the function 'main' but I don't understand what it wants me to make it do. It says i don't need much code but i don't know what to do besides add def main():. Please give me the answer and explain I'm stumped!

shopping_list.py
def show_help():
    # print out instructions on how to use the app
    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 show_list(shopping_list):
    # print out the list
    print("Here's your list:")

    for item in shopping_list:
        print(item)

def add_to_list(shopping_list, new_item):
    # add new items to our list
    shopping_list.append(new_item)
    print("Added {}. List now has {} items.".format(new_item, len(shopping_list)))
    return shopping_list

show_help()

# make a list to hold onto our items
shopping_list = []

while True:
    # ask for new items
    new_item = input("> ")

    # be able to quit the app
    if new_item == 'DONE':
        break
    elif new_item == 'HELP':
        show_help()
        continue
    elif new_item == 'SHOW':
        show_list(shopping_list)
        continue
    add_to_list(shopping_list, new_item)

show_list(shopping_list)

1 Answer

andren
andren
28,558 Points

Move everything from line 22 (show_help()) and below into your new function.

That line of the challenge text is the one that actually tells you what you have to do, when doing refactoring you often don't need to add or change code, often you are simply moving code so that it ends up being organized better. For this challenge moving the code around is all you have to do, you don't have to add any new code for yourself.

Here is the solution to the task:

def show_help():
    # print out instructions on how to use the app
    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 show_list(shopping_list):
    # print out the list
    print("Here's your list:")

    for item in shopping_list:
        print(item)

def add_to_list(shopping_list, new_item):
    # add new items to our list
    shopping_list.append(new_item)
    print("Added {}. List now has {} items.".format(new_item, len(shopping_list)))
    return shopping_list

def main():
    show_help()

    # make a list to hold onto our items
    shopping_list = []

    while True:
        # ask for new items
        new_item = input("> ")

        # be able to quit the app
        if new_item == 'DONE':
            break
        elif new_item == 'HELP':
            show_help()
            continue
        elif new_item == 'SHOW':
            show_list(shopping_list)
            continue
        add_to_list(shopping_list, new_item)

    show_list(shopping_list)

All I did was move the code below line 22 into the newly created main function, nothing beyond that was added.

Notice that the code below the new function is also indented. Otherwise it won't work

andren
andren
28,558 Points

Indeed when moving code in Python you have to make sure it's indented correctly for the place you pasted it. Python is very sensitive about indentation and forgotting to do so could lead to various bugs.

Thank you for pointing that out, I should have mentioned that in the post.