Неверный счет в переменной

print("start")
start = {"x":20, "y":20};
print(start)
print("startingPos")
startingPos = start;
print(startingPos)

def refreshCoords(directions,startingPos):
    if directions == "^":
        startingPos = {"x":startingPos["x"], "y":startingPos["y"]+1};
    if directions == "v":
        startingPos = {"x":startingPos["x"], "y":startingPos["y"]-1};
        return startingPos  
    if directions == ">":
        startingPos = {"x":startingPos["x"]+1, "y":startingPos["y"]};
    if directions == "<":
        startingPos = {"x":startingPos["x"]-1, "y":startingPos["y"]}; 

def walker(direction,startingPos):
    print(refreshCoords(direction,startingPos))

for i in range(1,10,1):
    walker("v",startingPos)

Нужна помощь в разъяснение, не понимаю почему при вызове walker("v",startingPos), "Y" меняется только один раз, а дальше значение повторяется. Надо что бы, он менялся столько раз сколько надо ( в данном примере что бы он изменялась с 20 до 10 при вызове функции). В чем ошибка в этом коде?


Ответы (1 шт):

Автор решения: Zhihar

все дело в том, что вы в функции меняете значение локальной переменной startingPos, никак не затрагивая глобальную переменную startingPos

обойти это можно например через return

print("start")
start = {"x":20, "y":20}
print(start)
print("startingPos")
startingPos = start
print(startingPos)

def refreshCoords(directions, oldPos):
    newPos = oldPos

    if directions == "^":
        newPos = {"x":oldPos["x"], "y":oldPos["y"]+1}
    if directions == "v":
        newPos = {"x":oldPos["x"], "y":oldPos["y"]-1}
    if directions == ">":
        newPos = {"x":oldPos["x"]+1, "y":oldPos["y"]}
    if directions == "<":
        newPos = {"x":oldPos["x"]-1, "y":oldPos["y"]}

    return newPos


def walker(direction, oldPos):
    newPos = refreshCoords(direction, oldPos)
    print(newPos)
    return newPos


newPos = startingPos
for i in range(1,10,1):
    newPos = walker("v",newPos)
→ Ссылка