此代码将成为程序的一部分,该程序将检查数字是否为素数。我知道它不是特别优雅,但我想让它只是为了体验而工作。我认为函数失败了,因为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)
答案 0 :(得分:5)
list
是变量的错误名称。它掩盖了内置的list
。
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:
没有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."
答案 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 mylist
和if 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)