【问题标题】:Python way around 128 if statementsPython 大约 128 个 if 语句
【发布时间】:2020-03-25 06:01:56
【问题描述】:

我有一个我正在开发的 tkinter 应用程序,它有一个按钮,当按下它时会触发一个功能。我还有大约 7 个复选框,选中时会将其自己的变量从 0 更改为 1。

在函数中,我有一堆 if 语句,它们遍历复选框的每个组合并执行和操作。问题是因为复选框可以有两种状态,关闭(0)和打开(1),有 7 个复选框 - 如果我们做 2 的 7 次方来计算每个组合,那就是 128 个 if 语句我需要写出去。

我还考虑过编写 7 个 if 语句来检查每个复选框的每个状态,然后移动到下一个,但是因为我需要遍历 2 个列表并执行不同的操作,所以很难记录每个阶段发生的事情没有重复的日志或我需要的细节。

有更好的方法吗?

任何帮助都会很棒,谢谢!

if 语句之一的示例

if 'PId' in df and 'CId' in df:
        for i, w in zip(df['CId'], df['PId']):
            if varsd.get() == 1 and varad.get() == 1 and vared.get() == 0 
            and varcn.get() == 0
            and varpn.get() == 0 and varak.get() == 0 and varab.get() == 0:

                for i, b, z in zip(df['CId'], df['PId'], df['NewStartDate']):
                cd['startDate'] = re.sub('^[0-9]{4}-[0-9]{2}-[0-9]{2}', str(z),
                cd['startDate'])

                pd['pricingSchedule']['startDate'] = re.sub('^[0-9]{4}-[0-9]{2}-[0-9]{2}',
                cd['startDate'], pd['pricingSchedule']['startDate'])
                Few more bits

            elif varsd.get() == 1 and varad.get() == 0 and vared.get() == 0 and varcn.get() == 0
            and varpn.get() == 0 and varak.get() == 0 and varab.get() == 0:

               for i, b, z in zip(df['CId'], df['PId'], df['NewStartDate']):
               cd['startDate'] = re.sub('^[0-9]{4}-[0-9]{2}-[0-9]{2}', str(z),
               cd['startDate'])
               Few more bits

【问题讨论】:

  • 从您在这里写的内容来看,很难判断您到底在尝试什么。如果您要添加一段已有的代码,我们可以更好地帮助您。
  • 您可能需要举例说明if 块内发生的情况,这样更容易帮助确定是否有简化方法
  • 您是想根据值做 128 种不同的事情,还是某些复选框有意义?了解复选框的作用会非常有帮助,因为您当前的代码什么也没告诉我们。去写一个最小的可验证完整示例,完成后回来
  • 因此,如果您有一些涉及特定复选框的逻辑,这些逻辑在确定 if 块中发生的内容时是否一致,仍然不完全清楚。例如拥有varad.get() == 1 是否总是意味着您执行pricingSchedule 位?我可能会立即做的一件事是在顶部创建元组,例如 cboxes = (varsd.get(), varad.get(), vared.get(), varcn.get(), varpn.get(), varak.get(), varab.get()),然后在任何 if 语句中使用它,如下所示:if cboxes == (1,1,0,0,0,0,0)
  • 听起来你只需要 7 个连续的 if 语句,如果选择了对应的复选框,则每个 if 语句都会运行

标签: python python-3.x dataframe tkinter checkbox


【解决方案1】:

为什么不用if-else ladder 而不是nested if 语句? 喜欢

if a:
  if b:
    if c:
      ...
    else:
      ... 
  else:
    ... 
else:
  ... 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多