Reputation: 22064
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)
the result is:
True
True
None
not what I expected:
True
True
False
any idea?
Upvotes: 11
Views: 80904
Reputation: 833
Instead of returning True or False right away, you could try storing result in a boolean variable and then return that variable at the end. For example:
def sum(a,b):
bool result
if sum([a, b]) % 10 == 0:
bool=True
else:
bool=False
return bool
Upvotes: 0
Reputation: 101072
Your code
def sum10(a, b):
if sum([a, b]) % 10 == 0: return True; return False
is equivalent to
def sum10(a, b):
if sum([a, b]) % 10 == 0:
return True; return False
so return False
is never evaluated.
Some (of the probably endless) alternatives:
if sum([a, b]) % 10 == 0:
return True
return False
or
return sum([a, b]) % 10 == 0
or
return True if sum([a, b]) % 10 == 0 else False
or
return False if (a+b) % 10 else True
or (the most readable IMHO)
return not (a + b) % 10
Upvotes: 31
Reputation: 33545
This is what you want.
def sum10(a, b):
return sum([a, b]) % 10 == 0
Also the ternary If
in Python works like this
<True Statment> if <Conditional Expression> else <False Statement>
eg
True if sum([a,b]) % 10 == 0 else False
Might i also recommend using the plus operator?
True if (a+b) % 10 == 0 else False
Upvotes: 10
Reputation: 895
I think that the return False
is never executed due to it is into the if, not outside it.
So, when you take a true in the if condition, you are executing return True
, but never the second statement.
Upvotes: 1
Reputation: 21863
If you want to have if-else one liners, they should be written like this:
return True if sum([a, b]) % 10 == 0 else False
Note the absence of two points in that one liner.
Upvotes: 3