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 trialAJ Esamann
2,748 PointsPython 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!
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
28,558 PointsMove 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.
John Cope
13,924 PointsJohn Cope
13,924 PointsNotice that the code below the new function is also indented. Otherwise it won't work
andren
28,558 Pointsandren
28,558 PointsIndeed 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.