Как правильно передать переменную в метод?(Python) - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь очистить свой код, но я новичок в python, поэтому я почти уверен, что мой синтаксис неправильный.Я написал простой контроллер, чтобы переменная message_lx_setPoint приближалась к значению уставки message_lx_setPoint.Я использую операционную систему робота , поэтому сценарий зацикливается на этом.Так как он работает нормально, значение message_lx_current приближается к значению setPoint.Ниже приведен код, который я сделал для этого:

#defs
increment = 0.1

#setPoint values
message_lx_setPoint = 5.0 #value set by some controller(?)
message_ly_setPoint = 5.0

#current values
message_lx_current = 0.0 #value set by some sensor(?)
message_ly_current = 0.0

def approach_lx_setPoint():
    global message_lx_current, message_lx_setPoint, increment

    if message_lx_current < message_lx_setPoint:
        print("current is less than set point")
        message_lx_current += increment

    elif message_lx_current == message_lx_setPoint:
        print("current is equal to set point")
        message_lx_current = 0.0

    elif message_lx_current > message_lx_setPoint:
        print("current is greater than set point")
        message_lx_current -= increment

    return message_lx_current

def approach_ly_setPoint():
    global message_ly_current, message_ly_setPoint, increment

    if message_ly_current < message_ly_setPoint:
        print("current is less than set point")
        message_ly_current += increment

    elif message_ly_current == message_ly_setPoint:
        print("current is equal to set point")
        message_ly_current = 0.0

    elif message_ly_current > message_ly_setPoint:
        print("current is greater than set point")
        message_ly_current -= increment

    return message_ly_current

def main():
    approach_lx_setPoint()
    approach_ly_setPoint()
    print(message_lx_current)
    print(message_ly_current)

Я должен сделать это для 6 различных переменных, поэтому мой код начинает раздуваться;Я должен сделать 6 методов, чтобы контролировать все 6 переменных.Я хочу сделать так, чтобы я делал только один единственный метод, я передаю переменную, которой нужно управлять, и переменную, которая является заданным значением, и она выполняется оттуда.Я думаю что-то вроде этого:

#same variables as before

def approachSetPoint(current, target):
    global increment

    if current < target:
        print("current is less than set point")
        current += increment

    elif current == target:
        print("current is equal to set point")
        current = 0.0

    elif current > target:
        print("current is greater than set point")
        current -= increment

    return current

def main():
    approachSetPoint(message_lx_current, message_lx_setPoint)
    approachSetPoint(message_ly_current, message_ly_setPoint)
    print(message_lx_current)
    print(message_ly_current)

Я надеюсь, что результатом этого будет то, что вместо того, чтобы иметь по одному approachSetPoint def для каждой переменной, которую я буду контролировать, я будуесть только one подхода подхода SetPoint, и все, что мне нужно сделать, это вызвать его в основном с соответствующими переменными, и он будет делать то же самое.

Я пробовал это, и у меня нет ошибок иличто-нибудь, однако, значения НЕ обновлялись (?).Я предполагаю, что просто неправильно связываю переменную, которую передаю в качестве аргумента, с той, которая модифицируется в методе.Любая идея, как подходить к поведению, как я описываю?Заранее спасибо!

1 Ответ

1 голос
/ 19 сентября 2019

Вам нужно хранить результаты вне функции между прогонами:

message_lx_current = y_current = 0.0
message_lx_setpoint = message_ly_setpoint = 5.0

def approach_setpoint(current, setpoint, increment=0.1):
    if current < setpoint:
        print("current is less than set point")
        current += increment
    elif current == setpoint:
        print("current is equal to set point")
        current = 0.0
    elif current > setpoint:
        print("current is greater than set point")
        current -= increment
    return current

def main():
    message_lx_current = approach_setpoint(message_lx_current, message_lx_setpoint)
    message_ly_current = approach_setpoint(message_ly_current, message_ly_setpoint)
    print(message_lx_current)
    print(message_ly_current)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...