首页 > 解决方案 > Python 大约 128 个 if 语句

问题描述

我有一个我正在处理的 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

标签: pythonpython-3.xdataframetkintercheckbox

解决方案


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

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

推荐阅读