【发布时间】:2022-01-19 19:15:17
【问题描述】:
我是 python 新手,我有一个无法解决的难题。解释起来有点复杂,所以请耐心等待! 我希望用户可以选择 A & B 的逻辑。(我在 pyqt5 中构建了这个,带有小规模的复选框) 所以A&B的逻辑可能性如下:
flag = ""
if A:
flag = "1"
elif B:
flag = "2"
elif A and B:
flag = "3"
elif A or B:
flag = "4"
else:
flag = ""
现在对这两个变量进行编码似乎很简单。但我只添加了一个选项 - C:
flag = ""
if A:
flag = "1"
elif B:
flag = "2"
elif A and B:
flag = "3"
elif A or B:
flag = "4"
elif C:
flag = "5"
elif A and C:
flag = "6"
elif A or C:
flag = "7"
elif B and C:
flag = "8"
elif B or C:
flag = "9"
elif A and B and C:
flag = "10"
elif A or B or C:
flag = "11"
elif A and B or C:
flag = "12"
elif A or B and C:
flag = "13"
else:
flag = "etc etc"
现在我添加 D、E、F、G。我不知道可能性是否真的是指数级的,但它们是巨大的。 现在我不是第一个遇到这个问题的人,必须有一个像我这样的新手不知道的解决方案。例如,PM 工具中有许多工作流构建器,如 Jira、智能工作表、Salesforce,最终用户可以几乎无限地定义触发器和操作的逻辑。 但是如果没有预先定义最终用户可能选择的所有可能性,我一生都无法弄清楚如何在代码中做到这一点 希望这有点道理?非常感谢专家如何解决此特定问题的任何帮助或建议。
【问题讨论】:
-
and和or案例永远不会运行,因为A或B(或两者)都需要为True,以便各自的分支 (if A:, 或elif B:) 会被取而代之。 -
当您同时拥有
A和B案例时,拥有A or B案例是没有意义的。如果其中任何一个为真,则标志应该获取该特定值,它无法获取A or B值。 -
不确定,但也许您可以使用这些值作为位创建一个整数值。例如,
A = True, B=False, C=True = 5因为5 = 0b101。 -
正如其他人已经评论的那样,测试的顺序是有意义的,因此您的逻辑似乎有缺陷。使用 'n' 标志,您有 '2**n' 案例,@JohnnyMopp 的解决方案适用。