I was going through ways of shortening a normal if else statement.
One of the formats I found was to change this:
if x == 1:
print("Yes")
else:
print("No")
Into this:
print("Yes") if x == 1 else print("No")
Is the code above considered pythonic? Otherwise, what would be a pythonic way of shortening the if else statement?
I also tried using return instead of print. I tried
return total if x == 1 else return half
which resulted in an unreachable statement for the 2nd return. Is there a way of doing it that i'm not able to see?
Finally, I tried to use an else if instead of an else with the code, but that wouldn't work either.
print(total) if x == 1 else print(half) if x == 2
The code above probably looks stupid logic-wise. Am I missing out on the proper format, or is it really not possible to do return and else if with this format?
The form
print("Yes") if x == 1 else print("No")
is not generally considered Pythonic, since ... if ... else ... is an expression and you're throwing away the value that the expression produces (always None). You can use print("Yes" if x == 1 else "No") which is Pythonic since the value of the conditional expression is used as the argument to print.
The form
return total if x == 1 else return half
cannot work since return is a statement and must occur at the beginning of a logical line. Instead, use
return total if x == 1 else half
(which is parsed the same as return (total if x == 1 else half)).
The code
print(total) if x == 1 else print(half) if x == 2
wouldn't work either - the conditional expression is ... if ... else ..., i.e. each if must be paired with an else that follows it; your second if is missing the else clause; you could use
print(total) if x == 1 else print(half) if x == 2 else print('something else')
Again, this wouldn't be considered very pythonic; but you could use
print(total if x == 1 else half if x == 2 else 'something else')
not that it would be much better either.
Finally, if you're participating in a code golf
print("Yes" if x == 1 else "No")
can be shortened to
print(('No', 'Yes')[x == 1])
by using the fact that True == 1 and False == 0 and using these to index a tuple.
Have you tried to use the ternary in the print itself ?
print("Yes" if x == 1 else "No")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With