10
def sum10(a, b):
    if sum([a, b]) % 10 == 0: return True; return False

print sum10(7, 3)
print sum10(-13, -17)
print sum10(3, 8)

结果是:

True
True
None

不是我所期望的:

True
True
False

任何想法?

4

6 回答 6

29

你的代码

def sum10(a, b):
    if sum([a, b]) % 10 == 0: return True; return False

相当于

def sum10(a, b):
    if sum([a, b]) % 10 == 0: 
        return True; return False

所以return False永远不会被评估。


一些(可能是无穷无尽的)替代方案:

    if sum([a, b]) % 10 == 0: 
        return True
    return False

或者

    return sum([a, b]) % 10 == 0

或者

    return True if sum([a, b]) % 10 == 0 else False

或者

    return False if (a+b) % 10 else True

或(最易读的恕我直言)

    return not (a + b) % 10
于 2012-10-30T07:56:22.660 回答
10

这就是你想要的。

def sum10(a, b):
    return sum([a, b]) % 10 == 0

Python中的三元If也是这样的

<True Statment> if <Conditional Expression> else <False Statement>

例如

True if sum([a,b]) % 10 == 0 else False

我还可以推荐使用加号运算符吗?

True if (a+b) % 10 == 0 else False
于 2012-10-30T07:56:11.827 回答
2

如果你想有 if-else 一个衬里,它们应该这样写:

return True if sum([a, b]) % 10 == 0 else False

请注意,那条衬里中没有两点。

于 2012-10-30T07:58:27.160 回答
1

我认为return False永远不会执行,因为它在 if 中,而不是在 if 之外。

因此,当您在 if 条件中取 true 时,您正在执行return True,但绝不是第二条语句。

于 2012-10-30T07:59:14.480 回答
1
def sum10(a, b):
    return sum([a, b])%10 == 0
于 2016-06-12T15:55:26.327 回答
0

您可以尝试将结果存储在布尔变量中,然后在最后返回该变量,而不是立即返回 True 或 False。例如:

def sum(a,b):
  bool result
  if sum([a, b]) % 10 == 0:
    bool=True
  else:
    bool=False
  return bool 
于 2021-01-21T03:48:32.153 回答