+ 1

why when I try to make my_id += 1 gives me an error

here is my code : my_dict = { 'x': 0, 'y': 0 } temp = {} my_id = 0 def new(my): for i in range(5): my['x'] = int(input(f'x{i} : ')) my['y'] = int(input(f'y{i} : ')) temp[f'{my_id}'] = my print(temp) #my_id += 1 new(my_dict) why when I try to make my_id += 1 gives me an error

14th Aug 2021, 8:01 AM
Alisa Zaiceva
5 Answers
+ 3
Alisa Zaiceva In Python, you can read a global variable with no problem, but when you write to it Python makes a local variable instead, this avoids the risk of accidentally modifying a global variable. As JaScript mentioned, you can use the global keyword to declare global instead of local.
14th Aug 2021, 8:45 AM
Giorgos
+ 4
Alisa Zaiceva , may be a bit late, but have a look at it. you can pass the my_id var as a second argument to the function and use it there. you should not work with global variables, as long as there is an other option: my_dict = { 'x': 0, 'y': 0 } temp = {} my_id = 0 def new(my, my_id): for i in range(5): my['x'] = int(input(f'x{i} : ')) my['y'] = int(input(f'y{i} : ')) temp[f'{my_id}'] = my print(temp) my_id += 1 new(my_dict, my_id) # if you need to get the last value from my_id in the main scope, you can return the value from the function
15th Aug 2021, 8:21 PM
Lothar
Lothar - avatar
+ 2
The variable should be deckared global as here: def new(my): global my_id for i in range(5): my['x'] = int(input(f'x{i} : ')) my['y'] = int(input(f'y{i} : ')) temp[f'{my_id}'] = my print(temp) my_id += 1 my_id = 0 my_dict = { 'x': 0, 'y': 0 } temp = {} new(my_dict)
14th Aug 2021, 8:35 AM
JaScript
JaScript - avatar
+ 1
but they are also defined above the function. Shouldn't they be global?
14th Aug 2021, 8:15 AM
Alisa Zaiceva
0
Thank you very much
14th Aug 2021, 8:39 AM
Alisa Zaiceva