[Explained] Πώς να εφαρμόσετε το Switch-Case στην Python
![[Explained] Πώς να εφαρμόσετε το Switch-Case στην Python](https://grtechpc.org/wp-content/uploads/2023/09/Explained-Πώς-να-εφαρμόσετε-το-Switch-Case-στην-Python.jpg?v=1694008545)
Θέλετε να εφαρμόσετε μια κατασκευή θήκης διακόπτη στην Python; Μάθετε τις διαφορετικές προσεγγίσεις που μπορείτε να ακολουθήσετε για να προσομοιώσετε τη συμπεριφορά μεταγωγής.
Εάν έχετε προγραμματίσει σε C ή JavaScript, θα έχετε χρησιμοποιήσει τη δήλωση switch-case. Αλλά γιατί χρειαζόμαστε μια κατασκευή θήκης διακόπτη;
Ας υποθέσουμε ότι έχετε ένα σύνολο διαφορετικών ενεργειών (ή μπλοκ κώδικα). Και ποια ενέργεια εκτελείτε (το μπλοκ κώδικα που θα εκτελεστεί) εξαρτάται από την τιμή μιας μεταβλητής ή μιας έκφρασης.
Μερικά παραδείγματα περιλαμβάνουν:
- Κατανομή βαθμών στους μαθητές με βάση τη βαθμολογία τους
- Επιλογή τεχνικών χειρισμού συμβολοσειρών με βάση την επιλογή του χρήστη
- Εκτέλεση αριθμητικών πράξεων σε δύο αριθμούς ανάλογα με την είσοδο του χρήστη
Έτσι, η κατασκευή θήκης διακόπτη παρέχει έναν βολικό τρόπο για την εφαρμογή μιας τέτοιας λογικής. Όταν χρειάζεται να εκτελέσετε —με βάση την τιμή της μεταβλητής ή της παράστασης— μία από τις πολλές πιθανές ενέργειες.
Ενώ η Python δεν διαθέτει ενσωματωμένη κατασκευή θήκης μεταγωγής, υπάρχουν αρκετές προσεγγίσεις που μπορείτε να χρησιμοποιήσετε για να επιτύχετε παρόμοια λειτουργικότητα. Σε αυτό το άρθρο, θα εξερευνήσουμε αυτές τις προσεγγίσεις.
Πίνακας περιεχομένων
Εξομοίωση της συμπεριφοράς Switch-Case στην Python
Ας δούμε πώς μπορούμε να προσομοιώσουμε τη συμπεριφορά μεταγωγής περίπτωσης στην Python παίρνοντας ένα παράδειγμα.
Θα γράψουμε ένα απλό πρόγραμμα που κάνει τα εξής:
- Δείγμα λέξης, συμβολοσειράς Python, τυχαία από μια λίστα λέξεων.
- Παρέχετε το πλαίσιο και προτρέπετε τον χρήστη. Καθορίστε τις πράξεις συμβολοσειράς—χειρισμός συμβολοσειράς—που θα εκτελεστούν στην επιλεγμένη λέξη.
- Λογαριάστε τις λειτουργίες για αλλαγή πεζών-κεφαλαίων (πεζά, κεφαλαία, κεφαλαία γράμματα και άλλα) συμπεριλαμβανομένης μιας προεπιλεγμένης συμπεριφοράς. Χρησιμοποιήστε ενσωματωμένες μεθόδους συμβολοσειράς Python όπως απαιτείται.
- Ζητήστε από τον χρήστη για εισαγωγή. Επειδή η είσοδος, από προεπιλογή, είναι μια συμβολοσειρά, μετατρέψτε την σε int κατά τύπο casting.
Οι συμβολοσειρές Python είναι αμετάβλητες. Έτσι, οι μέθοδοι συμβολοσειράς δεν τροποποιούν την αρχική συμβολοσειρά. Μάλλον επιστρέφουν ένα αντίγραφο της συμβολοσειράς με τις απαιτούμενες αλλαγές. Ας εξετάσουμε τις μεθόδους συμβολοσειράς Python που θα χρησιμοποιήσουμε:
String MethodDescriptionlower()Επιστρέφει ένα αντίγραφο της συμβολοσειράς όπου όλοι οι χαρακτήρες είναι με πεζά upper()Επιστρέφει ένα αντίγραφο της συμβολοσειράς όπου όλοι οι χαρακτήρες είναι σε upper casetitle()Επιστρέφει ένα αντίγραφο της συμβολοσειράς μορφοποιημένο σε title casewapcase()Επιστρέφει ένα αντίγραφο του η συμβολοσειρά όπου οι πεζοί και κεφαλαίοι χαρακτήρες μετατρέπονται σε κεφαλαία και πεζά, αντίστοιχα
Το ακόλουθο απόσπασμα κώδικα λαμβάνει δείγματα μιας λέξης από το 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 είναι μια μυρωδιά κωδικού που πρέπει να αποφύγετε.
Ας προχωρήσουμε λοιπόν σε μια υλοποίηση που μπορεί να διατηρηθεί.
Χρήση λεξικών αντιστοίχισης και συναρτήσεων πρώτης κατηγορίας
Μπορείτε να αξιοποιήσετε τα λεξικά και τις συναρτήσεις 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 ή νεότερη έκδοση για να χρησιμοποιήσετε δηλώσεις αντιστοίχισης πεζών-κεφαλαίων.
Ξεκινώντας από την Python 3.10, μπορείτε να χρησιμοποιήσετε τη δήλωση αντιστοίχισης για να εφαρμόσετε μια κατασκευή που μοιάζει με περίπτωση διακόπτη. Η δήλωση αντιστοίχισης με την απλή σύνταξη παρέχει έναν πιο διαισθητικό τρόπο χειρισμού πολλαπλών υποθέσεων. Το _ (υπογράμμιση) χρησιμεύει ως η προεπιλεγμένη περίπτωση.
Δείτε πώς μπορούμε να ξαναγράψουμε το παράδειγμά μας χρησιμοποιώντας ταίρι-πεζά:
- Χρησιμοποιούμε τη δήλωση αντιστοίχισης για να συγκρίνουμε τα δεδομένα του χρήστη με διάφορες περιπτώσεις.
- Κάθε περίπτωση καθορίζει μια επιλογή και τον κώδικα που θα εκτελεστεί εάν αυτή η επιλογή ταιριάζει.
- Το _ (υπογράμμιση) χρησιμεύει ως προεπιλεγμένη περίπτωση, εκτελώντας κώδικα όταν καμία από τις άλλες περιπτώσεις δεν ταιριάζει.
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, βοηθά στην υλοποίηση αυτής της κατασκευής κεφαλαίων διακόπτη με μια απλή και διαισθητική σύνταξη. Ωστόσο, η δήλωση match-case είναι μια εξαιρετική επιλογή για πιο ενδιαφέρουσες περιπτώσεις χρήσης αντιστοίχισης δομικών προτύπων.
Μπορείτε να βρείτε τα παραδείγματα κώδικα για αυτό το σεμινάριο στο GitHub. Εάν προετοιμάζεστε για συνεντεύξεις κωδικοποίησης, ρίξτε μια ματιά σε αυτήν τη συλλογή από κορυφαίες ερωτήσεις συνέντευξης Python.