Μια συμβολοσειρά είναι μια ακολουθία χαρακτήρων. Μπορείτε να προσπελάσετε τους χαρακτήρες, έναν κάθε φορά, με τον τελεστή αγκύλης:
>>> φρούτο = 'banana'
>>> γράμμα = φρούτο[1]
Η δεύτερη πρόταση εξάγει τον χαρακτήρα στη θέση 1 από τη μεταβλητή φρούτο
και τον εκχωρεί στη μεταβλητή γράμμα
.
Η έκφραση σε αγκύλες ονομάζεται δείκτης (index). Ο δείκτης υποδεικνύει ποιον χαρακτήρα της ακολουθίας θέλετε (εξ ου και το όνομα).
Αλλά μπορεί να μην πάρετε αυτό που περιμένετε:
>>> print(γράμμα)
a
Για τους περισσότερους ανθρώπους, το πρώτο γράμμα του “banana” είναι «b», όχι «a». Αλλά στην Python, ο δείκτης λειτουργεί κάπως διαφορετικά. Για την αρχή της συμβολοσειράς, για το πρώτο γράμμα είναι μηδέν.
>>> γράμμα = φρούτο[0]
>>> print(γράμμα)
b
Έτσι το “b” είναι το 0ό γράμμα (“μηδεκικ-ό”) του “banana”, το “a” είναι το 1ο γράμμα (“πρώτ-ο”), και το “n” είναι το 2ο (“δεύτερ-ο”) γράμμα.
Μπορείτε να χρησιμοποιήσετε οποιαδήποτε έκφραση, συμπεριλαμβανομένων μεταβλητών και τελεστών, σαν ένα δείκτη, αλλά η τιμή του δείκτη πρέπει να είναι ακέραιος αριθμός. Αλλιώς θα πάρετε:
>>> γράμμα = φρούτο[1.5]
TypeError: string indices must be integers
len
.
Η len
είναι μια ενσωματωμένη συνάρτηση που επιστρέφει τον αριθμό των χαρακτήρων σε μια συμβολοσειρά:
>>> φρούτο = 'banana'
>>> len(φρούτο)
6
Για να εξάγετε το τελευταίο γράμμα μιας συμβολοσειράς, μπορεί να μπείτε στον πειρασμό να δοκιμάσετε κάτι σαν αυτό:
>>> μήκος = len(φρούτο)
>>> τελευταίο = φρούτο[μήκος]
IndexError: string index out of range
Ο λόγος για το IndexError
είναι ότι δεν υπάρχει γράμμα στο “banana” με δείκτη 6. Εφόσον αρχίσαμε να μετράμε από το μηδέν, τα έξι γράμματα αριθμούνται από το 0 έως το 5. Για να πάρετε τον τελευταίο χαρακτήρα, πρέπει να αφαιρέσετε 1 από το μήκος
:
>>> τελευταίο = φρούτο[μήκος-1]
>>> print(τελευταίο)
a
Εναλλακτικά, μπορείτε να χρησιμοποιήσετε αρνητικούς δείκτες, οι οποίοι μετρούν αντίστροφα από το τέλος της συμβολοσειράς. Η έκφραση φρούτο[-1]
δίνει το τελευταίο γράμμα, το φρούτο[-2]
δίνει το δεύτερο από το τέλος και ούτω καθεξής.
Πολλοί υπολογισμοί εμπλέκουν την επεξεργασία μιας συμβολοσειράς, έναν χαρακτήρα τη φορά. Συχνά ξεκινούν από την αρχή, επιλέγουν κάθε χαρακτήρα με τη σειρά, κάνουν κάτι σε αυτόν και συνεχίζουν μέχρι το τέλος. Αυτό το μοτίβο επεξεργασίας ονομάζεται διάσχιση. Ένας τρόπος για να γράψετε μια διάσχιση είναι με έναν βρόχο while
:
δείκτης = 0
while δείκτης < len(φρούτο):
γράμμα = φρούτο[δείκτης]
print(γράμμα)
δείκτης = δείκτης + 1
Αυτός ο βρόχος διασχίζει τη συμβολοσειρά και εμφανίζει κάθε γράμμα σε μια γραμμή, από μόνο του. Η συνθήκη βρόχου είναι δείκτης < len(φρούτο)
, οπότε όταν ο δείκτης
είναι ίσος με το μήκος της συμβολοσειράς, η συνθήκη είναι ψευδής και το σώμα του βρόχου δεν εκτελείται. Ο τελευταίος χαρακτήρας που προσπελαύνεται είναι αυτός με τον δείκτη len(fruit)-1
, που είναι και ο τελευταίος χαρακτήρας της συμβολοσειράς.
Άσκηση 1: Γράψτε έναν βρόχο while
που ξεκινά από τον τελευταίο χαρακτήρα της συμβολοσειράς και πηγαίνει προς τα πίσω μέχρι τον πρώτο χαρακτήρα της συμβολοσειράς, τυπώνοντας κάθε γράμμα σε ξεχωριστή γραμμή, απλά με ανάποδη σειρά.
Ένας άλλος τρόπος για να γράψετε μια διάσχιση είναι με έναν βρόχο for
:
for char in fruit:
print(char)
Κάθε φορά που επαναλαμβάνεται ο βρόχος, ο επόμενος χαρακτήρας της συμβολοσειράς εκχωρείται στη μεταβλητή char
. Ο βρόχος συνεχίζεται μέχρι να προσπελάσουμε όλους τους χαρακτήρες.
Ένα τμήμα μιας συμβολοσειράς ονομάζεται slice. Η επιλογή ενός τμήματος είναι παρόμοια με την επιλογή ενός χαρακτήρα:
>>> s = 'Monty Python'
>>> print(s[0:5])
Monty
>>> print(s[6:12])
Python
Ο τελεστής [n:m]
επιστρέφει το τμήμα της συμβολοσειράς από τον “n-ιοστό” χαρακτήρα μέχρι τον “m-ιοστό” χαρακτήρα, συμπεριλαμβανομένου του πρώτου αλλά εξαιρώντας τον τελευταίο.
Εάν παραλείψετε τον πρώτο δείκτη (πριν από την άνω και κάτω τελεία), το τμήμα που λαμβάνετε ξεκινά από την αρχή της συμβολοσειράς. Εάν παραλείψετε τον δεύτερο δείκτη, το τμήμα φτάνει μέχρι και το τέλος της συμβολοσειράς:
>>> φρούτο = 'banana'
>>> φρούτο[:3]
'ban'
>>> φρούτο[3:]
'ana'
Εάν ο πρώτος δείκτης είναι μεγαλύτερος ή ίσος με τον δεύτερο, το αποτέλεσμα είναι μια κενή συμβολοσειρά, που αντιπροσωπεύεται από δύο εισαγωγικά:
>>> φρούτο = 'banana'
>>> φρούτο[3:3]
''
Μια κενή συμβολοσειρά δεν περιέχει χαρακτήρες και έχει μήκος 0, αλλά εκτός από αυτό, είναι ίδια με οποιαδήποτε άλλη συμβολοσειρά.
Άσκηση 2: Δεδομένου ότι το φρούτο
είναι μια συμβολοσειρά, τι σημαίνει φρούτο[:]
;
Είναι δελεαστικό να χρησιμοποιήσετε τον τελεστή στην αριστερή πλευρά μιας ανάθεσης, με την πρόθεση να αλλάξετε έναν χαρακτήρα σε μια συμβολοσειρά. Για παράδειγμα:
>>> greeting = 'Hello, world!'
>>> greeting[0] = 'J'
TypeError: 'str' object does not support item assignment
Το “αντικείμενο - object” σε αυτήν την περίπτωση είναι η συμβολοσειρά και το “στοιχείο - item” είναι ο χαρακτήρας που προσπαθήσατε να τροποποιήσετε. Προς το παρόν, ένα αντικείμενο είναι το ίδιο πράγμα με μια τιμή, αλλά θα βελτιώσουμε αυτόν τον ορισμό αργότερα. Ένα στοιχείο είναι μία από τις τιμές σε μια ακολουθία.
Το σφάλμα αυτό προκλήθηκε γιατί οι συμβολοσειρές είναι αμετάβλητες, πράγμα που σημαίνει ότι δεν μπορείτε να τροποποιήσετε μια υπάρχουσα συμβολοσειρά. Το καλύτερο που μπορείτε να κάνετε είναι να δημιουργήσετε μια νέα συμβολοσειρά που θα είναι μια παραλλαγή της αρχικής:
>>> greeting = 'Hello, world!'
>>> new_greeting = 'J' + greeting[1:]
>>> print(new_greeting)
Jello, world!
Αυτό το παράδειγμα συνενώνει ένα νέο πρώτο γράμμα με ένα τμήμα του greeting
. Δεν έχει καμία επίδραση στην αρχική συμβολοσειρά.
Το παρακάτω πρόγραμμα μετράει πόσες φορές εμφανίζεται το γράμμα “a” σε μια συμβολοσειρά:
λέξη = 'banana'
πλήθος = 0
for γράμμα in λέξη:
if γράμμα == 'a':
πλήθος = πλήθος + 1
print(πλήθος)
Αυτό το πρόγραμμα παρουσιάζει ένα άλλο μοτίβο υπολογισμού που ονομάζεται μετρητής. Η μεταβλητή πλήθος
αρχικοποιείται σε 0 και στη συνέχεια αυξάνεται κάθε φορά που βρίσκεται ένα “a”. Όταν ο βρόχος τερματίζει, το πλήθος
περιέχει το αποτέλεσμα: το πλήθος των α.
Άσκηση 3: Ενθυλακώστε αυτόν τον κώδικα σε μια συνάρτηση με όνομα count
και γενικεύστε τον έτσι ώστε να δέχεται τη συμβολοσειρά και το γράμμα ως ορίσματα.
in
Η λέξη “in” είναι ένας λογικός τελεστής που δέχεται δύο συμβολοσειρές και επιστρέφει True
εάν η πρώτη είναι τμήμα της δεύτερης:
>>> 'a' in 'banana'
True
>>> 'seed' in 'banana'
False
Οι τελεστές σύγκρισης λειτουργούν σε συμβολοσειρές. Για να δείτε αν δύο συμβολοσειρές είναι ίσες:
if λέξη == 'banana':
print('Όλα εντάξει, bananas.')
Άλλοι τελεστές σύγκρισης που είναι χρήσιμοι για την τοποθέτηση λέξεων σε αλφαβητική σειρά:
if λέξη < 'banana':
print('Η λέξη σου, ' + λέξη + ', προηγείται της banana.')
elif λέξη > 'banana':
print('Η λέξη σου, ' + λέξη + ', έπεται της banana.')
else:
print('Όλα εντάξει, bananas.')
Η Python δεν χειρίζεται τα κεφαλαία και τα πεζά γράμματα με τον ίδιο τρόπο που το κάνουν οι άνθρωποι. Όλα τα κεφαλαία γράμματα θεωρούνται μικρότερα από όλα τα πεζά, οπότε:
Η λέξη σου, Pineapple, προηγείται της banana.
Ένας συνηθισμένος τρόπος αντιμετώπισης αυτού του προβλήματος είναι η μετατροπή των συμβολοσειρών σε τυπική μορφή, όπως όλα πεζά, πριν από την εκτέλεση της σύγκρισης. Έχετέ το υπόψη σας, σε περίπτωση που χρειαστεί να υπερασπιστείτε τον εαυτό σας ενάντια σε έναν άνδρα οπλισμένο με έναν ανανά (Pineapple) (αμερικάνικη στρατιωτική αργκό όπου ο ανανάς σημαίνει χειροβομβίδα).
Οι συμβολοσειρές (str) είναι ένα παράδειγμα αντικειμένων Python. Ένα αντικείμενο περιέχει τόσο δεδομένα (την ίδια τη συμβολοσειρά) όσο και μεθόδους, οι οποίες είναι ουσιαστικά συναρτήσεις που είναι ενσωματωμένες στο αντικείμενο και είναι διαθέσιμες σε κάθε στιγμιότυπο - instance του αντικειμένου.
Η Python έχει μια συνάρτηση που ονομάζεται dir
, η οποία παραθέτει τις διαθέσιμες μεθόδους για κάποιο αντικείμενο. Η συνάρτηση type
δείχνει τον τύπο ενός αντικειμένου και η συνάρτηση dir
δείχνει τις διαθέσιμες μεθόδους.
>>> stuff = 'Hello world'
>>> type(stuff)
<class 'str'>
>>> dir(stuff)
['capitalize', 'casefold', 'center', 'count', 'encode',
'endswith', 'expandtabs', 'find', 'format', 'format_map',
'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit',
'isidentifier', 'islower', 'isnumeric', 'isprintable',
'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower',
'lstrip', 'maketrans', 'partition', 'replace', 'rfind',
'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip',
'split', 'splitlines', 'startswith', 'strip', 'swapcase',
'title', 'translate', 'upper', 'zfill']
>>> help(str.capitalize)
Help on method_descriptor:
capitalize(...)
S.capitalize() -> str
Return a capitalized version of S, i.e. make the first character
have upper case and the rest lower case.
>>>
Ενώ η συνάρτηση dir
παραθέτει τις μεθόδους και μπορείτε να χρησιμοποιήσετε τη help
για να λάβετε κάποια απλή τεκμηρίωση σε μια μέθοδο, μια καλύτερη πηγή τεκμηρίωσης για τις μεθόδους συμβολοσειράς θα ήταν https://docs.python.org/library/stdtypes.html#string-methods.
Η κλήση μιας μεθόδου είναι παρόμοια με την κλήση μιας συνάρτησης (δέχεται ορίσματα και επιστρέφει μια τιμή), αλλά η σύνταξη είναι διαφορετική. Καλούμε μια μέθοδο προσθέτοντας το όνομα της μεθόδου στο τέλος του ονόματος της μεταβλητής, χρησιμοποιώντας την τελεία ως οριοθέτη.
Για παράδειγμα, η μέθοδος upper
δέχεται μια συμβολοσειρά και επιστρέφει μια νέα συμβολοσειρά με όλα τα γράμματα κεφαλαία:
Αντί για τη σύνταξη των συναρτήσεων upper(word)
, χρησιμοποιεί τη σύνταξη των μεθόδων λέξη.upper()
.
>>> λέξη = 'banana'
>>> νέα_λέξη = λέξη.upper()
>>> print(νέα_λέξη)
BANANA
Αυτή η μορφή διαχωρισμού με τελεία καθορίζει το όνομα της μεθόδου, upper
και το όνομα της συμβολοσειράς λέξη
, για την εφαρμογή της μεθόδου. Οι κενές παρενθέσεις υποδεικνύουν ότι αυτή η μέθοδος δεν δέχεται όρισμα.
Μια κλήση μεθόδου ονομάζεται επίκληση - invocation. Σε αυτή την περίπτωση, θα λέγαμε ότι επικαλούμαστε upper
στην λέξη
.
Για παράδειγμα, υπάρχει μια μέθοδος συμβολοσειράς με το όνομα find
που αναζητά τη θέση μιας συμβολοσειράς μέσα σε μια άλλη:
>>> λέξη = 'banana'
>>> δείκτης = λέξη.find('a')
>>> print(δείκτης)
1
Σε αυτό το παράδειγμα, επικαλούμαστε την find
στη λέξη
και δίνουμε το γράμμα που αναζητούμε ως παράμετρο.
Η μέθοδος find
μπορεί να βρει υποσυμβολοσειρές καθώς και χαρακτήρες:
>>> λέξη.find('na')
2
Μπορεί να πάρει ως δεύτερο όρισμα τον δείκτη από όπου πρέπει να ξεκινήσει:
>>> λέξη.find('na', 3)
4
Μια συνηθισμένη εργασία είναι να αφαιρέσετε τους λευκούς χαρακτήρες (κενά, tab ή νέες γραμμές) από την αρχή και το τέλος μιας συμβολοσειράς χρησιμοποιώντας τη μέθοδο strip
:
>>> γραμμή = ' Πάμε λοιπόν '
>>> γραμμή.strip()
'Πάμε λοιπόν'
Ορισμένες μέθοδοι όπως το startswith
επιστρέφουν λογικές τιμές.
>>> γραμμή = 'Καλή σας μέρα'
>>> γραμμή.startswith('Καλή')
True
>>> γραμμή.startswith('κ')
False
Θα προσέξατε ότι το startswith
κάνει διάκριση πεζών-κεφαλαίων, οπότε μερικές φορές παίρνουμε μια γραμμή και μετατρέπουμε όλα τα γράμματα σε πεζά προτού κάνουμε οποιονδήποτε έλεγχο χρησιμοποιώντας τη μέθοδο lower
.
>>> γραμμή = 'Καλή σας μέρα'
>>> γραμμή.startswith('κ')
False
>>> γραμμή.lower()
'καλή σας μέρα'
>>> γραμμή.lower().startswith('κ')
True
Στο τελευταίο παράδειγμα, καλείται η μέθοδος lower
και στη συνέχεια χρησιμοποιούμε τη startswith
για να δούμε αν η πεζή συμβολοσειρά που προέκυψε ξεκινά με το γράμμα “κ”. Εφόσον είμαστε προσεκτικοί με τη σειρά, μπορούμε να κάνουμε πολλές κλήσεις μεθόδων σε μία μόνο έκφραση.
Άσκηση 4: Υπάρχει μια μέθοδος συμβολοσειρών που ονομάζεται count
που είναι παρόμοια με τη συνάρτηση που δημιουργήσατε στην προηγούμενη άσκηση. Διαβάστε την τεκμηρίωση αυτής της μεθόδου στη διεύθυνση:
https://docs.python.org/library/stdtypes.html#string-methods
Γράψτε μια κλήση της, που μετράει πόσες φορές εμφανίζεται το γράμμα “a” στο “banana”.
Συχνά, θέλουμε να ψάξουμε σε μια συμβολοσειρά και να βρούμε μια υποσυμβολοσειρά της. Για παράδειγμα, αν μας παρουσιαζόταν μια σειρά γραμμών μορφοποιημένες όλες ως εξής:
From stephen.marquard@
uct.ac.za
Sat Jan 5 09:14:16 2008
και θέλαμε να εξάγουμε μόνο το δεύτερο μισό της διεύθυνσης (δηλαδή το uct.ac.za
) από κάθε γραμμή, θα μπορούσαμε να το κάνουμε χρησιμοποιώντας τη μέθοδο find
και την διαμέριση συμβολοσειράς.
Αρχικά, θα βρούμε τη θέση του συμβόλου at ( @ )
στη συμβολοσειρά. Στη συνέχεια, θα βρούμε τη θέση του πρώτου διαστήματος μετά το σύμβολο at
και, στη συνέχεια, θα χρησιμοποιήσουμε τη διαμέριση συμβολοσειράς για να εξαγάγουμε το τμήμα της συμβολοσειράς που αναζητούμε.
>>> data = 'From [email protected] Sat Jan 5 09:14:16 2008'
>>> θέσηat = data.find('@')
>>> print(θέσηat)
21
>>> θέση_τέλους = data.find(' ',θέσηat)
>>> print(θέση_τέλους)
31
>>> host = data[θέσηat+1:θέση_τέλους]
>>> print(host)
uct.ac.za
>>>
Χρησιμοποιούμε μια έκδοση της μεθόδου find
που μας επιτρέπει να καθορίσουμε μια θέση στη συμβολοσειρά από όπου θέλουμε να αρχίσει να ψάχνει το find
. Όταν τεμαχίζουμε, εξάγουμε τους χαρακτήρες “έναν πέρα από το σύμβολο at έως, αλλά χωρίς αυτόν, τον χαρακτήρα διαστήματος”.
Η τεκμηρίωση για τη μέθοδο find
είναι διαθέσιμη στη διεύθυνση
https://docs.python.org/library/stdtypes.html#string-methods.
Ο τελεστής μορφής, %
μας επιτρέπει να κατασκευάσουμε συμβολοσειρές, αντικαθιστώντας τμήματα των συμβολοσειρών με δεδομένα που είναι αποθηκευμένα σε μεταβλητές. Όταν εφαρμόζεται σε ακέραιους αριθμούς, το %
είναι ο τελεστής ακέραιου υπολοίπου. Αλλά όταν ο πρώτος τελεστής είναι μια συμβολοσειρά, το %
είναι ο τελεστής μορφοποίησης.
Ο πρώτος τελεστέος είναι η συμβολοσειρά μορφής (format string), η οποία περιέχει μία ή περισσότερες ακολουθίες μορφής (format sequences) που καθορίζουν την μορφή του δεύτερου τελεστέου. Το αποτέλεσμα είναι μια συμβολοσειρά.
Για παράδειγμα, η ακολουθία μορφής %d
σημαίνει ότι ο δεύτερος τελεστέος πρέπει να είναι ακέραιος (το “d” σημαίνει “decimal”):
>>> καμήλες = 42
>>> '%d' % καμήλες
'42'
Το αποτέλεσμα είναι η συμβολοσειρά ‘42’, η οποία δεν πρέπει να συγχέεται με την ακέραια τιμή 42.
Μια ακολουθία μορφής μπορεί να εμφανιστεί οπουδήποτε μέσα στη συμβολοσειρά, ώστε να μπορείτε να ενσωματώσετε μια τιμή σε μια πρόταση:
>>> καμήλες = 42
>>> 'Έχω εντοπίσει %d καμήλες.' % καμήλες
'Έχω εντοπίσει 42 καμήλες.'
Εάν υπάρχουν περισσότερες από μία ακολουθίες μορφής στη συμβολοσειρά, το δεύτερο όρισμα πρέπει να είναι πλειάδα (tuple)1. Κάθε ακολουθία μορφής αντιστοιχίζεται με ένα στοιχείο της πλειάδας, με τη σειρά.
Το παρακάτω παράδειγμα χρησιμοποιεί το %d
για να αναπαραστήσει έναν ακέραιο, το %g
για να αναπαραστήσει έναν αριθμό κινητής υποδιαστολής (μην ρωτήσετε γιατί) και το %s
για να αναπαραστήσει μια συμβολοσειρά:
>>> 'Σε %d χρόνια έχω εντοπίσει %g %s.' % (3, 0.1, 'καμήλες')
'Σε 3 χρόνια έχω εντοπίσει 0.1 καμήλες.'
Ο αριθμός των στοιχείων στην πλειάδα πρέπει να ταιριάζει με τον αριθμό των ακολουθιών μορφής στη συμβολοσειρά. Οι τύποι των στοιχείων πρέπει επίσης να ταιριάζουν με τις ακολουθίες μορφής:
>>> '%d %d %d' % (1, 2)
TypeError: not enough arguments for format string
>>> '%d' % 'dollars'
TypeError: %d format: a number is required, not str
Στο πρώτο παράδειγμα, δεν υπάρχουν αρκετά στοιχεία, στο δεύτερο, το στοιχείο είναι λάθος τύπου.
Ο τελεστής μορφής είναι ισχυρός, αλλά μπορεί να είναι δύσκολος στη χρήση του. Μπορείτε να διαβάσετε περισσότερα για αυτόν στο
https://docs.python.org/library/stdtypes.html#printf-style-string-formatting.
Μια δεξιότητα που πρέπει να καλλιεργήσετε καθώς προγραμματίζετε είναι να ρωτάτε πάντα τον εαυτό σας: “Τι μπορεί να πάει στραβά εδώ;” ή εναλλακτικά, “Τι τρελό πράγμα μπορεί να κάνει ο χρήστης μας για να καταρρεύσει το (φαινομενικά) τέλειο πρόγραμμά μας;”
Για παράδειγμα, δείτε το πρόγραμμα που χρησιμοποιήσαμε για να εξηγήσουμε τον βρόχο while
στο κεφάλαιο για την επανάληψη:
while True:
γραμμή = input('> ')
if γραμμή[0] == '#':
continue
if γραμμή == 'τέλος':
break
print(γραμμή)
print('Τέλος!')
# Code: http://www.py4e.com/code3/copytildone2.py
Δείτε τι συμβαίνει όταν ο χρήστης εισάγει μια κενή γραμμή στην είσοδο:
> hello there
hello there
> # don't print this
> print this!
print this!
>
Traceback (most recent call last):
File "copytildone.py", line 3, in <module>
if γραμμή[0] == '#':
IndexError: string index out of range
Ο κώδικας λειτουργεί καλά μέχρι να εμφανιστεί μια κενή γραμμή. Τότε δεν υπάρχει μηδενικός χαρακτήρας, οπότε παίρνουμε ένα traceback. Υπάρχουν δύο λύσεις για να γίνει η γραμμή τρία “ασφαλής” ακόμα κι αν η γραμμή είναι άδεια.
Μια δυνατότητα είναι απλώς να χρησιμοποιήσετε τη μέθοδο startswith
που επιστρέφει False
εάν η συμβολοσειρά είναι κενή.
if γραμμή.startswith('#'):
Ένας άλλος τρόπος είναι να γράψετε, για ασφάλεια, την εντολή if
χρησιμοποιώντας το μοτίβο φύλακα και να βεβαιωθείτε ότι η δεύτερη λογική έκφραση αξιολογείται μόνο όπου υπάρχει τουλάχιστον ένας χαρακτήρας στη συμβολοσειρά:
if len(γραμμή) > 0 and γραμμή[0] == '#':
%d
, που καθορίζει τον τρόπο μορφοποίησης μιας τιμής.
%
, που παίρνει μια συμβολοσειρά μορφής και μια πλειάδα και δημιουργεί μια συμβολοσειρά που περιλαμβάνει τα στοιχεία της πλειάδας μορφοποιημένα όπως καθορίζεται από τη συμβολοσειρά μορφής.
Άσκηση 5: Πάρτε τον ακόλουθο κώδικα Python που αποθηκεύει μια συμβολοσειρά:
str = 'X-DSPAM-Confidence:
0.8475
'
Χρησιμοποιήστε find
και διαμέριση συμβολοσειράς για να εξαγάγετε το τμήμα της συμβολοσειράς μετά τον χαρακτήρα άνω και κάτω τελείας και στη συνέχεια χρησιμοποιήστε τη συνάρτηση float
για να μετατρέψετε τη συμβολοσειρά που εξαγάγατε σε αριθμό κινητής υποδιαστολής.
Άσκηση 6: Διαβάστε την τεκμηρίωση των μεθόδων συμβολοσειράς στο https://docs.python.org/library/stdtypes.html#string-methods Ίσως θελήσετε να πειραματιστείτε με μερικά από αυτά για να βεβαιωθείτε ότι καταλαβαίνετε πώς λειτουργούν. Τα strip
και replace
είναι ιδιαίτερα χρήσιμα.
Η τεκμηρίωση χρησιμοποιεί μια σύνταξη που μπορεί να προκαλεί σύγχυση. Για παράδειγμα, στο find(sub[, start[, end]])
, οι αγκύλες υποδεικνύουν προαιρετικά ορίσματα. Επομένως, το sub
απαιτείται, αλλά το start
είναι προαιρετικό και εάν συμπεριλάβετε το start
, τότε το end
είναι προαιρετικό.
Η πλειάδα είναι μια ακολουθία τιμών διαχωρισμένων με κόμμα μέσα σε ένα ζεύγος παρενθέσεων. Θα καλύψουμε τις πλειάδες στο Κεφάλαιο 10↩
Αν εντοπίσετε κάποιο λάθος σε αυτό το βιβλίο μην διστάσετε να μου στείλετε τη διόρθωση στο Github.