【问题标题】:check for elements, if atleast 3 matches, then True检查元素,至少 3 个匹配项,然后为 True
【发布时间】:2019-11-18 09:46:18
【问题描述】:

我正在处理一个问题,我需要从用户那里获得 4 个输入,如果至少 3 个匹配,那么输出为 True。唯一的问题是我只能使用逻辑运算符(or、and、not、nor、nand、xor 等)。如果 4 打开,我做到了,但不知道如何在没有复杂代码的情况下为 3 做。也可以在没有和如果的情况下完成吗?谢谢。

tomb = []
for i in range(4):
    all = int(input("A kapcsoló állapota (1-fel, 0-le): "))
    tomb.append(all)
if tomb[0] and tomb[1] and tomb[2] and tomb[3]:
    print("Ég a lámpa")
else:
    print("Nem ég a lámpa")

【问题讨论】:

  • “我只能使用逻辑运算符”——这究竟是什么意思,为什么……?
  • 一般逻辑非常简单:遍历您的输入并计算有多少“匹配”。这可以通过多种方式实现:使用循环并递增 int,过滤列表并检查其长度……
  • "如果至少 3 个匹配项" – 它们必须匹配什么?
  • ("Nem ég a lámpa", "Ég a lámpa")[sum(bool(value) for value in tomb) >= 3]。如果值只能是01,您可以使用("Nem ég a lámpa", "Ég a lámpa")[sum(tomb) >= 3]
  • …将输入转换为整数并求和…

标签: python python-3.x operators


【解决方案1】:

您可以计算答案并应用您想要的任何匹配阈值:

default_msg = 'Ég a lámpa'
threshold = 3
print(default_msg) if sum(tomb) >= threshold else print('Nem' + default_msg.lower())

【讨论】:

    【解决方案2】:

    使用all 函数。如果所有值都为真,all 函数将返回真。你不必做tome[0] and tome[1] ...

    如果tome[0] or tome[1] ... 中的任何一个为真,any 也会返回真。

    for i in range(3):
        ans = all(tome[:i] + tome[i+1:])
    
    print(any(ans))
    

    这段代码的作用是遍历输入中的所有 3 个组合,并找到所有真正的三元组并将其放入 ans

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 2022-01-21
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 2016-04-07
      • 2019-05-24
      相关资源
      最近更新 更多