15.5 - Factorial - error message unclear


#1

I'm working on the 'Factorial' exercise, & I'm receiving an error that has me a bit puzzled. When I 'save & submit', the interpreter comes back with "list assignment index out of range". I understand the basic message that it's trying to convey,but is there any way to tell if it's pointing to line 3, line 4, or line 6??

Line 3 - trying to instantiate an empty list.
Line 4 - trying to populate the 1st item in that list with the value of 'x'
Line 6 - trying to populate the remainder of the list with each number from 'x - 1' to 1.

I'd appreciate any clarification that could be provided. Thanks.

https://www.codecademy.com/courses/python-intermediate-en-rCQKw/0/5?curriculum_id=4f89dab3d788890003000096#

factorial(1) resulted in an error: list assignment index out of range


def factorial(x):
    total = 0
    numlist = []
    numlist[0] = x
    while x >= 2:
        numlist.append(x)
        x -= 1
    for i in numlist:
        total = total + i
    return total


#2

You're overthinking this. Try following this template:

def FUNCTION(PARAMETER):
    if PARAMETER == 1:
        return 1
    else:
        return PARAMETER * FUNCTION(PARAMETER - 1)

Make sure not to just follow the template and move on. I want to make sure that you understand how and why this works. If you have any questions, just ask.


#3

Hey, big thanks for the quick response! :+1: Looking over the template that you provided, your way is blindingly simple compared to what I was trying to do. Thanks again.


#5

I have to say I don't understand why this works?
The value of parameter isn't changing after the first calculation is it?

say parameter =4
the else statement is then: 4*3 = 12
but then there is no parameter = parameter -1
how does it then know to go 12 *2 ?

sorry if its obvious.


#6

Hi carmenwmake, thank you for posting, & prompting me to think through this again!

As I understand it, the line 'return PARAMETER * FUNCTION(PARAMETER - 1)' is what performs the looping. It's doing this by essentially "calling itself" again for each value of x that is greater than 1. If you replace the word FUNCTION with FACTORIAL it might make more sense.

I am not claiming that's an authoritative answer - I could very well be wrong - but that's the way that I understand it. (And I'm sure that if that's wrong, someone will chime in with a correction.) :wink:


#7

You are absolutely correct @codetimcode. This is what is known as recursion.


#8

Thank you @codetimcode and @aquaphoenix17 for the help.


#9

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.