I am currently doing the Python 3 course to learn it from complete scratch and I am having trouble with a specific Task. I have written following code and while I am aware its probably not even close to the most effective way I could have written it, I still think it should work.
https://www.codecademy.com/courses/learn-python-3/lessons/python-functions-loops-cc/exercises/exponents
This is the link to the lesson and below is the code. Everytime I use it it gives out
[2, 4, 8, 3, 9, 27]
instead of
[2, 4, 8, 3, 9, 27, 4, 16, 64]
def exponents(bases, powers):
math = []
length = len(bases)
while length > 0:
for i in bases:
math.append(bases[0] ** powers[0])
math.append(bases[0] ** powers[1])
math.append(bases[0] ** powers[2])
bases.pop(0)
return math
length = lenght - 1
Help of any kind would be highly appreciated since I don’t understand why it only prints the exponents for the first 2 numbers in bases.
there are a couple of things important:
using the return
keyword means handing back data to the caller, which means the function is completed. Just like when making a test in school, you can decide to hand back the test to the teacher without filling in all the questions. Same with your loops, not all iteration are made because you decide to hand back/return before all the loop iterations are done
i wouldn’t remove elements from the list(s), its not needed, only complicate things
furthermore, you can’t assume the powers list contains 3 elements, it might contain 1, 2 elements or a lot more.
you really need two loops, one to loop over bases
, then within this loop over powers
and append to math
list
both loops can be for
loops, given in both cases the amount of iterations is known (amount of items in the list), a while loop is useful when you don’t know how many iterations you need to make
3 Likes
@code7484294848, this is highly instructive! Please run this code:
bases = [0,1,2,3,4,5,6]
for i in bases:
print(bases[0])
bases.pop(0)
What output do you expect?
What is the actual output?
What is going on? Hint: use print() to keep track of i.
3 Likes
Output I expect:
That it prints each number in bases once
Actual Output:
It only prints first 4 numbers then stops
What is going on:
I’ve tried to use print(i) instead of what I did before and it printed all values, still don’t understand though why it doesn’t print all numbers the other way but exactly 4 numbers
removing elements from the list you are looping over is almost always a bad idea, like i said before:
what @patrickd314 means was of course to combine print with remove:
bases = [0,1,2,3,4,5,6]
for i in bases:
print(i)
bases.pop(0)
then you will see that elements are skipped. why is this?
lets say you remove the first element (index 0) from the list, this spot can’t stay empty. So everything to the right of the removed item shifts one position to the left:
bases = [0,1,2,3,4,5,6]
bases.pop(0)
print(bases)
see? combined with a loop this causes the skips, given the loop goes to next index after all the elements have shifted.
but we are completely focusing on the wrong thing, i am going to repeat myself, again:
we don’t need pop or remove, it only complicates the problem we are trying to solve.
3 Likes