[Explained] Как да внедрите Switch-Case в Python

Искате ли да внедрите конструкция за превключване на случай в Python? Научете различните подходи, които можете да предприемете, за да подражавате на поведението при смяна на регистър.

Ако сте програмирали на C или JavaScript, ще сте използвали командата switch-case. Но защо се нуждаем от конструкция за превключване на случаи?

Да предположим, че имате набор от различни действия (или кодови блокове). И кое действие изпълнявате (кодовият блок за изпълнение) зависи от стойността на променлива или израз.

Някои примери включват:

  • Поставяне на оценки на учениците въз основа на техните резултати
  • Избор на техники за манипулиране на низове въз основа на избора на потребителя
  • Извършване на аритметични операции с две числа в зависимост от въведеното от потребителя

Така че конструкцията switch-case осигурява удобен начин за прилагане на такава логика. Когато трябва да изпълните – въз основа на стойността на променливата или израза – едно от многото възможни действия.

Въпреки че Python няма вградена конструкция за превключване на случай, има няколко подхода, които можете да използвате, за да постигнете подобна функционалност. В тази статия ще разгледаме тези подходи.

Емулиране на поведението на Switch-Case в Python

Нека видим как можем да емулираме поведението на превключване на регистъра в Python, като вземем пример.

Ще напишем проста програма, която прави следното:

  • Извадка от дума, низ на Python, на случаен принцип от списък с думи.
  • Осигурете контекст и подканете потребителя. Дефинирайте операциите с низове – манипулиране на низове – за извършване на избраната дума.
  • Отчитане на операции за промяна на главни букви (малки, главни букви, главни букви и други), включително поведение по подразбиране. Използвайте вградени методи за низове на Python, ако е необходимо.
  • Подканете потребителя за въвеждане. Тъй като входът по подразбиране е низ, преобразувайте го в int чрез преобразуване на типа.

Низовете на Python са неизменни. Така че низовите методи не променят оригиналния низ. По-скоро те връщат копие на низа с необходимите промени. Нека прегледаме методите за низове на Python, които ще използваме:

  Как да деактивирате лентата за изтегляния в Chrome

String MethodDescriptionlower()Връща копие на низа, където всички знаци са с малки буквиupper()Връща копие на низа, където всички знаци са с горни буквиtitle()Връща копие на низа, форматиран в заглавието, caseswapcase()Връща копие на низът, където малките и главните букви се преобразуват съответно в главни и малки букви

Следният кодов фрагмент взема произволна извадка от дума от word_list и извлича въведеното от потребителя:

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: "))

Ето пример, показващ как низът „Python“ се променя въз основа на избора на потребителя:

Когато сега стартирате програмата, трябва да бъдете подканени за въвеждане по следния начин:

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: 

След това нека пристъпим към прилагане на различните подходи.

Използване на стълба If-Elif-Else

При този подход ние използваме поредица от оператори if-elif-else, за да проверим избора на потребителя спрямо предварително зададени опции. След това изпълняваме съответен блок код въз основа на въведеното от потребителя.

# 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}")

Тук:

  • Ние сравняваме въвеждането на потребителя с всяка опция, използвайки оператори if-elif.
  • Когато се намери съвпадение, ние изпълняваме съответния кодов блок.
  • Ако нито едно от условията на if-elif не съвпада, ние изпълняваме блока else за поведение по подразбиране.

Можете да стартирате скрипта сега, да въведете избора и да проверите резултата:

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.

Стълбата if-elif-else е лесна за изпълнение. Но може да бъде предизвикателство за поддържане. В този пример имахме пет случая (включително поведението по подразбиране). На практика обаче може да имаме много повече случаи. Такива дълги стълби if-elif-else са кодова миризма, която трябва да избягвате.

  Почистване на Google Music премахва всички карти с предложения от Google Music [Firefox]

Така че нека продължим към внедряване, което може да се поддържа.

Използване на картографиране на речници и първокласни функции

Можете да използвате речниците и функциите на Python, за да емулирате поведението при превключване на главни и малки букви.

📑 Функциите на Python са първокласни граждани

В Python функциите са първокласни граждани. Можете да направите много повече от просто дефиниране и извикване на функции:

  • След като дефинирате функция, можете да я присвоите на друга променлива, да използвате функции като елементи на списъци, стойности в речник и много други.
  • Можете също така да ги предавате: функциите могат да се предават като аргументи на други функции и функциите могат да връщат функции.

При този подход ще използваме речник, за да съпоставим потребителските избори към съответните функции или действия. Това е по-ефективен начин за обработка на множество избори, тъй като избягва дълга верига от изрази if-elif.

Първо, нека дефинираме следните функции за различните операции с низове:

# 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()

След това нека направим следното:

  • Създайте речник, наречен избори, където ключовете са потребителски избори, а стойностите са функции или действия за изпълнение.
  • Използвайте метода на речника get(), за да извлечете избраното действие въз основа на избора на потребителя. Ако изборът не е намерен в речника, ние предоставяме действие по подразбиране, определено от ламбда функция.
  • След това изпълнете избраното действие върху произволната дума.
# 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}")

Ето примерен резултат:

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.

Използване на Match-Case

📝 Забележка: Имате нужда от Python 3.10 или по-нова версия, за да използвате изрази за съвпадение на главни и малки букви.

  7 инструмента за създаване на привличащи вниманието сравнителни диаграми pctechbg.net

Започвайки от Python 3.10, можете да използвате оператора за съвпадение, за да приложите конструкция, подобна на switch-case. Изявлението за съвпадение със своя прост синтаксис предоставя по-интуитивен начин за обработка на множество случаи. _ (долната черта) служи като регистър по подразбиране.

Ето как можем да пренапишем нашия пример, като използваме съвпадение:

  • Ние използваме оператора за съвпадение, за да сравним въвеждането на потребителя с различни случаи.
  • Всеки случай определя избор и кода, който да се изпълни, ако този избор съвпада.
  • _ (долната черта) служи като случай по подразбиране, изпълняващ код, когато никой от другите случаи не съвпада.
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}.")

Вече можете да стартирате скрипта и да проверите резултата:

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.

⚙ Въпреки че изразът за съвпадение предоставя удобен начин за внедряване на конструкция за превключване на регистър, той е предназначен за по-полезни съвпадение на структурни модели задачи извън емулирането на поведение при превключване на регистъра.

Обобщавайки

Нека обобщим различните подходи за постигане на функционалност за превключване на регистъра в Python:

  • Стълбата if-elif-else е лесна за изпълнение, но е трудна за поддръжка. Затова ги използвайте минимално — само когато нямате твърде много опции за проверка.
  • Можете да използвате речниците и функциите на Python, за да емулирате поведението при превключване на главни и малки букви. Включете различните възможности за избор и съответните функции съответно като ключове и стойности на речника.
  • Изявлението match-case, въведено в Python 3.10, помага за внедряването на тази конструкция за превключване на регистър с прост и интуитивен синтаксис. Изявлението за съвпадение на случай обаче е чудесен избор за по-интересни случаи на употреба за съпоставяне на структурни шаблони.

Можете да намерите примерите за код за този урок на GitHub. Ако се подготвяте за интервюта за кодиране, вижте тази компилация от най-добрите въпроси за интервю за Python.