【问题标题】:End user input logic最终用户输入逻辑
【发布时间】: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,最终用户可以几乎无限地定义触发器和操作的逻辑。 但是如果没有预先定义最终用户可能选择的所有可能性,我一生都无法弄清楚如何在代码中做到这一点 希望这有点道理?非常感谢专家如何解决此特定问题的任何帮助或建议。

【问题讨论】:

  • andor 案例永远不会运行,因为 AB(或两者)都需要为 True,以便各自的分支 (if A: , 或 elif B:) 会被取而代之。
  • 当您同时拥有 AB 案例时,拥有 A or B 案例是没有意义的。如果其中任何一个为真,则标志应该获取该特定值,它无法获取A or B 值。
  • 不确定,但也许您可以使用这些值作为位创建一个整数值。例如,A = True, B=False, C=True = 5 因为5 = 0b101
  • 正如其他人已经评论的那样,测试的顺序是有意义的,因此您的逻辑似乎有缺陷。使用 'n' 标志,您有 '2**n' 案例,@JohnnyMopp 的解决方案适用。

标签: python logic


【解决方案1】:

if/elif 序列中的条件按顺序进行测试,因此需要首先测试限制性更强的情况。例如。 A 和 B 都为真,if A: 将成功,因此该案例将被执行,您将永远无法到达 if A and B:

if A and B:
    flag = "3"
elif A:
    flag = "1"
elif B:
    flag = "2"
...

此外,当您还具有专门针对 AB 中的每一个的条件时,同时具有 elif A or B: 条件是没有意义的,因为该标志无法同时获取这两个值。

【讨论】:

  • 好吧,我怀疑我的观点在翻译中丢失了。逻辑语法不是我的查询。经过更多研究后,我相信通用术语称为“查询构建器”或“逻辑构建器”,最终用户对“AND”“OR”逻辑有一些基本知识,他们可以将后端的函数链接在一起使用 GUI 的任何组合,无需开发人员关心,所有可能的组合。我遇到的问题是,我知道如何做到这一点的唯一方法是“预填充”最终用户可能选择的所有可能组合。含义代码可能是数百万行
  • 这通常是通过将用户输入转换为与操作对应的嵌套字典和列表,然后使用执行相应逻辑计算的递归函数来完成的。
猜你喜欢
  • 2018-01-02
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
相关资源
最近更新 更多