Python Forum

Full Version: How to write switch case statement in Python
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I am new to programming and need help writing the below piece of code in switch-case.
Please HELP.

Thanks in Advance

def pick_day():
'''Inputs day of week and returns the specified day.
'''
day_of_week = input('\nInput Day of the Week as Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, or Sunday?\n').title()
if day_of_week == 'Monday':
return 0
elif day_of_week == 'Tuesday':
return 1
elif day_of_week == 'Wednesday':
return 2
elif day_of_week == 'Thursday':
return 3
elif day_of_week == 'Friday':
return 4
elif day_of_week == 'Saturday':
return 5
elif day_of_week == 'Sunday':
return 6
else:
print("\nInvalid Entry, Please try again")
return pick_day()
There is no case statement in Python. We have good data structures.
You can use for example a dict:

def get_weekday_number(day):
    """
    The function returns the number of weekday for given day.
    Lower case and upper case are allowed.
    """
    days = {
        'Friday': 4,
        'Monday': 0,
        'Saturday': 5,
        'Sunday': 6,
        'Thursday': 3,
        'Tuesday': 1,
        'Wednesday': 2,
        }
    return days[day.title()]
Next time post your code in Python code tags, and if you get errors post full error traceback message in error tags, you can find help here.

What is the problem you are facing with the code?
A common solution for this is to use a dictionary in place of switch-case.
j.crater

How do I use dictionary to get the same result.

Thanks for your help.
(May-26-2018, 01:53 PM)pyhelp Wrote: [ -> ]How do I use dictionary to get the same result.
You use code bye @DeaD_EyE,and add your input line as a argument to the function.
def get_weekday_number(day):
    """
    The function returns the number of weekday for given day.
    Lower case and upper case are allowed.
    """
    days = {
        'Friday': 4,
        'Monday': 0,
        'Saturday': 5,
        'Sunday': 6,
        'Thursday': 3,
        'Tuesday': 1,
        'Wednesday': 2,
        }
    return days.get(day.title(), 'Day not found')

day_of_week = input('\nInput Day of the Week as Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, or Sunday?\n')
print(get_weekday_number(day_of_week))
Slightly modified with get() method,
the can catch error in input and return Day not found.
Thank You for your HELP,

The below code works fine but how to handle the error, if a user inputs any month or type anything other than the months listed below.

def pick_month():
        '''returns number for the month given
        '''
        input_month = input('\nInput Month as January, February, March, April, May, or June?\n').title()
        month_of_year = {
            'January': '01',
            'February': '02',
            'March': '03',
            'April': '04',
            'May': '05',
            'June': '06'
            }
        return month_of_year.get(input_month.title(), 'Month not found')
(May-28-2018, 06:41 PM)pyhelp Wrote: [ -> ]The below code works fine but how to handle the error, if a user inputs any month or type anything other than the months listed below.
You use the same get() method as i showed in previous post you,so it handles error.
A run of your code:
>>> pick_month()

Input Month as January, February, March, April, May, or June?
 April
04

Input Month as January, February, March, April, May, or June?
 car
Month not found

>>> pick_month()

Input Month as January, February, March, April, May, or June?
 12345
Month not found

>>> pick_month()

Input Month as January, February, March, April, May, or June?
 June
06
There is one more elegant way to achieve the switch-case effect in Python, i.e., using the OOPs concept. You can write a switch class with the following pattern.

1- The switch class shall have a switcher function accepting the choice as an argument.
2- This function will call the getattr() method to map options to functions handling individual cases.
3- The getattr() also takes a default function argument which gets returned when there is no other matching function.
4- You also need to define handlers for every case.

A complete example is given here - Python switch-case using classes and dictionary.
(Nov-11-2018, 07:02 AM)MeenakshiAgarwal Wrote: [ -> ]There is one more elegant way to achieve the switch-case effect in Python, i.e., using the OOPs concept.
Frankly, both examples are overcomplicated implementation for something that can be written in few lines.
Quote:Frankly, both examples are overcomplicated
Yes, a simple list will do. This omits the input portion of the code as that is not part of the "case statement".
day_of_week=["Sunday". "Monday", "Tuesday", "Wednesday",
                     "Thursday", "Friday", "Saturday"]
if input_day in day_of_week:
    return day_of_week.index(input_day)
else:
    print("\nInvalid Entry, Please try again")