Home > OS >  Is there a way to shorten if-elif-else statement in python?
Is there a way to shorten if-elif-else statement in python?

Time:09-17

I am just started to learn python and I did some code with an if statement and I think there are too many elif statements in the code so I was wondering if there is any way I can shorten the code.

from random import *
month = randrange(1, 13)
if month == 1:
    print("January")
elif month == 2:
    print("February")
elif month == 3:
    print("March")
elif month == 4:
    print("April")
elif month == 5:
    print("May")
elif month == 6:
    print("June")
elif month == 7:
    print("July")
elif month == 8:
    print("August")
elif month == 9:
   print("September")
elif month == 10:
   print("October")
elif month == 11:
    print("November")
else:
    print("December")

CodePudding user response:

You could put the months in a list and access it via a random index:

from random import *
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'Augsut', 'September', 'October', 'November', 'December']
month = randrange(12)
return months[month]

CodePudding user response:

Use a lookup dictionary instead:

month_lu = { 1:"January", 2:"February", 3:"March" ) # etc

m = randrange(1, 3)  # got 2
print( month_lu[m] )

Output:

February

Or use a random from a iteratble tuple / list of months names to begin with:

month = random.choice( ( "Jan","Feb","Mar","Apr") ) # etc

You choose the month directly, without first drawing a number.


If you are really lazy, use the calendar module to provide names:

import random
import calendar

months = list(calendar.month_name)

print(random.choice(months))

Output:

October

CodePudding user response:

Wait until Python 3.10, where match-case statements are being introduced.

Here's an example :

def sign_as_string(x:int)->str:
    """Returns the sign of x as a string. 
    A quick example that implements 3.10 syntax"""
    match x:
        case 0 :
            return "null"
        case y if y > 0:
            return "pos"
        case _ :
            return "neg"

print(sign_as_sign( 1 )) # pos
print(sign_as_sign(-1 )) # neg
print(sign_as_sign( 0 )) # null

CodePudding user response:

For this case you could create a dictionary with the key being the number and value as the text. There is no built in switch case in python if that is what you are looking for

  • Related