Έξοδος και είσοδος δεδομένων στην Python

Εμφάνιση δεδομένων στις συσκευές εξόδου με την συνάρτηση print( )

Συνάρτηση στην Python είναι ένα σύνολο εντολών, που τοποθετούνται μαζί σαν μια μονάδα για να εκτελέσει η CPU μια συγκεκριμένη εργασία. Στην Python 3 η print( ) είναι μια συνάρτηση που τυπώνει δεδομένα στη συσκευή εξόδου. Τα «δεδομένα» που εισέρχονται μέσα στις παρενθέσεις της print( ) και πρόκειται να προβληθούν ονομάζονται ορίσματα της συνάρτησης. Η βασική σύνταξη της συνάρτηση print είναι: print(ορίσματα). Τα ορίσματα μπορεί να είναι συμβολοσειρές, μεταβλητές ή σταθερές τιμές.

Για να εμφανίσουμε συμβολοσειρές με την συνάρτηση print( ) απλά τις περικλείουμε σε ένα ζευγάρι μονών ή διπλών εισαγωγικών και τις εισάγουμε σαν όρισμα στην print( ). Στο ακόλουθο παράδειγμα περικλείουμε την συμβολοσειρά σε μονά εισαγωγικά:

>>> print(‘Αυτό είναι ένα παράδειγμα με μονά εισαγωγικά’)
Αυτό είναι ένα παράδειγμα με μονά εισαγωγικά

Στο ακόλουθο παράδειγμα περικλείουμε την συμβολοσειρά σε διπλά εισαγωγικά:

>>> print(“Αυτό είναι ένα παράδειγμα με διπλά εισαγωγικά”)
Αυτό είναι ένα παράδειγμα με διπλά εισαγωγικά

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

>>> print(“Θα 'θελα να είχα ένα ωραίο ποδήλατο”)
Θα 'θελα να είχα ένα ωραίο ποδήλατο

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

>>> print(‘Του είπα “Σου υπόσχομαι ότι θα σου αγοράσω ποδήλατο” θα το κάνω’)
Του είπα “Σου υπόσχομαι ότι θα σου αγοράσω ποδήλατο” θα το κάνω

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

>>> print(“ “ “Αυτή είναι η πρώτη γραμμή
... Αυτή είναι η δεύτερη γραμμή
... Αυτή είναι η Τρίτη γραμμή” “ “)
Αυτή είναι η πρώτη γραμμή
Αυτή είναι η δεύτερη γραμμή
Αυτή είναι η Τρίτη γραμμή

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

>>> print(23.45)
23.45
>>> print(5*6)
30
>>> a=6
>>> b=2
>>> print(a)
6
>>> print(a//b)
3

Μπορούμε επίσης με την ίδια συνάρτηση print( ) να προβάλουμε πολλαπλά δεδομένα χωρισμένα με κόμμα, όπως στο ακόλουθο παράδειγμα:

>>> a=6
>>> b=2
>>> print('a=', a, ', b=', b)
a= 6 , b= 2

Όταν χρησιμοποιούμε στην print( ) ορίσματα που αποτελούνται από μια σειρά δεδομένων χωρισμένων με κόμμα, η Python προβάλει τα δεδομένα σε μια γραμμή στη σειρά διαχωρισμένα με τον χαρακτήρα του κενού. Αν θέλουμε να διαχωρίζονται με συγκεκριμένο χαρακτήρα τοποθετούμε την έκφραση π.χ. sep=’*’ στο τέλος του ορίσματος της print( ) για να διαχωρίζονται τα πολλαπλά δεδομένα με τον χαρακτήρα *.

>>> print('προσέ', 'χω όταν οδη', 'γώ')
προσέ χω όταν οδη γώ
>>> print('προσέ', 'χω όταν οδη', 'γώ', sep='')
προσέχω όταν οδηγώ
>>> print('προσέ', 'χω όταν οδη', 'γώ', sep='*')
προσέ*χω όταν οδη*γώ

Μπορούμε να τοποθετούμε τα ορίσματα στην print( ) χωρισμένα με κόμμα σε πολλαπλές γραμμές, όπως στο ακόλουθο παράδειγμα:

 >>> print('προσέχω',
  ...      'όταν',
  ...      'οδηγώ')
προσέχω όταν οδηγώ

Εμφάνιση και μορφοποίηση τιμών μιας μεταβλητής

Η Python δέχεται δεδομένα από το χρήστη, τα επεξεργάζεται και στην συνέχεια επιστρέφει στο χρήστη τα αποτελέσματα μέσω των συσκευών εξόδου. Εισάγουμε τα δεδομένα με τη βοήθεια της συνάρτησης input( ) και εξάγουμε τα δεδομένα με τη βοήθεια της συνάρτησης print( ).

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

A] Με χρήση προσδιοριστών μορφοποίησης

Με τη χρήση προσδιοριστών μορφοποίησης, μορφοποιούμε τιμές μεταβλητών και σταθερές τιμές μέσα στη συνάρτηση print( ).

Α1] Για ακέραια δεδομένα χρησιμοποιούμε τους ακόλουθους προσδιοριστές μορφοποίησης:

%d  εμφανίζει ένα ακέραιο αριθμό με αριστερή στοίχιση
%wd  εμφανίζει ένα ακέραιο αριθμό με ελάχιστο πλάτος θέσεων ίσο με w. Αν το πλήθος των ψηφίων του αριθμού είναι μεγαλύτερο από το πλάτος θέσεων w τότε το πλάτος αυξάνει απότομα ώστε να εμφανιστεί ολόκληρος ο αριθμός. Αν ο αριθμών ψηφίων του αριθμού είναι λιγότερα από το πλάτος θέσεων, τότε ο αριθμός στοιχίζεται δεξιά του πεδίου εκτύπωσης και αφήνονται κενά αριστερά του αριθμού.
%-wd  με την παύλα μετά τον προσδιοριστή μορφοποίησης (σύμβολο %) αλλάζει την προκαθορισμένη στοίχιση και στοιχίζει τον αριθμό αριστερά
%0wd  με τον χαρακτήρα ‘0’ μετά τον προσδιοριστή μορφοποίησης η Python βάζει μηδενικά αριστερά του αριθμού μέχρι να καλύψει το πεδίο εκτύπωσης.

>>> a=1234
>>> b=12345679
>>> print('%d' %a)
1234
>>> print('%d' %b)
12345679
>>> print('%6d' %a)
  1234
>>> print('%4d' %b)
12345679
>>> print('%-6d' %a)
1234  
>>> print('%06d' %a)
001234
>>> 

Α2] Για δεδομένα πραγματικών αριθμών χρησιμοποιούμε τους ακόλουθους προσδιοριστές μορφοποίησης.

%f  εμφανίζει τον δεκαδικό αριθμό με 6 δεκαδικά ψηφία με αριστερή στοίχιση
%wf  εμφανίζει τον δεκαδικό αριθμό σε w το λιγότερο πλάτος θέσης των ψηφίων με έξι δεκαδικά ψηφία και με δεξιά στοίχιση.
%.zf  εμφανίζει τον δεκαδικό αριθμό με αριστερή στοίχιση στην οποία οι z πλάτους θέσεων καταλαμβάνονται από τα δεκαδικά ψηφία.

>>> x=12.123
>>> y=12.123456789
>>> print('%f'%x)
12.123000
>>> print('%f'%y)
12.123457
>>> print('%10f'%x)
 12.123000
>>> print('%10f'%y)
 12.123457
>>> print('%.4f'%x)
12.1230
>>> print('%.4f'%y)
12.1235

%w.zf  εμφανίζει τον δεκαδικό αριθμό με δεξιά στοίχιση σε ένα πεδίο εκτύπωσης με ελάχιστο πλάτος θέσεων ίσο με w στις οποίες οι z θέσεις θα καταλάβουν τα δεκαδικά ψηφία και μια θέση θα καταλάβει η υποδιαστολή. Αν το πλάτος του πεδίου εκτύπωσης θέσεων είναι αρκετά μεγάλο για την εμφάνιση του δεκαδικού αριθμού η Python βάζει κενούς χαρακτήρες αριστερά του αριθμού.
%-w.zf  η παύλα που ακολουθεί τον προσδιοριστή μορφοποίησης % αλλάζει την προκαθορισμένη στοίχιση και στοιχίζει τον αριθμό αριστερά.
%0w.zf  ο χαρακτήρας ‘0’ μετά τον προσδιοριστή μορφοποίησης % συμπληρώνει με χαρακτήρες ‘0’ το πεδίο εκτύπωσης αριστερά του αριθμού.

>>> y=12.123456789
>>> print('%10.4f'%y)
   12.1235
>>> print('%5.4f'%y)
12.1235
>>> print('%-10.4f'%y)
12.1235   
>>> print('%010.4f'%y)
00012.1235
>>> 

Μπορούμε να εμφανίσουμε δυο ή περισσότερες τιμές με προσδιοριστές μορφοποίησης ως εξής αυτές οι τιμές χωρίζονται με κόμμα και τοποθετούνται μέσα σε παρένθεση στην οποία προηγείται ο προσδιοριστής %.

>>> a=67.8754  
>>> b=34.3478  
>>> print(' To άθροισμα %.4f με %f είναι ίσο με %.6f'%(a, b, a+b))
To άθροισμα 67.8754 με 34.347800 είναι ίσο με 102.223200

Β] Με χρήση της μεθόδου format

Χρησιμοποιώντας την μέθοδο format έχουμε περισσότερες δυνατότητες μορφοποίησης από ότι με τη χρήση των προσδιοριστών μορφοποίησης. Η μέθοδος format εφαρμόζεται σε ένα αντικείμενο συμβολοσειράς στο οποίο υπάρχουν «πεδία αντικατάστασης» όπου αναγνωρίζονται από το γεγονός ότι βρίσκονται μέσα σε άγκιστρα { }. Σε κάθε πεδίο αντικατάστασης θα πρέπει να υπάρχει ο δείκτης θέσης του προς μορφοποίηση ορίσματος ή το όνομα του.

Η μέθοδος format επιστρέφει ένα αντίγραφο της συμβολοσειράς όπου τα πεδία έχουν αντικατασταθεί με τις αντίστοιχες τιμές των ορισμάτων τους. Η μέθοδος format μπορεί να εφαρμοστεί μόνη της ή ως όρισμα της συνάρτησης print( ).

Τα ακόλουθα παραδείγματα επιδεικνύουν την λειτουργία της μεθόδου format σαν όρισμα μέσα στην συνάρτηση print() . Μπορεί, επίσης η μέθοδος format να δώσει αυτόνομες συμβολοσειρές χωρίς τη χρήση της συνάρτησης print( ).

>>> print('{}, {}, {}' .format('εγώ', 'εσύ', 'αυτός'))
εγώ, εσύ, αυτός
>>>

Στο παραπάνω παράδειγμα δεν τοποθετήθηκαν οι αριθμοί θέσης του ορίσματος, οπότε το πρώτο όρισμα ‘εγώ’ αντιγράφηκε στη θέση του πρώτου πεδίου, το δεύτερο όρισμα ‘εσύ’ στη θέση του δεύτερου πεδίου και το τρίτο όρισμα ‘αυτός’ στη θέση του τρίτου πεδίου.

>>> print('{0}, {1}, {2}' .format('εγώ', 'έσύ', 'αυτός'))
εγώ, εσύ, αυτός
>>>

Στο παραπάνω παράδειγμα χρησιμοποιήθηκαν οι δείκτες θέσεις των ορισμάτων που θα αντιγραφούν στα αντίστοιχα πεδία αντικατάστασης, κάνοντας τη σύνταξη πιο ξεκάθαρη. Έτσι το όρισμα ‘εγώ’ αντιγράφηκε στη θέση του πεδίου {0}, το όρισμα ‘εσύ’ στη θέση του πεδίου {1} και το τρίτο όρισμα ‘αυτός’ στη θέση πεδίου {2}.

>>> print('Μήκος: {μήκος} Πλάτος: {πλάτος}'.format(μήκος='20', πλάτος='30'))
Μήκος: 20 Πλάτος: 30
>>>

Στο παραπάνω παράδειγμα τοποθετήθηκαν τα ονόματα των δυο ορισμάτων οπότε η τιμή του ορίσματος μήκος θα αντιγραφεί στο πεδίο {μήκος} και η τιμή του ορίσματος πλάτος θα αντιγραφεί στο πεδίο {πλάτος}.

>>> print('Ώρα {0:02d} Λεπτά {1:02} Δευτερόλεπτα {2:8d}'.format(4, 40, 51))
Ώρα 04 Λεπτά 40 Δευτερόλεπτα       51
>>>

Στο παραπάνω παράδειγμα μορφοποιείται μια ένδειξη της ώρας. Η εντολή περιλαμβάνει τους αριθμούς θέσης των ορισμάτων που θα αντιγραφούν στα αντίστοιχα πεδία αντικατάστασης. Τα δυο πρώτα πεδία έχουν πλάτος 2 θέσεις και θα προηγούνται μηδενικά για τις μονοψήφιες τιμές και το τρίτο πεδίο έχει πλάτος 8 θέσεις. Στη μέθοδο format() χρησιμοποιείται ως προσδιοριστής μορφοποίησης το σύμβολο άνω και κάτω τελεία : αντί του %.

>>> print('Τελική τιμή {0:8.2f} ευρώ'.format(900.))
Τελική τιμή  900.00 ευρώ
>>>

Στο παραπάνω παράδειγμα, το όρισμα της μεθόδου format είναι ένας αριθμός τύπου float. Tο πεδίο αντικατάστασης έχει συνολικό πλάτος 8 θέσεις εμφάνισης από τις οποίες οι 2 προορίζονται για τα δεκαδικά ψηφία και η μια για την υποδιαστολή. Επίσης περιλαμβάνεται ένας αριθμός που δείχνει πιο όρισμα της μεθόδου θα αντιγραφεί στο  πεδίο αντικατάστασης.

>>> print('{1:02d} {month}, {0:02d}'.format(17, 1979, month='April'))
1979 April, 17
>>>

Στο παραπάνω παράδειγμα, οι αριθμοί μέσα στα πεδία αντικατάστασης ορίζουν πια ορίσματα της μεθόδου format θα αντιγραφούν εκεί. Η σύνταξη της μεθόδου απαιτεί τα ονομαστικά ορίσματα να βρίσκονται στο τέλος των ορισμάτων.

>>> print(' Ο Νίκος έχει {0} 180{1} ενώ ο Γιάννης 185{1}'.format('ύψος', 'cm'))
Ο Νίκος έχει ύψος 180cm ενώ ο Γιάννης 185cm
>>>

Στο παραπάνω παράδειγμα η μέθοδος format επιτρέπει τη χρήση ενός ορίσματος σε πολλαπλά πεδία αντικατάστασης.

>>> print('{0:>15s} {1:8.3f}'.format('Εμβαδόν:', 3500.))   
              Εμβαδόν: 3500.000

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

print('{0:^15s} {1:8.3f}'.format('Εμβαδόν:', 3500.))
         Εμβαδόν:     3500.000

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

Είσοδος δεδομένων με την συνάρτηση input

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

Μεταβλητή = input(μήνυμα)

Παράδειγμα: μελετήστε το ακόλουθο απόσπασμα κώδικα:

x = input('Δώσε την ηλικία σου σε έτη ')
Δώσε την ηλικία σου σε έτη 55
type(x)
<class 'str'>
print('Η ηλικία σου είναι: '+x)
Η ηλικία σου είναι: 55

Το πεδίο «μήνυμα» είναι ένα string που περιγράφει τα δεδομένα που ζητούνται από την συνάρτηση input() και εμφανίζεται πριν το σημείο εισαγωγής των δεδομένων της ίδιας συνάρτησης.

Κατά την εκτέλεση του παραπάνω αποσπάσματος κώδικα, η Python εμφανίζει το μήνυμα: «Δώσε την ηλικία σου σε έτη» και περιμένει να πληκτρολογήσουμε τα δεδομένα και όταν πατήσουμε το πλήκτρο Enter μεταβιβάζει τα δεδομένα που πληκτρολογήσαμε στη μεταβλητή x σε μορφή τύπου συμβολοσειράς. Ας επαναλάβουμε ότι στην Python 3 τα δεδομένα που επιστρέφει η συνάρτηση input() είναι πάντα τύπου συμβολοσειράς.

Όταν θέλουμε να εισάγουμε αριθμητικά δεδομένα στην υπό εκτέλεση εφαρμογή, μετατρέπουμε την συμβολοσειρά που επιστρέφει η input() σε τύπο αριθμητικών δεδομένων, με τις συναρτήσεις int(), float(), complex().

Η συνάρτηση int() μετατρέπει δεδομένα τύπου συμβολοσειράς και αριθμούς κινητής υποδιαστολής σε ακεραίους. Η συνάρτηση float() μετατρέπει δεδομένα τύπου συμβολοσειράς και ακεραίους αριθμούς σε αριθμούς κινητής υποδιαστολής. Επίσης η Python διαθέτει την συνάρτηση complex() η οποία μετατρέπει συμβολοσειρές σε μιγαδικούς αριθμούς καθώς και την str() η οποία μετατρέπει αριθμούς σε συμβολοσειρές.

Θα πρέπει να προσέξουμε ότι η συμβολοσειρά που επιστρέφει η συνάρτηση input() θα πρέπει να έχει την ανάλογη μορφή για να γίνουν οι μετατροπές με τις συναρτήσεις int(), float() και complex().

>>> x = int(input('Δώσε τον αριθμό '))
Δώσε τον αριθμό 25
>>> type(x)
<class 'int'>
>>> print('Έδωσες τον αριθμό',x)
Έδωσες τον αριθμό 25
>>>

Στο παραπάνω παράδειγμα χρησιμοποιούμε φωλιασμένες συναρτήσεις, δηλαδή χρησιμοποιούμε την input( ) σαν όρισμα της int( ). Η συνάρτηση int( ) μετατρέπει την συμβολοσειρά σε ακέραιο αριθμό.

>>> x = float(input('Δώσε ένα πραγματικό αριθμό '))
Δώσε ένα πραγματικό αριθμό 35.7
>>> type(x)
<class 'float'>
>>> print('Έδωσες τον αριθμό ',x)
Έδωσες τον αριθμό  35.7
>>> 

Στο παραπάνω παράδειγμα ζητείται ένας πραγματικός αριθμός που με την input( ), εισάγεται σαν συμβολοσειρά, που τελικά με την float( ) μετατρέπεται σε τύπο δεδομένων float.

>>> x = input('Δώσε τον αριθμό: ')
Δώσε τον αριθμό: 6+24j
>>> x = complex(x)
>>> type(x)
<class 'complex'>
>>> print(x)
(6+24j)
>>> 

Στο παραπάνω παράδειγμα ζητείται ένας μιγαδικός αριθμός που με την input( ), εισάγεται σαν συμβολοσειρά, που τελικά με την complex( ) μετατρέπεται σε τύπο δεδομένων complex.