Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

2. Τιμές, τύποι δεδομένων και μεταβλητές. Συμβολοσειρές

ΤΜΧΠΠΑ-ΠΘ

Κυριολεκτικές σταθερές (literal constants)

Η κυριολεκτική σταθερά ή τιμή είναι ένας αριθμός, ή χαρακτήρας ή μιά συμβολοσειρά. Για παράδειγμα τα παρακάτω αποτελούν τιμές: 3.25 (στην python η υποδιαστολή ορίζεται με . και όχι ,), “ένα τυχαίο κείμενο”, 5.25e-1. Αυτές οι τιμές δεν μεταβάλλονται κατά τη διάρκεια εκτέλεσης του προγράμματος γι’ αυτό και λέγονται σταθερές. Μπορούν να εκχωρηθούν σε μεταβλητές και να χρησιμοποιηθούν σαν τελεστέοι σε λογικές εκφράσεις ή σαν παραμέτροι σε συναρτήσεις.

Τύποι δεδομένων

Οι τιμές ανήκουν στους παρακάτω τύπους δεδομένων (data types):

  1. Numeric Types

    • int – Ακέραιοι - Integer (πχ, 5, -3, 0)

    • float – Αριθμοί Κινητής υποδιαστολής - Floating-point number (πχ, 3.14, -0.001)

    • complex – Σύνθετοι αριθμοί - Complex number (πχ, 3 + 4j)

  2. Sequence Types (Ordered, Indexable)

    • str – Συμβολοσειρά - String (πχ, “hello”, ‘Python’)

    • list – Μεταβλητή διατεταγμένη συλλογή (λίστες) - Mutable ordered collection (πχ, [1, 2, 3])

    • tuple – Αμεταβλητή διατεταγμένη συλλογή (πλειάδες) - Immutable ordered collection (πχ, (1, 2, 3))

  3. Mapping Type

    • dict – Ζεύγη κλειδιού-τιμής (λεξικά) - Key-value pairs (πχ, {‘name’: ‘Kostas’, ‘age’: 25})

  4. Set Types

    • set – Αταξινόμητα, μεταβλητά, μοναδικά στοιχεία - Unordered, mutable, unique elements (πχ, {1, 2, 3})

    • frozenset – Αταξινόμητα, αμεταβλητά, μοναδικά στοιχεία - Immutable version of set

  5. Boolean Type

    • bool – Αληθές ή Ψευδές - True or False

  6. Binary Types

    • bytes – Αμετάβλητη ακολουθία byte - Immutable sequence of bytes (πχ., b’hello’)

    • bytearray – Mετάβλητη ακολουθία byte - Mutable sequence of bytes

    • memoryview – Απεικόνιση μνήμης δυαδικών δεδομένων - Memory view of binary data

  7. None Type

    • NoneType – Κενή τιμή - None value

Με την εντολή type ο διερμηνευτής μας απαντάει με τον τύπο της τιμής, όπως παρακάτω:

type("No news, good news.")
str

Η Python είναι Dynamic typing δηλαδή ο τύπος των μεταβλητών δεν προκαθορίζεται κατά την συγγραφή αλλά κατά την εκτέλεση.

Δημιουργία μεταβλητών

Οι μεταβλητές στην Python δημιουργούνται με διάφορους τρόπους με πίο διαδεδομένο την άμεση εκχώρηση τιμών σε αυτές κατά τον εξής τρόπο:

όνομα_μεταβλητής = τιμή

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

animal = 'cat'
cars = ['Renault', 'Alfa Romeo']
temperature = 31.2
is_active = True

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

Κανόνες ονοματοδοσίας μεταβλητών

Τα ονόματα των μεταβλητών στην Python υπακούουν στους παρακάτω κανόνες:

  • Το όνομα μίας μεταβλητής μπορεί να ξεκινά από ένα γράμμα ή από κάτω παύλα.

  • Το όνομα μίας μεταβλητής δεν μπορεί να ξεκινά με αριθμό.

  • Το όνομα μίας μεταβλητής μπορεί να περιέχει μόνο αλφαριθμητικούς χαρακτήρες.

  • Στα ονόματα των μεταβλήτών γίνεται διάκριση ανάμεσα σε πεζά και κεφαλαία (case sensitive).

  • Οι δεσμευμένες λέξεις της Python (keywords) δεν μπορούν να χρησιμοποιηθούν σε ονόματα μεταβλητών.

Σταθερές (Constants)

H Python δεν διαθέτει προκαθορισμένες σταθερές όπως άλλες γλώσσες προγραμματισμού. Όμως κατά σύμβαση και όχι κατά κανόνα έχει συμφωνηθεί οι σταθερές να ονοματίζονται με κεφαλαίους χαρακτήρες. Η αδυναμία της Python στην περίπτωση της δήλωσης σταθερών είναι ότι επιτρέπεται η αλλαγή των τιμών τους Παρακάτω παρατίθεται ένα παράδειγμα δήλωσης σταθερών.

RATIO_FEET_TO_METERS = 3.281
RATIO_LB_TO_KG = 2.205
PI = 3.14

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

Μια συμβολοσειρά είναι μια ακολουθία από χαρακτήρες όπως το "Το πεπρωμένον φυγείν αδύνατον". Μπορεί να οριστεί σε κάθε γλώσσα που υποστηρίζεται από το πρώτυπο Unicode. Οι συμβολοσειρές περικλείονται σε μονά, διπλά ή τριπλά εισαγωγικά.

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

"My name is Bond, James Bond."

'There is no smoke without fire'


'''
No bees no honey, no work no money.
A little is better than none
What’s done cannot be undone
'''
'\nNo bees no honey, no work no money.\nA little is better than none\nWhat’s done cannot be undone\n'

Χαρακτήρες διαφυγής, κενά, νέες γραμμές

Μπορούμε να σπάσουμε μια συμβολοσειρά κατά την συγγραφή σε νέα γραμμή με τον χαρακτήρα \ και κατά την εκτέλεση με τον χαρακτήρα \n π.χ.

message = 'There is no smoke \
without fire'

print(message)
There is no smoke without fire
message = 'There is no smoke \nwithout fire'

print(message)
There is no smoke 
without fire

Ή να ορίσουμε κενά με το \t (χαρακτήρας tab)

message = 'There is no smoke \twithout fire'
print(message)
There is no smoke 	without fire

Ο χαρακτήρας \ είναι χαρακτήρας διαφυγής που απενεργοποιεί την ειδική λειτουργία των παραπάνω ή την παράθεση εισαγωγικών μεσα σε εισαγωγικά.

print('There is no smoke \\n without fire')
There is no smoke \n without fire
print('Where there\'s a will, there\'s a way')
Where there's a will, there's a way

Ανεπεξέργαστες συμβολοσειρές (Raw Strings)

Παρόμοιο αποτέλεσμα με τα παραπάνω πετυχαίνουμε τις ανεπεξέργαστες συμβολοσειρές οι οποίες ορίζονται με ένα r σαν πρόθεμα

print(r"It was made by \n συνέχεια")
It was made by \n συνέχεια

Αφαίρεση κενών

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

departmentA='ΤΜΧΠΑ'
departmentB = ' ΤΜΧΠΑ '
print(departmentA == departmentB) #not equal
False

Για την αφαίρεση των κένων αριστερά, δεξιά ή ταυτόχρονα και στις δύο πλευρές της συμβολοσειρας χρησιμοποιούμε την μέθοδο strip και τις παραλλαγές της rstrip και lstrip

print(departmentB.rstrip())
print(departmentB.lstrip())
print(departmentB.strip())
 ΤΜΧΠΑ
ΤΜΧΠΑ 
ΤΜΧΠΑ

Συνένωση (Concatenation) συμβολοσειρών

Η απλή παράθεση συμβολοσειρών οδηγεί στην συνενωσή τους δηλ.

message = "Curiosity " "killed " 'the ' '''cat'''
print(message)
Curiosity killed the cat

Συνένωση συμβολοσειρών και μεταβλητών

Η συνένωση μεταβλητών και συμβολοσειρών γίνεται με τον τελεστη +.


city='Βόλος'
perifereia='Θεσσαλία'

print('O '+city+' είναι πόλη της Ελλάδα στην ' +perifereia)
O Βόλος είναι πόλη της Ελλάδα στην Θεσσαλία

Η μέθοδος format

Άλλη μια πιο πρακτική μέθοδος κατά την συννένωση μεταβλητών και συμβολοσειρών είναι η μέθοδος format.

print('O {0} έχει υψόμετρο {1} μέτρα'.format("Όλυμπος", 2918))
print('O {} έχει υψόμετρο {} μέτρα'.format("Όλυμπος", 2918))
print('O {name} έχει υψόμετρο {height} μέτρα'.format(name="Σμόλικας", height= 2637 ))
O Όλυμπος έχει υψόμετρο 2918 μέτρα
O Όλυμπος έχει υψόμετρο 2918 μέτρα
O Σμόλικας έχει υψόμετρο 2637 μέτρα

Η μέθοδος F-strings

Τα F-strings έχουν εισαχθεί από την Python 3.6 και παρέχουν ένα εύχρηστο τρόπο να εισάγουμε εκφράσεις (expressions) μέσα σε συμβολοσειρές μέσω της χρήσης {}. Είναι μια πράκτικη που εξασφαλίζει εύκολη συγγραφή και ανάγνωση στον κώδικα σε σχέση με άλλες μεθόδους όπως πχ η μέθοδος .format()

Ακολουθούν μερικά παραδείγματα

name = "Λεωνίδας"
age = 46
print(f"Γεία σου, {name}. Είσαι {age} ετών.")
Γεία σου, Λεωνίδας. Είσαι 46 ετών.
x = 10
y = 5
print(f"Το άθροισμα {x} και {y} είναι {x + y}.")
Το άθροισμα 10 και 5 είναι 15.
pi = 3.1415926535
print(f"π ≈ {pi:.2f}")  # 2 δεκαδικά
print(f"π ≈ {pi:.4f}")  # 4 δεκαδικά
print(f"|{pi:10.4f}|")  # δεξιά στοίχιση σε ένα πλαίσιο 10 χαρακτήρων
print(f"|{pi:<10.4f}|") # αριστερή στοίχιση σε ένα πλαίσιο 10 χαρακτήρων
π ≈ 3.14
π ≈ 3.1416
|    3.1416|
|3.1416    |

Δεσμευμένες λέξεις (reserved words)

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

class="Πρώτο εξάμηνο"
break='Πότε θα κάνουμε διάλειμμα;'

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

import sys
print(f'Python version: {sys.version}')

help("keywords")
Python version: 3.11.6 (main, Sep 30 2024, 20:02:27) [GCC 13.2.0]

Here is a list of the Python keywords.  Enter any keyword to get more help.

False               class               from                or
None                continue            global              pass
True                def                 if                  raise
and                 del                 import              return
as                  elif                in                  try
assert              else                is                  while
async               except              lambda              with
await               finally             nonlocal            yield
break               for                 not                 

Η εντολή help

Γενικά με την εντολή help στην Python καλούμε για βοήθεια και πληροφορίες :

help(print)
Help on built-in function print in module builtins:

print(*args, sep=' ', end='\n', file=None, flush=False)
    Prints the values to a stream, or to sys.stdout by default.
    
    sep
      string inserted between values, default a space.
    end
      string appended after the last value, default a newline.
    file
      a file-like object (stream); defaults to the current sys.stdout.
    flush
      whether to forcibly flush the stream.

help(abs)
Help on built-in function abs in module builtins:

abs(x, /)
    Return the absolute value of the argument.

help(max)
Help on built-in function max in module builtins:

max(...)
    max(iterable, *[, default=obj, key=func]) -> value
    max(arg1, arg2, *args, *[, key=func]) -> value
    
    With a single iterable argument, return its biggest item. The
    default keyword-only argument specifies an object to return if
    the provided iterable is empty.
    With two or more arguments, return the largest argument.

Αλλαγή Πεζών Κεφαλαίων (Convert case)

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

agios="άγιος νικόλαος"

print(agios.upper())
print(agios) # ο agios παραμένει "άγιος νικόλαος"

print(agios.title())
print('ΑΓΊΑ ΕΛΈΝΗ'.lower())

agios = agios.upper()
print(agios) # ο agios μετά την εκχώρηση στην ίδια μεταβλητή γινεται ΆΓΙΟΣ ΝΙΚΌΛΑΟΣ
ΆΓΙΟΣ ΝΙΚΌΛΑΟΣ
άγιος νικόλαος
Άγιος Νικόλαος
αγία ελένη
ΆΓΙΟΣ ΝΙΚΌΛΑΟΣ

Οι συμβολοσειρές είναι μη μεταβαλλόμενη δομή δεδομένων

Οι συμβολοσειρές αποτελούνται από ακολουθίες χαρακτήρων με σταθερό μέγεθος και μη μεταβαλλόμενα περιεχόμενα. Αυτό σημαίνει ότι δεν είναι δυνατόν να προστίθενται ή να αφαιρούνται χαρακτήρες, ούτε να τροποποιούνται τα περιεχόμενα του αλφαριθμητικού. Πρόκειται για μια μη μεταβαλλόμενη (immutable) δομή της Python. Η αρίθμηση των χαρακτήρων σε ένα αλφαριθμητικό ξεκινάει από το 0.

Έτσι στην συμβολοσειρά country = Ελλάδα έχουμε:

country[0] → Ε (η αρίθμηση ξεκινά από το 0)

country[1] → λ

country[2] → λ

country[3] → ά

country[4] → δ

country[5] → α

Η παραπάνω συμβολοσειρά έχει μήκος 6 χαρακτήρες.

Η αρίθμηση των χαρακτήρων ξεκινά από το 0 από την αρχή ή από το -1 από το τέλος όπως φαίνεται πιο παραστατικά στο παρακάτω διάγραμμα:

Alt text

το γράμμα δ στην Ελλάδα εντοπίζεται με το ευρετήριο 4 ή -2 ανάλογα αν το προσεγγίσουμε από την αρχή ή το τέλος της συμβολοσειράς:

country = 'Ελλάδα'
print(country[4], country[-2])
δ δ

Επιπλέον μπορούμε να πάρουμε υποσύνολα μιας συμβολοσειράς ως εξής:

country[2:5]
'λάδ'

Στο προηγούμενο παράδειγμα λάβαμε υποσύνολο της συμβολοσειράς ξεκινώντας από τον χαρακτήρα με ευρετήριο 2 ως τον χαρακτήρα με ευρετήριο 5 χωρίς αυτός ο χαρακτήρας να περιλαμβάνεται. Αντίστοιχα μπορούμε να πάρουμε ένα υποσύνολο από την αρχή ευρετήριο 0 ή να το παραλείψουμε το 0 βάζοντας :

country[:3],  country[0:3]
('Ελλ', 'Ελλ')

Αντίστοιχα για να ορίσουμε το ευρετήριο του τελευταίου χαρακτήρα μπορούμε πάλι να ορίσουμε στο : στο δεξί άκρο:

 country[3:]
'άδα'

Το οποίο είναι ισοδύναμο με:

country[3:6],    country[3:len(country)]
('άδα', 'άδα')

Μήκος συμβολοσειράς

Στο περασμένο παράδειγμα χρησιμοποιήθηκε η συνάρτηση len. Μέσω της συνάρτησης len η Python μας επιστρέφει το μήκος συμβολοσειράς δηλαδή το πλήθος των χαρακτήρων (μαζί με τα κενά) από τους οποιούς αποτελείται.

message = 'Ή τώρα ή ποτέ.'
len(message)
14

Η μέθοδος find

Η μέθοδος find μας επιτρέπει να αναζητήσουμε μια συμβολοσειρά μέσα σε μια άλλη συμβολοσειρά. Η μέθοδος μας επιστρέφει την τοποθεσία από την ξεκινάει η αναζητούμενη συμβολοσειρά δηλαδή τον δείκτη (index) στην οποία εντοπίζεται ο πρώτος χαρακτηρας της αναζητούμενης συμβολοσειράς μέσα στα περιεχόμενα της αρχικής συμβολοσειράς. Στην παρακάτω συμβολοσειρά θα αναζητήσουμε την λέξη ποτέ.

stixos = 'Η Ελλάδα ποτέ δεν πεθαίνει'
index = stixos.find('ποτέ')

Κανονικά αν πάμε στον χαρακτήρα με ευρετηρίο (index) 9 πρέπει να εντοπίσουμε τον πρώτο χαρακτήρα της συμβολοσειράς που είναι το π. Πράγματι:

stixos[index]
'π'

Αν δεν εντοπιστεί η λέξη που αναζητούμε στην συμβολοσειρά η Python θα επιστρέψει: -1

stixos.find('πάντα')
-1

Η αναζήτηση είναι case sensitive δηλαδή γίνεται διάκριση ανάμεσα σε πεζά και κεφαλαία.

stixos.find('Ελλάδα') # επιστρέφει τον δείκτη 2 γιατί εντοπίστηκε η λέξη κλειδί
2
stixos.find('ΕΛΛΆΔΑ') # επιστρέφει -1 γιατί δεν εντοπίστηκε η λέξη κλειδί
-1

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

stixos.replace('ποτέ', 'πάντα')
'Η Ελλάδα πάντα δεν πεθαίνει'

Επίσης ο τελεστης in ή not in μας επιτρέπει να ελέγξουμε αν μία συμβολοσειρά υπάρχει (ή δεν υπάρχει αντίστοιχα) σε μια άλλη συμβολοσειρά. Πχ με το παρακάτω παράδειγμα ελέγχουμε αν υπάρχει η λέξη Robert στο γνωμικό. Το αποτέλεσμα θα ειναι True αν υπάρχει ή False αν δεν υπάρχει.

gnomiko = '''
Μόνο αυτοί που τολμούν να αποτύχουν παταγωδώς, μπορούν και να επιτύχουν μεγαλειωδώς.

Robert Kennedy
Αμερικανός πολιτικός  (1925-1968)
'''

'Robert' in gnomiko
True

Αντίστροφα λειτουργεί ο τελεστής not in, επιστρέφει True όταν μια συμβολοσειρά δεν εντοπίζεται σε μια άλλη:

gnomiko = '''
Τη στιγμή που αρχίσεις να συζητάς τι θα κάνεις αν χάσεις, έχεις χάσει.

George Schultz
Αμερικανός επιχειρηματίας & υπουργός  (1920-2021)
'''

'συζητάς' not in gnomiko
False

Η συνάρτηση str()

Σε αρκετές περιπτώσεις είναι χρήσιμο να μετατρέψουμε έναν τύπο δεδομένων σε συμβολοσειρά. Για παράδειγμα ένα ακέραιο μπορούμε να το μετατρέψουμε σε συμβολοσειρά μέσω της συνάρτησης str():

weight = 80
type(weight), weight
(int, 80)
weight = str(weight)
type(weight), weight
(str, '80')

Στο παραπάνω παράδειγμα παρατηρούμε την μετατροπή της μεταβλητής weight από ακέραιο τύπο (int) σε συμβολοσειρά (str). Αντίστοιχα μπορούμε να μετατρέψουμε και μια λίστα (ή ένα λεξικό ή ένα set).

cars = ['Nissan', 'Seat', 'BMW']

str(cars)
"['Nissan', 'Seat', 'BMW']"