我試圖在我的 if else 陳述句上設定一個標志。我希望它是 1,如果它跨越了上一個信號,但只有在前一個信號之后的第一個交叉,如果它跨越下一個信號(-1 在第一個交叉下方),我希望它是 1。否則我希望它是 0。
所以我的邏輯設定了一個標志。然后在第一個 sig cross (cond1) 更改標志狀態......所以它不會再次被觸發......但現在可以在條件 2 下觸發信號交叉,否則它應該為零......但它不起作用.
| 照原樣 | 我多么想要 |
|---|---|
| 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
uj5u.com熱心網友回復:
您有一些未作為引數傳遞給函式的狀態。
解決這個問題的一種方法是創建一個類來跟蹤該狀態:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/369991.html
下一篇:C 中if的奇怪行為
