1

此代码将成为检查数字是否为素数的程序的一部分。我知道它不是特别优雅,但我想让它只是为了体验而工作。我认为函数失败是因为 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

4 回答 4

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

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

  3. 没有理由Error,因为一个元素在列表中或不在列表中。其他任何事情都是编程错误。

因此,您的代码可能如下所示:

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."
于 2012-07-24T11:10:48.000 回答
2

试试这个代码,而不是测试真/假。另请参阅我上面关于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."

你不需要原来的 last else,你的选择是二进制的,要么数字在列表中,要么不在。

于 2012-07-24T11:12:03.660 回答
2

不要打电话给你的名单list。叫它 mylist或者别的什么。

使用if not n in mylistif n in mylist

于 2012-07-24T11:12:34.693 回答
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)
于 2012-07-24T11:14:18.877 回答