Как использовать возвращаемые значения из двух функций для создания оператора if и прерывания процесса - PullRequest
1 голос
/ 27 февраля 2020

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

Как мне решить эту проблему?

import concurrent.futures


def Vibration1(a,b,c,d):
    State1 = False
    if a < Thumb_Pitch < b or c < Roll_Max_Thumb < d :
        State1 = True

    else:
        State1 = False
        print('Done1')
    return State1

def Vibration2(w,x,y,z):
    State2 = False
    if w < Index_Pitch < x or y < Index_Roll < z :
        State2 = True
    else:
        State2 = False
        print('Done2')
    return State2

def feedback():
    Success = False
    if State1 and State2  == True:
        Success = True
        x = time.sleep(5)
    else:
        Success = False
        print("Keep Trying")


    return print('Success',Success)

with concurrent.futures.ThreadPoolExecutor() as executor:
        f1 = executor.submit(Vibration1,-3000.0,3000.0,-3000.0,3000.0)
        f2 = executor.submit(Vibration2,-3000.0,3000.0,-3000.0,3000.00)
        f3 = executor.submit(feedback)

        print(f1.result())
        print(f2.result())
        print(f3.result())

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Для решения этой проблемы нельзя ссылаться на переменные из функций Vibration1 и Vibration2.

Есть два способа сделать это.

1) Вы можете присвоить значения глобальным переменным:

import concurrent.futures

State1 = None
State2 = None

def Vibration1(a,b,c,d):
    global State1
    State1 = False
    if a < Thumb_Pitch < b or c < Roll_Max_Thumb < d :
        State1 = True

    else:
        State1 = False
        print('Done1')
    return State1

def Vibration2(w,x,y,z):
    global State2
    State2 = False
    if w < Index_Pitch < x or y < Index_Roll < z :
        State2 = True
    else:
        State2 = False
        print('Done2')
    return State2

def feedback(a,b,c,d,w,x,y,z):
    global State1
    global State2
    Success = False
    if State1 and State2:
        Success = True
        x = time.sleep(5)
        State1 = False
        State2 = False
    else:
        Success = False
        print("Keep Trying")


    return print('Success',Success)

Если вы сделаете это, вам придется вызвать Vibration1 и Vibration2 функционируют извне для назначения значений переменных.

2) Когда вы ссылаетесь на значения State1 и State2, вы вызываете функцию вибрации:

def feedback(a,b,c,d,w,x,y,z):
    Success = False
    if Vibration1(a,b,c,d) and Vibration2(w,x,y,z):
        Success = True
        x = time.sleep(5)
    else:
        Success = False
        print("Keep Trying")


    return print('Success',Success)

Таким образом, вам не нужно вызывать функции извне, они будут вызываться автоматически.

Надеюсь, это поможет! Дайте мне знать, если у вас есть какие-либо вопросы.

1 голос
/ 27 февраля 2020

глобальные переменные не очень хорошая практика, но простое решение c состоит в том, чтобы объявить State1 и State2 как глобальные.

вы делаете это, добавляя строки

    global State1
    global State2

в начале каждой функции, которая хочет изменить State1 или State2

...