Neverland
Neverland

Reputation: 775

How to make if-elif-else statement in python more space-saving?

I have a lot of if-elif-else statements in my code


if message == '0' or message == '3' or message == '5' or message == '7':
   ...
elif message == '1' or message == '2' or message == '4' or message == '6' or message == '8':
   ...
else:
   ...

Is it possible to format this in a more space-saving way?

I tried it this way:


if message == '0' or '3' or '5' or '7':
   ...
elif message == '1' or '2' or '4' or '6' or '8':
   ...
else:
   ...

But without success.

Upvotes: 4

Views: 1521

Answers (2)

Tim Pietzcker
Tim Pietzcker

Reputation: 336228

if message in ("0", "3", "5", "7"):
    ...
elif message in ...

would be one way.

If message is always one character long, you could also use

if message in "0357":
    ....

But this would also be true if message == "35", therefore the warning.


(EDIT)

A short explanation why your approach wasn't working:

if message == '0' or '3' or '5' or '7':

is interpreted as

if (message == '0') or '3' or '5' or '7':

and therefore always succeeds because '3' evaluates to True.

Upvotes: 6

mgautierfr
mgautierfr

Reputation: 739

if message in '0357' :
    ...
elif message in '12468' :
    ...
else:
    ...

In a more global way :

if value in [elem0, elem1, ... ]:
    ...

Upvotes: 1

Related Questions