Προγράμματα Python σε λειτουργίες συμβολοσειράς

Σε αυτό το σεμινάριο, θα γράψετε προγράμματα Python για να λύσετε συχνές ερωτήσεις σχετικά με λειτουργίες συμβολοσειράς.

Θα μάθετε πώς να ελέγχετε εάν οι συμβολοσειρές της Python είναι παλίνδρομα, αναγράμματα και βρίσκονται στην κεφαλαία του τίτλου.

Python Strings: Μια γρήγορη ανασκόπηση

Στην Python, οι συμβολοσειρές είναι ισχυροί ενσωματωμένοι τύποι δεδομένων. Μπορούν να αποθηκεύσουν μια ακολουθία χαρακτήρων.

Ευρετηρίαση σε συμβολοσειρές Python: Όπως όλες οι επαναλήψεις της Python, οι συμβολοσειρές έχουν επίσης μηδενικό ευρετήριο. Άρα οι έγκυροι δείκτες για μια συμβολοσειρά μήκους N είναι 0, 1, 2 έως N – 1.

Η Python υποστηρίζει επίσης αρνητική ευρετηρίαση για πρόσβαση σε στοιχεία από το τέλος της συμβολοσειράς. Άρα -1 είναι ο δείκτης του τελευταίου χαρακτήρα της συμβολοσειράς, -2 είναι ο δείκτης του από δεύτερου προς τελευταίο χαρακτήρα στη συμβολοσειρά και ούτω καθεξής.

Immutability of Python String: Επιπλέον, οι συμβολοσειρές στην Python είναι αμετάβλητες, επομένως δεν μπορείτε να τις τροποποιήσετε στη θέση τους. Ωστόσο, μπορείτε να καλέσετε πολλές μεθόδους συμβολοσειρών σε αυτές και να αποκτήσετε αντίγραφα συμβολοσειρών με το επιθυμητό αποτέλεσμα.

Τώρα που εξετάσαμε τα βασικά των συμβολοσειρών Python, ας προχωρήσουμε στην επίλυση μερικών απλών αλλά ενδιαφέροντων προβλημάτων.

Ας αρχίσουμε.

Ελέγξτε αν μια συμβολοσειρά Python είναι Palindrome

Πρόβλημα: Δεδομένου μιας συμβολοσειράς Python, ελέγξτε αν είναι ή όχι παλίνδρομο.

Εάν ναι, επιστρέψτε το True. αλλιώς, επιστρέψτε False.

Έτσι το πρώτο μας πρόβλημα είναι να ελέγξουμε αν μια δεδομένη συμβολοσειρά είναι ή όχι παλίνδρομο.

Ένα παλίνδρομο είναι μια συμβολοσειρά που διαβάζει το ίδιο από αριστερά προς τα δεξιά καθώς και από τα δεξιά προς τα αριστερά. Ας αναφέρουμε μερικά παραδείγματα: αγωνιστικό αυτοκίνητο, αναφορά, επίπεδο, κυρία, ραντάρ και ούτω καθεξής.

Ακολουθούν τα βήματα για την επίλυση αυτού του προβλήματος:

  • Αποκτήστε ένα αντίστροφο αντίγραφο της συμβολοσειράς και αποθηκεύστε το σε άλλη μεταβλητή, εάν χρειάζεται.
  • Συγκρίνετε τις τιμές της αρχικής συμβολοσειράς και της αντίστροφης συμβολοσειράς.
  • Αν είναι ίσα, η χορδή είναι παλίνδρομο. Επιστρέψτε λοιπόν το True και σταματήστε.
  • Εάν το πρωτότυπο και το αντίστροφο αντίγραφο δεν είναι ίσα, η συμβολοσειρά δεν είναι παλίνδρομο. Θα πρέπει λοιπόν να επιστρέψουμε το False.

Η βασική λειτουργία είναι να αποκτήσετε ένα αντίστροφο αντίγραφο της συμβολοσειράς. Στην Python, υπάρχουν μερικοί διαφορετικοί τρόποι με τους οποίους μπορείτε να το κάνετε αυτό.

  Πώς να ακυρώσετε μια παραγγελία Fashion Nova

Ωστόσο, θα εξετάσουμε δύο προσεγγίσεις:

  • Χρησιμοποιώντας τεμαχισμό χορδών
  • Χρησιμοποιώντας τη συνάρτηση reversed() και τη μέθοδο join().

Πώς να αντιστρέψετε μια συμβολοσειρά Python χρησιμοποιώντας το Slicing

Η σύνταξη [start: stop: step] επιστρέφει ένα κομμάτι της συμβολοσειράς από την αρχή έως το τέλος αλλά δεν περιλαμβάνει τη διακοπή, με βήμα μεγέθους βήματος.

  • Εάν παραλείψετε την έναρξη, το slice ξεκινά από την αρχή της συμβολοσειράς.
  • Εάν δεν καθορίσετε τον δείκτη διακοπής, η φέτα εκτείνεται μέχρι το τέλος της συμβολοσειράς.
  • Και οι αρνητικές τιμές του βήματος μπορούν να χρησιμοποιηθούν για την επιστροφή τμημάτων ξεκινώντας από το τέλος της συμβολοσειράς.

Οπότε [::-1] επιστρέφει ένα αντίστροφο αντίγραφο της συμβολοσειράς.

Το ακόλουθο κελί κώδικα περιέχει τον ορισμό της συνάρτησης is_palindrome().

Λαμβάνει μια συμβολοσειρά ως όρισμα και επιστρέφει True ή False ανάλογα με το αν είναι παλίνδρομο ή όχι.

Εδώ, χρησιμοποιήσαμε την κοπή συμβολοσειράς για να αποκτήσουμε ένα αντίστροφο αντίγραφο της συμβολοσειράς.

def is_palindrome(this_str):
  rev_str = this_str[::-1]
  if (this_str == rev_str):
    return True
  else:
    return False

▶️ Τώρα που ορίσαμε τη συνάρτηση, μπορούμε να προχωρήσουμε και να καλέσουμε με οποιαδήποτε έγκυρη συμβολοσειρά ως όρισμα.

is_palindrome("racecar")
True

Στο παραπάνω κελί κώδικα, το racecar είναι ένα παλίνδρομο. Έτσι η συνάρτηση is_palindrome() επιστρέφει True όπως αναμένεται.

Τώρα, δοκιμάστε να καλέσετε τη συνάρτηση με οποιαδήποτε συμβολοσειρά που δεν είναι παλίνδρομο, όπως το river.

is_palindrome("river")
False

Και όπως μπορείτε να δείτε, επιστρέφει False, το οποίο είναι σωστό. ✅

Πώς να αντιστρέψετε μια συμβολοσειρά Python χρησιμοποιώντας reversed() και join()

Στην Python, μπορείτε να χρησιμοποιήσετε τη μέθοδο join() μαζί με τη συνάρτηση reversed() για να αντιστρέψετε μια συμβολοσειρά.

  • Η συνάρτηση reversed() επιστρέφει έναν αντίστροφο επαναλήπτη μέσω των χαρακτήρων στη συμβολοσειρά.
  • Η μέθοδος join() μπορεί στη συνέχεια να χρησιμοποιηθεί για να ενώσει αυτούς τους χαρακτήρες με την αντίστροφη σειρά.

Χρησιμοποιώντας την παραπάνω μέθοδο, μπορείτε να ξαναγράψετε τη συνάρτηση is_palindrome() όπως στο κελί κώδικα παρακάτω.

def is_palindrome(this_str):
  rev_str="".join(reversed(this_str))
  if (this_str == rev_str):
    return True
  else:
    return False

Μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση is_palindrome() μέσα στην κατανόηση λίστας για να συλλέξετε όλα τα παλίνδρομα από μια μεγαλύτερη λίστα συμβολοσειρών.

str_list = ["refer","blue","level","12321","dragon"]

palindromes = [string for string in str_list if is_palindrome(string)]
print(palindromes)
# Output
['refer', 'level', '12321']

Δείτε πώς λειτουργεί ο παραπάνω κώδικας:

  • Διασχίστε τη str_list, καλέστε την is_palindrome() σε κάθε συμβολοσειρά.
  • Εάν η is_palindrome() επιστρέψει True, προσθέστε τη συμβολοσειρά στη λίστα palindromes.

Όπως μπορείτε να δείτε στην παραπάνω έξοδο, το palindromes είναι μια λίστα με όλες τις παλίνδρομες συμβολοσειρές στο str_list.

  7 κοινοί μύθοι για τους ελέγχους ιστορικού

Ελέγξτε εάν δύο συμβολοσειρές Python είναι αναγραμματισμοί

Μια άλλη δημοφιλής ερώτηση που μπορεί να συναντήσετε σε συνεντεύξεις είναι να ελέγξετε εάν ένα ζεύγος χορδών str1 και str2 είναι ή όχι αναγραμματισμοί.

Δύο χορδές λέγονται αναγραμματισμοί εάν οι αριθμοί των χαρακτήρων στις δύο χορδές είναι ακριβώς οι ίδιοι. Αυτό σημαίνει ότι μπορείτε να αποκτήσετε μία από τις συμβολοσειρές μεταθέτοντας ή αναδιατάσσοντας τους χαρακτήρες στην άλλη συμβολοσειρά.

Παραδείγματα αναγραμμάτων περιλαμβάνουν την κατάσταση γεύσης, αποθήκευση-βάζο, αγκώνα-κάτω και ούτω καθεξής.

Πώς να ελέγξετε για αναγράμματα χρησιμοποιώντας μετρητή αντικειμένου στην Python

Ένας απλός και διαισθητικός τρόπος είναι να υπολογίσετε τον αριθμό των εμφανίσεων κάθε χαρακτήρα στις δύο συμβολοσειρές. Και μετά ελέγξτε αν οι μετρήσεις είναι ίσες.

Αυτό μπορεί να γίνει πολύ πιο εύκολα χρησιμοποιώντας το αντικείμενο Counter από τη λειτουργική μονάδα itertools. ο Μετρητής Το αντικείμενο επιστρέφει ένα λεξικό Python: με τους χαρακτήρες ως κλειδιά και τις αντίστοιχες μετρήσεις ως τιμές.

Εξετάστε τις συμβολοσειρές “save” και “vase” όπως φαίνεται παρακάτω.

str1 = "save"
str2 = "vase"

Εδώ, τα c1 και c2 είναι αντικείμενα μετρητή που περιέχουν τους αριθμούς χαρακτήρων των συμβολοσειρών str1 και str2 αντίστοιχα.

from collections import Counter
c1 = Counter(str1)
c2 = Counter(str2)
print(c1)
print(c2)
c1 == c2

# Output
Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1})
Counter({'v': 1, 'a': 1, 's': 1, 'e': 1})
True

Το c1 == c2 επιστρέφει True καθώς τα str1 και str2 είναι αναγράμματα.

Χρησιμοποιώντας αυτή τη λογική, μπορούμε τώρα να προχωρήσουμε και να ορίσουμε τη συνάρτηση are_anagrams() με δύο παραμέτρους word1 και word2. Στο σώμα της συνάρτησης, ελέγχουμε αν Counter(word1) == Counter(word2).

def are_anagrams(word1, word2):
  if Counter(word1) ==  Counter(word2):
    return True
  else:
    return False

▶️ Για επαλήθευση, καλέστε are_anagrams() με str1, str2 ως ορίσματα. Καθώς τα str1 και str2 είναι αναγράμματα (“save” και “vase”), η συνάρτηση επιστρέφει True, το οποίο είναι σωστό.

are_anagrams(str1, str2)
True

Πώς να ελέγξετε για αναγράμματα χρησιμοποιώντας ταξινομημένα αντίγραφα συμβολοσειρών

Υπάρχει ένας άλλος τρόπος που μπορείτε να το κάνετε αυτό.

Εάν δύο συμβολοσειρές είναι αναγράμματα, τότε τα ταξινομημένα αντίγραφά τους είναι ίσα.

Μπορούμε λοιπόν να ξαναγράψουμε τη συνάρτηση are_anagrams() για να ελέγξουμε αν η ταξινομημένη έκδοση του str1 είναι ίδια με το ταξινομημένο αντίγραφο του str2. Αν είναι ίσες, τότε οι δύο χορδές είναι αναγραμματισμοί. αλλιώς δεν είναι.

Χρησιμοποιώντας την παραπάνω μέθοδο για να ελέγξουμε την ισότητα των ταξινομημένων αντιγράφων, μπορούμε να ξαναγράψουμε τη συνάρτηση are_anagrams() ως εξής.

def are_anagrams(word1, word2):
  if sorted(word1) ==  sorted(word2):
    return True
  else:
    return False

Ας κάνουμε τώρα μερικές κλήσεις λειτουργιών.

  • Οι συμβολοσειρές “elbow” και “below” είναι αναγραμματισμοί και η συνάρτηση are_anagrams() επιστρέφει True.
  • Και το “state” και το “tasted” δεν είναι αναγραμματισμοί και η συνάρτηση επιστρέφει False.
are_anagrams("below","elbow")
True

are_anagrams("state","tasted")
False

Ελέγξτε εάν μια συμβολοσειρά Python βρίσκεται σε περίπτωση τίτλου

Εδώ είναι η τελευταία μας ερώτηση για αυτό το σεμινάριο.

  Ποιος είναι ο Τζακ Ντόρσεϊ;

Πρόβλημα: Δίνεται μια συμβολοσειρά: το όνομα ενός ατόμου—με το όνομα και το επίθετο.

Πρέπει να ελέγξετε αν το πρώτο γράμμα του ονόματος και του επωνύμου είναι κεφαλαίο.

Αυτός ο τύπος πεζών-κεφαλαίων όπου το πρώτο γράμμα κάθε λέξης γράφεται με κεφαλαία ονομάζεται κεφαλαία.

Επομένως, πρέπει να ελέγξετε αν το όνομα είναι στην κεφαλαία:

1. Εάν ναι, στείλτε ένα μήνυμα ότι η μορφοποίηση είναι σε κεφαλαία κεφαλαία.

2. Διαφορετικά, επιστρέψτε ένα αντίγραφο της συμβολοσειράς που έχει μορφοποιηθεί στην κεφαλαία του τίτλου

  • Η Python έχει μια ενσωματωμένη μέθοδο string istitle(), η οποία ελέγχει αν μια συμβολοσειρά βρίσκεται στην κεφαλαία κεφαλαία.

Η .istitle() επιστρέφει True εάν η συμβολοσειρά είναι μορφοποιημένη στην κεφαλαία του τίτλου, διαφορετικά επιστρέφει False.

  • Και η μέθοδος συμβολοσειράς title() της Python επιστρέφει ένα αντίγραφο της συμβολοσειράς που έχει μορφοποιηθεί στην περίπτωση τίτλου.

Έτσι τώρα μπορείτε να χρησιμοποιήσετε αυτές τις δύο μεθόδους για να λύσετε το πρόβλημα.

Ορίστε μια συνάρτηση check_titlecase() που δέχεται το όνομα ως όρισμα.

  • Μπορείτε να καλέσετε τη μέθοδο istitle() στη συμβολοσειρά εισόδου για να ελέγξετε αν είναι μορφοποιημένη σε πεζά γράμματα τίτλου.
  • Εάν είναι True, μπορείτε να εκτυπώσετε ότι η συμβολοσειρά βρίσκεται ήδη σε πεζά γράμματα τίτλου.
  • Διαφορετικά, μπορείτε να καλέσετε τη μέθοδο title() και να επιστρέψετε ένα αντίγραφο της συμβολοσειράς στην περίπτωση τίτλου.

Το ακόλουθο κελί κώδικα δείχνει τον ορισμό της συνάρτησης check_titlecase().

def check_titlecase(name):
  if name.istitle():
    print(f"'{name}' is already formatted in title case.")
  else:
    return name.title()

Ας καλέσουμε τώρα τη μέθοδο check_titlecase() με ένα όρισμα.

check_titlecase("jane smith")

# Output
Jane Smith

Στην παραπάνω έξοδο, μπορείτε να δείτε ότι η συμβολοσειρά “Jane Smith” βρίσκεται τώρα στην κεφαλαία του τίτλου.

▶️ Ας πάρουμε ένα άλλο παράδειγμα.

check_titlecase("agatha Christie")

# Output
Agatha Christie

Αυτή τη φορά, ας καλέσουμε τη συνάρτηση με μια συμβολοσειρά με κεφαλαία τίτλο.

check_titlecase("Grace Hopper")

# Output
'Grace Hopper' is already formatted in title case.

Λάβουμε ειδοποίηση ότι η συμβολοσειρά έχει μορφοποιηθεί στην περίπτωση του τίτλου και η συνάρτηση λειτουργεί όπως αναμένεται.

Συμπέρασμα 👩‍🏫

Τώρα ας συνοψίσουμε τα προβλήματα που έχουμε συζητήσει μέχρι τώρα.

  • Για να ελέγξετε εάν μια συμβολοσειρά είναι παλίνδρομο, ελέγξτε αν η συμβολοσειρά και η αντίστροφη έκδοσή της είναι ίσες. Μπορείτε να χρησιμοποιήσετε τεμαχισμό συμβολοσειρών ή ενσωματωμένες μεθόδους για να αντιστρέψετε τις συμβολοσειρές.
  • Για να ελέγξετε αν δύο συμβολοσειρές είναι αναγράμματα, ελέγξτε αν τα ταξινομημένα αντίγραφά τους είναι ίσα. Και για να ταξινομήσετε μια συμβολοσειρά, χρησιμοποιήστε την ενσωματωμένη συνάρτηση sorted().
  • Για να επαληθεύσετε εάν ένα όνομα βρίσκεται σε πεζά κεφαλαία τίτλου, χρησιμοποιήστε τη μέθοδο .istitle() για έλεγχο και τη μέθοδο .title() για να αποκτήσετε ένα αντίγραφο της συμβολοσειράς με κεφαλαία τίτλο.

Ελπίζω να σας άρεσε αυτό το σεμινάριο για τις χορδές Python. Ως επόμενο βήμα, μάθετε πώς να χρησιμοποιείτε κατανοήσεις λιστών στην Python ή μάθετε για τον μη ισότιμο τελεστή στην Python.

Καλή μάθηση και κωδικοποίηση!🎉