[Explained] Cum se implementează Switch-Case în Python

Doriți să implementați o construcție switch-case în Python? Aflați diferitele abordări pe care le puteți lua pentru a emula comportamentul comutatorului.

Dacă ați programat în C sau JavaScript, veți fi folosit instrucțiunea switch-case. Dar de ce avem nevoie de o construcție switch-case?

Să presupunem că aveți un set de acțiuni diferite (sau blocuri de cod). Și acțiunea pe care o efectuați (blocul de cod de executat) depinde de valoarea unei variabile sau a unei expresii.

Câteva exemple includ:

  • Atribuirea notelor elevilor pe baza punctajelor lor
  • Alegerea tehnicilor de manipulare a șirurilor în funcție de alegerea utilizatorului
  • Efectuarea de operații aritmetice pe două numere în funcție de introducerea utilizatorului

Deci construcția switch-case oferă o modalitate convenabilă de a implementa o astfel de logică. Când trebuie să executați – pe baza valorii variabilei sau a expresiei – una dintre numeroasele acțiuni posibile.

Deși Python nu are o construcție de tip switch-case încorporată, există mai multe abordări pe care le puteți folosi pentru a obține o funcționalitate similară. În acest articol, vom explora aceste abordări.

Emularea comportamentului Switch-Case în Python

Să vedem cum putem emula comportamentul switch-case în Python luând un exemplu.

Vom scrie un program simplu care face următoarele:

  • Eșantionați un cuvânt, un șir Python, la întâmplare dintr-o listă de cuvinte.
  • Furnizați context și solicitați utilizatorului. Definiți operațiunile cu șiruri — manipulare șiruri — pe care să le efectuați asupra cuvântului ales.
  • Luați în considerare operațiunile de schimbare a majusculei (minuscule, majuscule, titlu și altele), inclusiv un comportament implicit. Folosiți metode de șiruri Python încorporate după cum este necesar.
  • Solicitați utilizatorului introducerea. Deoarece intrarea, implicit, este un șir, convertiți-l într-un int prin tip casting.

Șirurile Python sunt imuabile. Deci metodele șirurilor nu modifică șirul original. Mai degrabă, returnează o copie a șirului cu modificările necesare. Să revizuim metodele Python pe care le vom folosi:

String MethodDescriptionlower()Returnează o copie a șirului în care toate caracterele sunt în minusculeupper()Returnează o copie a șirului în care toate caracterele sunt în majusculetitle()Returnează o copie a șirului formatat în titlu casewapcase()Returnează o copie a șirului de caractere șirul în care caracterele mici și majuscule sunt convertite în majuscule și, respectiv, litere mici

  Care este diferența dintre aceste chipuri de silicon Apple?

Următorul fragment de cod eșantionează un cuvânt din lista de cuvinte la întâmplare și preia intrarea utilizatorului:

import random

# List of words to choose from
word_list = ["Python", "programming", "Hello", "world", "context", "Switch"]

# Randomly select a word from the list
word = random.choice(word_list)

# Provide context and available options to the user
print("Welcome! You have a randomly selected word.")
print("Choose an option to manipulate the word:")
print("1. Lowercase")
print("2. Uppercase")
print("3. Titlecase")
print("4. Swapcase")
print("5. Default behavior")

# Get user option
option = int(input("Enter your option: "))

Iată un exemplu care arată modul în care șirul „Python” este modificat în funcție de alegerea utilizatorului:

Când rulați acum programul, ar trebui să vi se solicite introducerea astfel:

Welcome! You have a randomly selected word.

Choose an option to manipulate the word:
1. Lowercase
2. Uppercase
3. Titlecase
4. Swapcase
5. Default behavior

Enter your option: 

În continuare, să trecem la implementarea diferitelor abordări.

Folosind Scara If-Elif-Else

În această abordare, folosim o serie de instrucțiuni if-elif-else pentru a verifica alegerea utilizatorului față de opțiunile predefinite. Apoi executăm un bloc de cod corespunzător pe baza intrării utilizatorului.

# 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"Your random word is {word} and the result is {result}")

Aici:

  • Comparăm intrarea utilizatorului cu fiecare opțiune folosind instrucțiuni if-elif.
  • Când se găsește o potrivire, executăm blocul de cod corespunzător.
  • Dacă niciuna dintre condițiile if-elif nu se potrivește, executăm blocul else pentru comportamentul implicit.

Puteți rula scriptul acum, introduceți alegerea și verificați rezultatul:

Welcome! You have a randomly selected word

Choose an option to manipulate the word:
1. Lowercase
2. Uppercase
3. Titlecase
4. Swapcase
5. Default behavior

Enter your option: 2

Your random word is Switch and the result is SWITCH.

Scara if-elif-else este ușor de implementat. Dar poate fi o provocare de menținut. În acest exemplu, am avut cinci cazuri (inclusiv comportamentul implicit). În practică, totuși, s-ar putea să avem mult mai multe cazuri. Aceste scări lungi dacă-elif-altfel sunt un miros de cod pe care ar trebui să-l evitați.

  Cum să schimbați limba pe Chromebook

Deci, să trecem la o implementare care poate fi întreținută.

Folosind cartografierea dicționarului și funcțiile de primă clasă

Puteți utiliza dicționarele și funcțiile Python pentru a emula comportamentul de comutare a cazurilor.

📑 Funcțiile Python sunt cetățeni de primă clasă

În Python, funcțiile sunt cetățeni de primă clasă. Puteți face mult mai mult decât definirea și apelarea funcțiilor:

  • Odată ce ați definit o funcție, o puteți atribui unei alte variabile, puteți utiliza funcții ca elemente ale listelor, valori într-un dicționar și multe altele.
  • De asemenea, le puteți transmite: funcțiile pot fi transmise ca argumente altor funcții, iar funcțiile pot returna funcții.

În această abordare, vom folosi un dicționar pentru a mapa alegerile utilizatorilor la funcțiile sau acțiunile corespunzătoare. Aceasta este o modalitate mai eficientă de a gestiona opțiunile multiple, deoarece evită un lanț lung de instrucțiuni if-elif.

Mai întâi, să definim următoarele funcții pentru diferitele operații cu șir:

# Define functions for each option
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()

În continuare, să facem următoarele:

  • Creați un dicționar numit alegeri, în care cheile sunt alegerile utilizatorului, iar valorile sunt funcții sau acțiuni de efectuat.
  • Utilizați metoda dicționarului get() pentru a prelua acțiunea selectată în funcție de alegerea utilizatorului. Dacă alegerea nu este găsită în dicționar, oferim o acțiune implicită specificată de o funcție lambda.
  • Apoi executați acțiunea selectată pe cuvântul aleatoriu.
# Store functions in a dictionary
options = {
    1: lower_case,
    2: upper_case,
    3: title_case,
    4: swap_case,
}

# Use the dictionary to select and call the appropriate function
result = options.get(option, lambda x: x)(word)

print(f"Your random word is {word} and the result is {result}")

Iată un exemplu de ieșire:

Welcome! You have a randomly selected word.

Choose an option to manipulate the word:
1. Lowercase
2. Uppercase
3. Titlecase
4. Swapcase
5. Default behavior

Enter your option: 4

Your random word is Hello and the result is hELLO.

Folosind Match-Case

📝 Notă: aveți nevoie de Python 3.10 sau de o versiune ulterioară pentru a utiliza declarații de potrivire.

  Cum să utilizați liniile directoare pentru a alinia obiectele PowerPoint

Pornind de la Python 3.10, puteți utiliza instrucțiunea de potrivire pentru a implementa o construcție asemănătoare switch-case. Declarația de potrivire cu sintaxa sa simplă oferă o modalitate mai intuitivă de a gestiona mai multe cazuri. _ (sublinierea) servește ca caz implicit.

Iată cum putem rescrie exemplul nostru folosind match-case:

  • Folosim declarația de potrivire pentru a compara intrarea utilizatorului cu diferite cazuri.
  • Fiecare caz specifică o alegere și codul de executat dacă alegerea respectivă se potrivește.
  • _ (sublinierea) servește ca caz implicit, executând cod atunci când niciunul dintre celelalte cazuri nu se potrivește.
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  # Default behavior, return the string as is

print(f"Your random word is {word} and the result is {result}.")

Acum puteți rula scriptul și verifica rezultatul:

Welcome! You have a randomly selected word.

Choose an option to manipulate the word:
1. Lowercase
2. Uppercase
3. Titlecase
4. Swapcase
5. Default behavior

Enter your option: 2
Your random word is world and the result is WORLD.

⚙ Deși declarația de potrivire oferă o modalitate convenabilă de a implementa o construcție switch-case, este menită să fie mai utilă potrivirea modelului structural sarcini dincolo de emularea comportamentului switch-case.

Încheierea

Să rezumam diferitele abordări pentru a obține funcționalitatea switch-case în Python:

  • Scara if-elif-else este ușor de implementat, dar este o durere de întreținut. Așa că folosește-le minim – doar atunci când nu ai prea multe opțiuni de verificat.
  • Puteți utiliza dicționarele și funcțiile Python pentru a emula comportamentul de comutare a cazurilor. Includeți diferitele opțiuni și funcțiile corespunzătoare ca chei și, respectiv, valori ale dicționarului.
  • Declarația match-case, introdusă în Python 3.10, ajută la implementarea acestui construct switch-case cu o sintaxă simplă și intuitivă. Cu toate acestea, declarația de potrivire a cazului este o alegere excelentă pentru cazuri de utilizare mai interesante de potrivire a modelelor structurale.

Puteți găsi exemple de cod pentru acest tutorial pe GitHub. Dacă vă pregătiți pentru codificarea interviurilor, consultați această compilație de întrebări de top pentru interviurile Python.