Σημειώσεις

Προηγούμενο

Επόμενο

Συμβολοσειρές (Strings)

Μπορούμε να γράψουμε ακολουθίες χαρακτήρων, τα όρια των οποίων καθορίζονται από απλές (') ή διπλές (") αποστρόφους. Αυτές θα τις ονομάζουμε συμβολοσειρές (strings).

Παραδείγματα.

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


>>> a = 'Nick'
>>> b = 'Papadakis'
>>> c = "Papadopoulos"

Mπορούμε να εφαρμόσουμε σε συμβολοσειρές τους τελεστές πρόσθεσης (+) και πολλπλασιασμού (*).


>>> onoma = a + b
>>> print(onoma)
NickPapadakis
>>> onoma = a + " " + b
>>> print(onoma)
Nick Papadakis
>>> 2*a
'NickNick'
>>> year_in = 2018
>>> print(onoma,"came to Crete in",year_in)
Nick Papadakis came to Crete in 2018

Mπορούμε να βρούμε το μήκος μίας συμβολοσειράς, δηλαδή, τον αριθμό των χαρακτήρων από τις οποίες αποτελείται.


>>> len(onoma)
14

Δείκτες

Κάθε χαρακτήρας σε μία συμβολοσειρά έχει αριθμό θέσης (δείκτη, index). Η αρίθμηση ξεκινάει από το 0 και ο τελευταίος χαρακτήρας μιας συμβολοσειράς με μήκος n έχει δείκτη n-1.


>>> len(onoma)
14
>>> onoma[0]
'N'
>>> onoma[13]
's'
>>> onoma[1]
'i'

Τεμαχισμός (Slicing).

Μπορούμε να επιλέξουμε ένα τμήμα της συμβολοσειράς. Ο συμβολισμός onoma[start:end] αναφέρεται σε ένα τμήμα της αρχικής συμβολοσειράς, ειδικότερα στους χαρακτήρες της συμβολοσειράς onoma που βρίσκονται στις θέσεις start, start+1,..., end-1.


>>> onoma[0:4]
'Nick'
>>> onoma[1:4]
'ick'

Η θέση κάθε χαρακτήρα θέσης μπορεί επίσης να καθορισθεί μετρώντας από το τέλος της συμβολοσειράς (string).


>>> s = 'Nick'
>>> s[-1]
'k'
>>> s[-2:]
'ck'

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

Παράδειγμα.

Αν το μήκος της συμβολοσειράς είναι n τότε η αρίθμηση (από το τέλος) ξεκινάει από το -n. Η συνολική συμβολοσειρά μπορεί να αναφερθεί ως s[-n:].


>>> s = 'Nick'
>>> s[-4:]
'Nick'
>>> s[-4:-1]
'Nic'

Μπορούμε να γράψουμε [start:end:step] για να αναφερθούμε στις θέσεις μεταξύ start και end-1 με βήμα step.


>>> s1 = 'Take'
>>> s2 = 'Make'
>>> s3 = 'Fake'
>>> s = s1 + s2 + s3
>>> s
'TakeMakeFake'
>>> len(s)
12
>>> s[0:12:4]
'TMF'

strings: μη-μεταλλάξιμα

Στις μεταβλητές τύπου str, δηλαδή, στις μεταβλητές που περιέχουν συμβολοσειρές, δεν μπορούμε να επέμβουμε και να κάνουμε αλλαγές μέρους αυτών. Για παράδειγμα, αν s='nikos' δεν υπάρχει δυνατότητα να γίνει αλλαγή του πρώτου γράμματος από 'n' σε 'N'. Λέμε ότι οι μεταβλητές τύπου str είναι μη μεταλλάξιμες, ή ότι ο τύπους str είναι μη-μεταλλάξιμος τύπος.

Παράδειγμα.

Μπορούμε να πάρουμε μέρος μίας συμβολοσειράς (τεμαχισμός), αλλά δεν μπορούμε να αλλάξουμε μέρος μίας συμβολοσειράς.


>>> s = 'nikos'
>>> a = s[0]
>>> print(a)
n
>>> s[0] = 'N'
Traceback (most recent call last):
File "", line 1, in 
    TypeError: 'str' object does not support item assignment

Παράδειγμα.

Μπορούμε, βέβαια, να εξαλείψουμε το περιεχόμενο μίας μεταβλητής str και να αναθέσουμε σε αυτή μία άλλη τιμή.


>>> s = 'Nikos'
>>> print(s)
Nikos
>>> s = 'Nikolaos'
>>> print(s)
Nikolaos

Άσκηση.

Αν το όνομά σας είναι 'Papadopoulos' (ή 'Stamatopoulos' κλπ), μετατρέψτε το σε κρητικό, δηλαδή, 'Papadakis' (ή 'Stamatakis' κλπ). [Υπόδειξη: χρησιμοποιήστε τεμαχισμό συμβολοσειρών.]


>>> onoma = 'Papadopoulos'
>>> onoma = onoma[:-7] + 'akis'
>>> print(onoma)
Papadakis

Είσοδος δεδομένων

Μπορούμε να εισάγουμε δεδομένα (από το πληκτρολόγιο) κατά την διάρκεια της εκτέλεσης του προγράμματός μας. Αυτό γίνεται με τη συνάρτηση input. Η input δέχεται ένα όρισμα (προαιρετικό) και αυτό τυπώνεται στην οθόνη κατά την εκτέλεση του προγράμματος ως μια προτροπή (prompt) στο χρήστη να εισαγάγει δεδομένα. Οτιδήποτε εισάγει ο χρήστης αποθηκεύεται ως ακολουθία χαρακτήρων και εκχωρείται στη μεταβλητή αριστερά του ίσον (=).


>>> name = input('What is your name? ')
What is your name? Barack Obama
>>> print('Hello,', name)
Hello, Barack Obama
>>> age = input('How old are you? ')
How old are you? 42
>>> print(age)
42
>>> type(age)
<class 'str'>

Παρατηρήστε ότι ο τύπος της μεταβλητής name αλλά και της age είναι str, δηλαδή ακολουθία χαρακτήρων (και όχι int που ίσως να περίμενε κάποιος). Μπορούμε όμως να μετατρέψουμε τη μεταβλητή age σε ακέραιο γράφοντας int(age) και με αυτό τον τρόπο αυτή μπορεί να χρησιμοποιηθεί σε αριθμητικές εκφράσεις.


>>> age = input('How old are you? ')
How old are you? 42
>>> my_age = 25
>>> print('You are', int(age)-my_age, 'years older than I am!')
You are 17 years older than I am!

Παράδειγμα.

Μπορούμε επίσης να περάσουμε το αποτέλεσμα της input απ' ευθείας σε μία άλλη συνάρτηση, π.χ., στην float.


>>> price = float(input('How much for the apples? '))
How much for the apples? 1.79
>>> type(price)
<class 'float'>
>>> kilos = int(input('How many kilos of apples? '))
How many kilos of apples? 4
>>> type(kilos)
<class 'int'>
>>> cost = price*kilos
>>> print('Total cost',cost)
Total cost 7.16

Ειδικότερα είδη strings

Escape χαρακτήρες.

Υπάρχουν χαρακτήρες με ειδική σημασία και ήδη έχουμε δει τέτοιους. Η απόστροφος (' και ") καθορίζουν την αρχή και το τέλος μιας συμβολοσειράς. Μπορούμε να γράψουμε \' και \" για να μετατρέψουμε τις αποστρόφους σε απλούς χαρακτήρες (χωρίς την ειδική τους σημασία). Η πλάγια κάθετος \ (backslash) λέγεται escape χαρακτήρας ενώ η ακολουθία χαρακτήρων \' ή \" λέγεται escape ακολουθία. Για την πλάγια κάθετο έχουμε την escape ακολουθία \\.

Παράδειγμα.


>>> print('That\'s do nice!')
That's do nice!
>>> print('\\ That\'s do nice! \\')
\ That's do nice! \

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

  1. \n   Αλλαγής γραμμής.
  2. \t   Προσθήκη tab.
  3. \b   Επιστροφή μίας θέσης πίσω.
  4. \a   Παραγωγή ήχου.

Παράδειγμα.


>>> print('Nikos\nManolis\nMihalis')
Nikos
Manolis
Mihalis

Η λειτουργικότητα του escape χαρακτήρα \ αυξάνεται εάν θέσουμε το r μπροστά στην συμβολοσειρά (π.χ., γράφουμε r'Ma\nolis') οπότε λέμε ότι έχουμε ένα raw string. Στα raw strings το \ είναι μέρος της συμβολοσειράς ενώ επιπλέον οι χαρακτήρες που το ακολουθούν ερμηνεύονται ως απλοί χαρακτήρες.

Παράδειγμα.


>>> print(r'Ma\nolis')
Ma\nolis
>>> print(r'C:\a\long\path\name')
C:\a\long\path\name
>>> print(r'\'')
\'
>>> print(r'\n')
\n
>>>

Μπορούμε να γράψουμε συμβολοσειρές οι οποίες να εκτείνονται σε περισσότερες από μία γραμμή. Αυτές πρέπει να περιέχονται σε τριπλές αποστρόφους """...""" ή '''...'''

Παράδειγμα.

Οι στοίχοι ενός ποιήματος μπορούν εύκολα να εγγραφούν σε μεταβλητή string με χρήση τριπλών αποστρόφων.


>>> s = '''This then is I,
... born for small Korai and the islands of the Aegean;
... lover of the deer\'s leaping
... and priest of the olive leaves;
drinker of sun and killer of grasshoppers.'''
>>> print(s)
This then is I,
born for small Korai and the islands of the Aegean;
lover of the deer's leaping
and priest of the olive leaves;
drinker of sun and killer of grasshoppers.

Μελέτη

Βιβλιογραφία

  1. Δ. Καρολίδης, Μαθαίνετε εύκολα python.
  2. Κ. Μαγκούτης, Χ. Νικολάου, Εισαγωγή στον αντικειμενοστραφή προγραμματισμό με Python, (Αποθετήριο "Κάλλιπος", 2016) - Κεφάλαιο 2. Τιμές, τύποι, μεταβλητές, λέξεις κλειδιά, εντολές.
  3. Strings, Python documentation.