+ 1
....it keeps saying that variable sum got referenced before assignment...HOW!
x = int(input()) sum = 1 def factorial(x): for i in range(0, x+1): sum *= i return print(sum) factorial(x)
17 ответов
+ 5
Regardless to the code logic…
sum should NOT be assigned as a variable name. sum() is a built-in Python method. You can assign sum as a variable, but you cannot use it as a function later on.
The error you are facing is UnboundLocalError.
In you code, before factorial function is defined, sum is a GLOBAL variable. And INSIDE a function, variable sum is a LOCAL variable. Unless you instruct the function it can interact with variable OUTSIDE the function with “global” keyword, variable sum outside the function is independent to the same variable name inside a function.
Search for “python scope” for more information. w3schools has a better explanation than I do.
+ 5
- `return print(sum)` #You don't need to return a print statement!`,
- Variable `sum` is declared before the function but you call it inside the function(local variable). It should be declared inside the function. [This is where the error occurs]
- `range(0,x+1)` starts from 0 and ends with x, but multiplication by 0 is always 0.
Now, you know what to do.
If you fixed it or have no clue on how to fix it, try this code and see the output: https://code.sololearn.com/cc5e7kCkZZ4m/?ref=app
+ 3
Wong Hei Ming ,
You can also use the sum() function after the variable `sum` declared. But, it's still better to avoid picking function names to name a variable.
+ 2
Dragon BB, after sum is declared as variable, it lost the function.
https://code.sololearn.com/ckq49gEF75Km/?ref=app
+ 2
Wong Hei Ming I also found that you could use the `global` keyword to fix this problem..
https://code.sololearn.com/cBRdmbzm8IXw/?ref=app
+ 1
Wong Hei Ming Sorry!
My bad.
What I meant was something like:
def a(n):
sum = 1
pass
print(sum([1,2,3]))
+ 1
That is the "scope" concept, the problem OP is facing!
I make a quick check on intermediate course, looks like it is not mentioned.
+ 1
Wong Hei Ming Yes..
+ 1
That was mentioned in my post above. And i feel my explanation is not clear enough so I suggest take a look at w3schools.
+ 1
Wong Hei Ming
Oh wow i didn't know that sum is lost as a func if used as a variable.....it applies to all built in func i will assume.
+ 1
Dragon RB
Using global keyword....i didn't even know that is possible......where do i learn these stuff because i am already done with sololearn and it has non of that.
+ 1
@Intermediate Depression
You can access a global variable from a function, but you cannot change the value without further instruction.
Example 1
x = 10
def func_1():
y = x + 1
return y
print(func_1())
Output: 11
In the above example, func_1() can access variable x and use it to make calculation, and store the result to ANOTHER variable.
Example 2
x = 10
def func_2():
x += 1
return x
print(func_2())
Output: UnBoundLocalError
In the above example, func_2() try to modify a global function. Normally it is not allow.
Example 3
x = 10
print(x) # 10
def func_3():
global x # enable to modify x which is OUTSIDE the function
x += 1
return x
print(func_3()) # 11
print(x) # 11
Output:
10
11
11
In the above example, 10 is assigned to x before func_3 is declared. By allowing func_3 to manipulate the global variable x, x is being modified by the function, turning x into 11. The second print shows func_3 made changes to global variable x. The third print returns 11, once again confirming the change of value is caused by func_3.
+ 1
Woo...looks like mention some with @ only works on apps version, not on website...
+ 1
Intermediate Depression, you can search "Automate the boring stuff with python", a book written by Al Sweigart. He is kind enough to publish his book on the web so everyone can read it for free.
SoloLearn only teach us the basic. When I want to archive something with python, I search "how to <do something> in python". Usually I look for results from w3schools, geeksforgeeks and realpython for easy understanding. Sometime I look for stackoverflow for advance concept and try to figure it out (not always success, but tried anyway).
+ 1
Wong Hei Ming
Thank you so much for all the valuable information. You were a big help thank you so much.
+ 1
Intermediate Depression Next time, instead of copy-paste your code in your question description, send us a link to your code instead. Here's how:
https://code.sololearn.com/Wek0V1MyIR2r/?ref=app
0
Wong Hei Ming
Ty so much for explaining i really appreciate it!
Sorry to bother you further but i thought that global variables can be accessible from anywhere while local are not so why wasn't i able to access my global valuable???. (I only have a general idea about local and global )