【问题标题】:How do I run a conditional statement "only once" and every time it changes?如何“仅”运行条件语句并且每次更改时?
【发布时间】:2022-01-25 21:09:16
【问题描述】:

我可能会问一个简单的问题。我有一个每分钟运行的 python 程序。但是我希望代码块仅在条件更改后才运行?我的代码如下所示:

# def shortIndicator():
a = int(indicate_5min.value5)
b = int(indicate_10min.value10)
c = int(indicate_15min.value15)
if a + b + c == 3:
  print("Trade posible!")
else:
  print("Trade NOT posible!")

# This lets the processor work more than it should.
"""run_once = 0  # This lets the processor work more than it should.
while 1:
    if run_once == 0:
        shortIndicator()
        run_once = 1"""

我在没有使用函数的情况下运行它。但是我每分钟都会得到一个输出。我尝试将它作为一个函数运行,当我启用它运行的注释代码时,处理使用量也更多。如果有更聪明的方法吗?

【问题讨论】:

  • 不太清楚你的意思。如果您的意思是仅在结果更改时打印,请添加另一个变量来记住先前的结果并在条件中检查它。
  • 是的,我正在尝试在结果更改时打印。否则我每 60 秒得到一个结果。像这样:交易不可能!交易不可能!交易不可能!交易可行!交易可行!交易可行!可以交易!

标签: python while-loop


【解决方案1】:

确实不太清楚你的意思,但是如果你只想在结果改变时打印一个通知,添加另一个变量来记住之前的结果。

def shortIndicator():
    return indicate_5min.value5 and indicate_10min.value10 and indicate_15min.value15

previous = None
while True:
    indicator = shortIndicator()
    if previous is None or indicator != previous:
        if indicator:
            print("Trade possible!")
        else:
             print("Trade NOT possible!")
    previous = indicator
    # take a break so as not to query too often
    time.sleep(60)

provious 初始化为None 会创建第三种状态,该状态仅在while 循环第一次执行时为真;根据定义,结果不能与前一个结果相同,因为第一次没有真正的前一个结果。

也许还注意到函数内部的布尔简写,它比将每个值转换为 int 并检查它们的总和更简单、更惯用。

我猜time.sleep 是您正在寻找的以减少重复运行此代码的负载,尽管这部分问题仍然不清楚。

最后,检查possible的拼写。

【讨论】:

  • 感谢三人组。这似乎运行。我会让它在交易所运行以确保。
  • 这行有一些我不明白的地方:返回指示_5min.value5 和指示_10min.value10 和指示_15min.value15 所有 3 个这些值必须等于“3”。如果其中一个是“0”,那么它必须运行 else 语句: print("Trade NOT possible!")
  • 您的代码似乎假设每个返回值都是 0 或 1,并将它们的总和相加。如果您想检查 其中一个 是否为真,请使用 or 而不是 and
  • 哦。现在我明白它的作用了。我试图打印“return”语句,因为其中一个返回值为 0 并且它仍然显示 Trade Possible。但是如果所有 3 个指标都返回 0 是否也不会给出 True 语句?
  • 好的。我试过了。我什至将 "if indicator:" 行更改为 if indicator == 1: 。它似乎并没有脱离循环。 (修正了可能的拼写)
【解决方案2】:

如果我理解正确,您可以将以前的输出保存到文件中,然后在程序开始时读取它,并且只有在以前的输出不同时才打印输出。

【讨论】:

  • 不幸的是,必须进行 1 分钟更新才能从服务器获取数据。该文件每 60 秒调用一次以检查是否有更改。但这使它每 60 秒排成一行。
  • 我不太明白。您可以在再次写入文件之前删除文件的内容。
  • 我已经有很多 csv 的功能,但我更愿意在我在那里的时候运行它,因为它也表明机器人正在工作。
  • 您确实说您每分钟运行一次程序,这似乎表明您正在寻找一种在运行之间保存状态的方法。你们的 cmets 再次给我们留下了更多的猜测,而不是他们澄清的任何事情。
  • 是的。对不起,如果我不清楚。英语并不是我真正的第一语言,该程序每分钟运行一次,我每分钟都会得到一个打印语句。大多数情况下,它们是相同的声明。如果可行,我会将打印语句替换为其他代码。说并发送电子邮件或电报消息。这是我正在寻找的一种 On-Change 效果。
猜你喜欢
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多