2016-02-25 25 views
-1
def has23(nums): 
    if (2 or 3) in nums: 
     return True 
    else: 
     return False 

结果出来适合多数部分。 但has23[3,3][3,9]它是未来假的。 我有“或”在代码中的说法,应该不是意味着它会寻找2和3个和n如果发现任何的它会给真实的。 请告诉我,什么概念,我在这里失踪?我正在学习python。我正在寻求这个计划的见解。给定一个int数组长度为2,返回真,如果它含有2或3

+3

这是运营商的优先级,你错过了。首先执行'(2或3)',结果是'2',而不是检查'if 2 in nums'。 –

+1

见https://stackoverflow.com/questions/15581837/return-true-if-array-contains-a-2-or-a-3太 – Linkid

回答

1

2 or 3计算结果为2,所以你检查是否2nums。相反,说if 2 in nums or 3 in nums:。你并不真正需要的if声明,但是,因为你可以返回表达式的结果:

return 2 in nums or 3 in nums 
1

您可以明确地检查每一个元素是否是2或3:

def has23(nums): 
    for i in nums: 
     if i in (2, 3): 
      return True 
    return False 

另一种方法是使用发电机:

def has23(nums): 
    return any(i in (2,3) for i in nums) 
+0

这是不是很简明'如果2 NUMS或3 in nums'。 – zondo

+0

如果每个人都发布相同的答案,那会很无聊。这不是唯一的方法。 ;-) – MSeifert

+0

@ zondo-,但我包括替代包括''any''和''generator'' :-) – MSeifert

4
def has23(nums): 
    return (2 in nums) or (3 in nums) 

表达(2 or 3)返回值2,因此列表[3,3]不会通过。

0

你应该这样做,相反,它会做你想要的逻辑。

def has23(nums): 
    if 2 in nums or 3 in nums: 
      return True 
    else: 
      return False 
+2

不要编写一个测试来返回相同的结果(一个布尔值) – Linkid

相关问题