布尔检查不起作用

时间:2012-07-24 11:08:00

标签: python list python-2.7

此代码将成为程序的一部分,该程序将检查数字是否为素数。我知道它不是特别优雅,但我想让它只是为了体验而工作。我认为函数失败了,因为if / elif上的逻辑是错误的,当我运行这段代码时,似乎只是直接使用else子句。这是一个语法问题,还是我不允许在if子句中进行逻辑检查?

list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

def find_prime(list, n):
    if n in list == False:
        list.append(n)
        print "I'ts in there now."
    elif n in list == True:
        print "It's in there already."
    else:
        print "Error"

find_prime(list, 3)
find_prime(list, 51)

4 个答案:

答案 0 :(得分:5)

  1. list是变量的错误名称。它掩盖了内置的list

  2. if n in list == True:没有做你所做的事情:1 in [0, 1] == True返回False(因为正如@Duncan所说,1 in [0,1] == True1 in [0,1] and [0,1] == True的简写})。使用if n in li:if n not in li:

  3. 没有Error的理由,因为元素在列表中或者不在列表中。还有其他的是编程错误。

  4. 所以你的代码看起来像这样:

    li = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
    
    def find_prime(li, n):
        if n in li:
            print "It's in there already."
        else:
            li.append(n)
            print "It's in there now."
    

答案 1 :(得分:2)

尝试此代码而不是测试True / False。另请参阅上面关于使用list作为变量名称的评论(不好主意,因为Python使用了该标识符)。

mylist = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

def find_prime(mylist, n):
    if not n in mylist:
        mylist.append(n)
        print "I'ts in there now."
    else: # n in mylist:  has to be the case
        print "It's in there already."

您不需要原始的最后else,您的选择是二进制,数字将在列表中,或者不会。

答案 2 :(得分:2)

请勿拨打您的列表list。称之为mylist或其他。

使用if not n in mylistif n in mylist

答案 3 :(得分:2)

由于值要么在列表中,要么不在我的if / else逻辑中检查三个选项。

list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

def find_prime(list, n):
   if n in list:
      print "It's in there already."
   else:
      list.append(n)
      print "It's in there now."

find_prime(list,3)
find_prime(list,53)