python if else 的 Flag 无法正常工作
python if else with a Flag not working correctly
我正在尝试在我的 if else 语句中设置一个标志。我希望它是 1,如果它穿过上部阈值,但只有前一个信号之后的第一个交叉点,如果它穿过下部阈值(-1 在第一个下部交叉点),我希望它是 1。否则我希望它是 0.
所以我的逻辑被设置了一个标志。然后在第一个 sig cross (cond1) 上改变标志状态......所以它不会再次被触发......但现在能够在条件 2 下触发信号交叉,否则它应该为零......但它不起作用.
as is
how i want
1
1
1
-1
1
1
1
-1
def is_triggered(row):
flag = False
if flag == False and ((row.D > row.UPPER) and (row.D_PREV < row.UPPER)) :
return 1
flag = True
if flag == True and ((row.D < row.LOWER) and (row.D_PREV > row.LOWER)):
return -1
flag = False
return 0
您有一些状态没有作为参数传递给函数。
解决这个问题的一种方法是制作一个 class 来跟踪该状态:
class ConditionTracker:
def __init__(self):
self.flag = False
def test_trigger(self, row):
if not self.flag and row.D > row.UPPER and row.D_PREV < row.UPPER:
self.flag = True
return 1
elif self.flag and self.D < row.LOWER and row.D_PREV > row.LOWER:
self.flag = False
return -1
return 0
然后您将像这样创建一个实例:
tracker = ConditionTracker()
然后像这样使用它:
value = tracker.test_trigger(row)
# value is now 1, -1 or 0
我正在尝试在我的 if else 语句中设置一个标志。我希望它是 1,如果它穿过上部阈值,但只有前一个信号之后的第一个交叉点,如果它穿过下部阈值(-1 在第一个下部交叉点),我希望它是 1。否则我希望它是 0.
所以我的逻辑被设置了一个标志。然后在第一个 sig cross (cond1) 上改变标志状态......所以它不会再次被触发......但现在能够在条件 2 下触发信号交叉,否则它应该为零......但它不起作用.
as is | how i want |
---|---|
1 | 1 |
1 | -1 |
1 | 1 |
1 | -1 |
def is_triggered(row):
flag = False
if flag == False and ((row.D > row.UPPER) and (row.D_PREV < row.UPPER)) :
return 1
flag = True
if flag == True and ((row.D < row.LOWER) and (row.D_PREV > row.LOWER)):
return -1
flag = False
return 0
您有一些状态没有作为参数传递给函数。
解决这个问题的一种方法是制作一个 class 来跟踪该状态:
class ConditionTracker:
def __init__(self):
self.flag = False
def test_trigger(self, row):
if not self.flag and row.D > row.UPPER and row.D_PREV < row.UPPER:
self.flag = True
return 1
elif self.flag and self.D < row.LOWER and row.D_PREV > row.LOWER:
self.flag = False
return -1
return 0
然后您将像这样创建一个实例:
tracker = ConditionTracker()
然后像这样使用它:
value = tracker.test_trigger(row)
# value is now 1, -1 or 0