Python Switch-Case: 3 smarte løsninger!

Alternativer for å simulere en switch-case i Python

Ønsker du å implementere en switch-case-lignende struktur i Python? Denne artikkelen viser deg ulike måter for å etterligne switch-case funksjonalitet.

Dersom du har erfaring med programmering i språk som C eller JavaScript, kjenner du sannsynligvis til switch-case-setningen. Men hvorfor er en slik konstruksjon nyttig?

Tenk deg at du har flere ulike handlinger, eller kodeblokker, og at valget av hvilken handling som skal utføres avhenger av verdien til en variabel eller et uttrykk.

Noen eksempler er:

  • Tildeling av karakterer basert på elevenes poengsum.
  • Valg av strengmanipuleringsmetoder basert på brukerens valg.
  • Utførelse av ulike regneoperasjoner på to tall, avhengig av brukerens input.

En switch-case-konstruksjon gir en effektiv måte å implementere slik logikk på, når du må velge én av mange mulige handlinger basert på en variabel eller et uttrykk sin verdi.

Python har ikke en innebygd switch-case, men det finnes flere alternative metoder for å oppnå lignende resultater. Vi skal se nærmere på disse i denne artikkelen.

Simulering av switch-case i Python

La oss se hvordan vi kan simulere switch-case-funksjonalitet i Python gjennom et eksempel. Vi skal skrive et program som gjør følgende:

  • Henter et tilfeldig ord fra en liste med ord (Python-strenger).
  • Viser ordet og spør brukeren om hvilken strengoperasjon (manipulering) som skal utføres.
  • Inkluderer operasjoner for endring av små og store bokstaver (lower, upper, title, swapcase) samt en standard oppførsel. Bruk innebygde Python-strengmetoder etter behov.
  • Spør brukeren om innspill, konverterer input fra streng til int ved typekonvertering.

Python-strenger er uforanderlige. Metodene endrer ikke den opprinnelige strengen, men returnerer en kopi med de nødvendige endringene. Her er en oversikt over strengmetodene vi skal bruke:

Strengmetode Beskrivelse
lower() Returnerer en kopi der alle tegn er med små bokstaver.
upper() Returnerer en kopi der alle tegn er med store bokstaver.
title() Returnerer en kopi formatert som tittelcase.
swapcase() Returnerer en kopi der store og små bokstaver byttes om.

Følgende kode henter tilfeldig et ord og ber om brukerinput:

import random

# Ordliste
word_list = ["Python", "programmering", "Hei", "verden", "kontekst", "Switch"]

# Henter tilfeldig ord
word = random.choice(word_list)

# Viser kontekst og tilgjengelige valg
print("Velkommen! Du har fått et tilfeldig ord.")
print("Velg et alternativ for å manipulere ordet:")
print("1. Små bokstaver")
print("2. Store bokstaver")
print("3. Tittelcase")
print("4. Bytt store/små")
print("5. Standard")

# Henter brukerens valg
option = int(input("Skriv inn ditt valg: "))

Her ser du et eksempel på hvordan strengen «Python» kan endres basert på brukerens valg:

Når du kjører programmet, vil du se en melding som dette:

Velkommen! Du har fått et tilfeldig ord.

Velg et alternativ for å manipulere ordet:
1. Små bokstaver
2. Store bokstaver
3. Tittelcase
4. Bytt store/små
5. Standard

Skriv inn ditt valg:

La oss fortsette og implementere de forskjellige tilnærmingene.

Bruk av If-Elif-Else

I denne tilnærmingen bruker vi en serie med if-elif-else setninger for å sjekke brukerens valg mot forhåndsdefinerte alternativer. Deretter utfører vi en tilhørende kodeblokk basert på brukerens input.

# if-elif-else

if option == 1:
    result = word.lower()
elif option == 2:
    result = word.upper()
elif option == 3:
    result = word.title()
elif option == 4:
    result = word.swapcase()
else:
    result = word

print(f"Ditt tilfeldige ord er {word} og resultatet er {result}")

Her:

  • Sammenligner vi brukerens input med hvert alternativ ved hjelp av if-elif setninger.
  • Når et samsvar er funnet, utføres den tilhørende kodeblokken.
  • Hvis ingen av if-elif-betingelsene matcher, kjøres else-blokken for standard oppførsel.

Du kan nå kjøre skriptet, velge et alternativ og bekrefte resultatet:

Velkommen! Du har fått et tilfeldig ord.

Velg et alternativ for å manipulere ordet:
1. Små bokstaver
2. Store bokstaver
3. Tittelcase
4. Bytt store/små
5. Standard

Skriv inn ditt valg: 2

Ditt tilfeldige ord er Switch og resultatet er SWITCH.

If-elif-else stigen er enkel å implementere, men kan være vanskelig å vedlikeholde. I dette eksemplet har vi fem valg (inkludert standard), men i praksis kan det være mange flere. Lange if-elif-else stiger er noe man bør unngå.

La oss derfor se på en mer vedlikeholdsvennlig implementasjon.

Bruk av ordbøker og førsteklasses funksjoner

Du kan bruke Pythons ordbøker og funksjoner for å emulere switch-case funksjonalitet.

📑 Python funksjoner er førsteklasses objekter

I Python er funksjoner førsteklasses. Dette betyr at du kan gjøre mer enn å definere og kalle opp funksjoner:

  • Du kan tilordne en funksjon til en variabel, bruke funksjoner som elementer i lister og verdier i en ordbok.
  • Du kan sende funksjoner som argumenter til andre funksjoner og returnere funksjoner.

I denne metoden bruker vi en ordbok til å mappe brukerens valg til tilsvarende funksjoner. Dette er en mer effektiv måte å håndtere mange valg på, da vi unngår lange if-elif kjeder.

Først definerer vi funksjoner for de ulike strengoperasjonene:

# Definerer funksjoner for hvert alternativ
def lower_case(word):
    return word.lower()

def upper_case(word):
    return word.upper()

def title_case(word):
    return word.title()

def swap_case(word):
    return word.swapcase()

Deretter gjør vi følgende:

  • Oppretter en ordbok kalt «options» der nøklene er brukerens valg og verdiene er funksjoner som skal utføres.
  • Bruker ordbokmetoden get() for å hente funksjonen som tilhører brukerens valg. Hvis valget ikke finnes i ordboken, bruker vi en standard lambda-funksjon.
  • Deretter utfører vi den valgte funksjonen på det tilfeldige ordet.
# Lagrer funksjoner i en ordbok
options = {
    1: lower_case,
    2: upper_case,
    3: title_case,
    4: swap_case,
}

# Bruker ordboken for å velge og kalle den riktige funksjonen
result = options.get(option, lambda x: x)(word)

print(f"Ditt tilfeldige ord er {word} og resultatet er {result}")

Her er et eksempel på output:

Velkommen! Du har fått et tilfeldig ord.

Velg et alternativ for å manipulere ordet:
1. Små bokstaver
2. Store bokstaver
3. Tittelcase
4. Bytt store/små
5. Standard

Skriv inn ditt valg: 4

Ditt tilfeldige ord er Hello og resultatet er hELLO.

Bruk av Match-Case

📝 Merk: Du trenger Python 3.10 eller nyere for å bruke match-case setninger.

Fra Python 3.10 kan du bruke match-setningen til å implementere en switch-case-lignende struktur. Match-setningen gir en mer intuitiv måte å håndtere flere valg på. _ (underscore) fungerer som standard-case.

Her er hvordan vi kan skrive om eksemplet vårt med match-case:

  • Vi bruker match-setningen for å sammenligne brukerens input med de ulike valgene.
  • Hvert case angir et valg og koden som skal utføres hvis dette valget stemmer.
  • _ (underscore) fungerer som standard og utfører kode dersom ingen av de andre casene stemmer.
match option:
    case 1:
        result =  word.lower()
    case 2:
        result = word.upper()
    case 3:
        result = word.title()
    case 4:
        result = word.swapcase()
    case _:
        result = word  # Standardoppførsel, returnerer ordet som det er

print(f"Ditt tilfeldige ord er {word} og resultatet er {result}.")

Du kan nå kjøre skriptet og se resultatet:

Velkommen! Du har fått et tilfeldig ord.

Velg et alternativ for å manipulere ordet:
1. Små bokstaver
2. Store bokstaver
3. Tittelcase
4. Bytt store/små
5. Standard

Skriv inn ditt valg: 2
Ditt tilfeldige ord er world og resultatet er WORLD.

⚙ Match-setningen er en god måte å implementere switch-case-funksjonalitet på, men den er egentlig ment for mer avansert strukturell mønstertilpasning enn bare å emulere switch-case.

Oppsummering

La oss oppsummere de ulike måtene for å oppnå switch-case-funksjonalitet i Python:

  • If-elif-else stigen er lett å implementere, men vanskelig å vedlikeholde. Den bør kun brukes dersom det ikke er mange alternativer.
  • Du kan bruke ordbøker og funksjoner. De ulike valgene blir nøklene i ordboken, mens de tilhørende funksjonene blir verdiene.
  • Match-case setningen, introdusert i Python 3.10, gir en enkel og intuitiv måte å implementere switch-case på. Den er også egnet for mer avanserte mønstertilpasninger.

Du finner kodeeksemplene for denne artikkelen på GitHub. Hvis du forbereder deg til kodeintervjuer, sjekk ut denne samlingen med de beste Python-spørsmålene.