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 trialShmuel Zilberman
1,409 Pointsdone
I FALLOWED THIS ACCORDING TO THE VIDEO BUT HE DIDN'T MAKE A DONE DEF YET IT STILL WORKS I'M NOT SURE WHY CAN SOMEONE EXPLAIN THANKS
import os
shopping_list = []
def clear_screen():
os.system("cls" if os.name == "nt" else "clear")
def show_help():
clear_screen()
#this is gonna show that the user is gonna
#in these cases since we have made a def for each this on this print list it will go but keep in mind that the things over here are are named simalar to what it says in the print list for example over here
print("what should we pick up at the store?")
print("""
Enter 'DONE' to stop adding items.
Enter 'HELP' to get help.
Enter 'SHOW' to see your list dude
Enter 'REMOVE' to delete a item fro your list
""")
def add_to_list(item):
show_list()
if len(shopping_list):
#new item like drek right here {}
postition = input("where should i add the {}?\n"
"press ENTER to add to the end of the list\n"
"> ".format(item))
#if theres nothing over there then its gonna be zero
else:
position = 0
try:
#the abs gives us the apsolote value if the number even if its gonna be a negitive its still gonna be a five or someting like that
position = abs(int(position))
except ValueError:
position = None
if position is not None:
#what happens if its not none then we are gonna insert the item
shopping_list.insert(position-1, item)
else:
shopping_list.append(new_item)
show_list()
def show_list():
clear_screen()
print("here's your list:")
index = 1
for item in shpping_list:
print("{}. {}".format(item, item))
index += 1
print("-"*10)
def remove_from_list():
show_list()
what_to_remove = input("what would you like to remove from the list?\n> ")
try:
#meaning what ever you put in as remove to input function
shopping_list.remove(what_to_remove)
except ValueError
pass
show_list()
show_help()
while True:
new_item = input("> ")
#when you put in done then the program is gonna exit since the break word is gonna make it drop out
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
elif new_item.upper() == 'REMOVE':
remove_from_list()
else:
add_to_list(new_list)
show_list()
[MOD: added ```python formatting -cf]
1 Answer
Chris Freeman
Treehouse Moderator 68,423 PointsHi Shmuel, There were several typos that needed fixing before I could debug why 'DONE' was not working.
# fixed typos
for item in shopping_list: # Fixed: renamed shpping_list to shopping_list
add_to_list(new_item) # Fixed: renamed new_list to new_item
# fixed syntax errors
except ValueError: # Fixed: added colon
if new_item.upper() == 'DONE' or new_item.upper() == 'QUIT': # Fixed: added parens to .upper()
elif new_item.upper() == 'HELP': # Fixed: miss matching quotation marks in "Help'
elif new_item.upper() == 'SHOW': # Fixed: added parens to .upper()
Why the 'DONE' wasn't working: The missing parens in new.item.upper
is particularly hard to detect. Without the parens, it references the method upper
but does not call it. Since it exists, it has a "truthy" value and will be syntactically correct, but will make the comparison always return false.
Post back if you have any more questions! Good luck!!