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 trialjohn larson
16,594 Pointsprint() inside string_factory outputs what I would expect But when I return that same value it is off
the print() inside the function prints out four strings in a list with updated variables. Return only prints out one string. I'm missing something
def string_factory(dicts, string):
index = 0
for item in dicts:
build_string = []
# build_string = string.format(**dicts[index]) this didn't work
build_string.append(string.format(**dicts[index]))
print(build_string)
index +=1
return build_string
dicts = [
{'name': 'Michelangelo',
'food': 'PIZZA'},
{'name': 'Garfield',
'food': 'lasanga'},
{'name': 'Walter',
'food': 'pancakes'},
{'name': 'Galactus',
'food': 'worlds'}
]
string = "Hi, I'm {name} and I love to eat {food}!"
output = string_factory(dicts, string)
print(output)
1 Answer
Chris Howell
Python Web Development Techdegree Graduate 49,702 PointsHey john larson
So I can't tell you how many times I have done this while coding by mistake because it is pretty easy to do.
First I will give you a hint and let you find it, if you still cant ill give and explain the answer.
for item in dicts:
build_string = []
# HINT: These lines are causing a problem, still valid code. Just a logic error.
john larson
16,594 Pointsjohn larson
16,594 PointsThanks Chris, I'll take a look at that again. Each time through he loop, it looks like append is working. So I don't think that is the problem.. I tried this:
john larson
16,594 Pointsjohn larson
16,594 PointsChris, I moved the empty build_string outside the loop and it SEEMS ti work correctly. I havn't passed it through the challenge yet, but I'm more concerned with just understanding how things work. I don't see why the empty array being inside the loop would make it print only the last line. Thanks
Chris Howell
Python Web Development Techdegree Graduate 49,702 PointsChris Howell
Python Web Development Techdegree Graduate 49,702 PointsIt should pass through the challenge if you have moved it above and outside the loop but still inside the function.
So what was happening was you were resetting the variable to a new empty list everytime until the last run through the loop.
build_string = [] # Made a new empty list
Because the list is getting reset to a new empty list as it loops over each item, when you finally reach the end of that list. The LAST item doesnt have to loop again so it does not set the variable again. It breaks out of the loop and continues down to the next thing which is returning it.