【问题标题】:Python logic assitance branching from main algorithm [closed]Python逻辑辅助从主要算法分支[关闭]
【发布时间】:2013-04-12 19:07:56
【问题描述】:

我在使用一些 Python 代码时遇到了一些问题,这取决于我的逻辑。我有一个通过 UI 中的按钮单击调用的主函数,在此函数中取决于按钮单击的结果,将执行几个语句,我遇到的问题是分支到函数,然后返回到这一点执行下一个函数调用。这是我的代码:

                return #This is where I want this function to terminate and then return to the function above to execute the nextFunctionCall() function.

不胜感激,谢谢。我在这里遇到的问题是每个函数都运行一次,第一个函数应该执行 30 次,然后执行 else 子句,前提是 elif 语句中更改的状态没有发生。

【问题讨论】:

  • 每次运行该函数时period的值都是一样的。你的 "period +=1: 语句没用。
  • lambda 调用会调用通过新值传递的函数,在这种情况下是周期,因此 +=1 确实有效。
  • global... 开局不好:-(
  • 什么类型的对象是根?真的需要提供睡眠回调吗?
  • 是的,否则,GUI 将在指定的时间内进入睡眠状态,root 在 GUI 内安排任务。

标签: python algorithm python-3.x tkinter logic


【解决方案1】:

如果你想在调用alarmActive 30 次后执行nextFunctionCall(root),你不需要让自己复杂化。只需将其从 enableCode 中删除并在 else 块中调用它:

def alarmActive(root, period=0):
    # ...
    else:
        nextFunctionCall(root)

但是,您可以减少很多冗余代码。例如,如果您只想将 Flash 设置为 True 或 False,反之亦然,并根据值打印 "On""Off",这样更短更直接:

def alarmActive(root, period=0):
    global Flash
    if period <30 and AlarmStatus == "On":
        Flash = not Flash
        print("On" if Flash else "Off")
        period += 1
        print(period)
        root.after(500, lambda: alarmActive(root, period))
    else:
        if (AlarmStatus == "Off"):
            print("Alarm has been disabled before activation")
        nextFunctionCall(root)

【讨论】:

  • 是的,这就是我正在做的,但是 nextFunctionCall 类似于上面的 alarmActive 函数并且有很多执行路径,它最终会回到以前的函数等
  • 您也可以发布nextFunctionCall 功能吗?如果它类似于alarmActive,那么你只需要重构这两个函数,而不用担心如何调用一个接一个。
  • 正常的人为错误是我在子函数中重新安排第一个函数的问题,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 2021-11-12
  • 1970-01-01
相关资源
最近更新 更多