【问题标题】:Erro: python boolean [duplicate]错误:python boolean [重复]
【发布时间】:2022-01-10 13:30:06
【问题描述】:
def INSERTION_SORT(A):
    for j in range(len(A)-1):
        key = A[j]
        i = j+1
        print("***********")
        print(j >= 0)
        print(key > A[i])
        print(j >= 0 & key > A[i])

A = [5,2,4,6,1,3]

INSERTION_SORT(A)

运行结果:

***********
True
True
False
***********
True
False
False
***********
True
False
False
***********
True
True
False
***********
True
False
False
[Finished in 52ms]

为什么都是真的,结果是假的

【问题讨论】:

  • & 看起来很可疑。
  • 只有j >= 0 是“所有真实的”,这是因为对于for j in range(len(A)-1),所有j >= 0。你的问题到底是什么?
  • & 是位运算符,也许你的意思是and
  • “为什么都是真的,结果是假的”是什么意思?这段代码中没有任何结果。我不清楚它应该做什么,看看INSERTION_SORT 没有插入任何东西。
  • 特别注意j >= 0 & key > A[i]不是(j >= 0) & (key > A[i])而是j >= (0 & key) > A[i],即j >= 0 > A[i]。对于所有值,第一次比较为真,第二次比较为假,因此整个链式比较为假。

标签: python


【解决方案1】:

您应该使用and 关键字而不是&

  • and:这是合乎逻辑的和
  • &:这是位运算符

【讨论】:

  • 请注意,True & TrueTrue。问题不在于一个“逻辑”工作而另一个“按位”工作。
  • 真正的问题是不同的运算符优先级。 and 在比较之后进行评估,而 & 在比较之前进行评估。
  • 所以如果第一个条件为假,如果我使用&,则不会检查另一个条件?
  • 不,这是懒惰的评估。请参阅我对这个问题的评论。使用&,没有“两个条件”,而只是一个单链比较。
  • 嗯,好的。明白谢谢
【解决方案2】:

您在print(j >= 0 & key > A[i]) 行中使用了位运算符&。相反,您可以使用 and 逻辑和运算符。 顺便说一句,您的代码还没有进行任何排序操作。

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2013-04-02
    相关资源
    最近更新 更多