post

Python el:Επίλυση προβλημάτων

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

Contents

Το πρόβλημα

Το πρόβλημα είναι “Θέλω ένα πρόγραμμα που δημιουργεί αντίγραφα ασφαλείας όλων των σημαντικών μου αρχείων”.

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

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

  1. Τα προς δημιουργία αντιγράφων ασφαλείας αρχεία και φάκελοι καθορίζονται σε μια λίστα.
  2. Τα αντίγραφα ασφαλείας πρέπει να αποθηκευτούν σε ένα κεντρικό φάκελο.
  3. Τα αντίγραφα ασφαλείας αποθηκεύονται σε ένα συμπιεσμένο αρχείο.
  4. Το όνομα του συμπιεσμένου αρχείου είναι η τρέχουσα ημερομηνία και ώρα.
  5. Χρησιμοποιούμε τη γνωστή εντολή zip που είναι διαθέσιμη σε κάθε σύγχρονη διανομή Linux/Unix. Οι χρήστες Windows μπορούν να την εγκαταστήσουν από τη σελίδα του έργου και να προσθέσουν τη διαδρομή C:Program FilesGnuWin32bin στο σύστημά τους κατάλληλα ως μεταβλητή περιβάλλοντος, όπως έχουμε ήδη δει για την αναγνώριση του διερμηνευτή Python. Σημειώστε ότι μπορείτε να χρησιμοποιήσετε κάθε εφαρμογή αρχειοθέτησης, αρκεί να διαθέτει γραμμή εντολών και να μπορεί να δεχτεί εντολές από το πρόγραμμά μας.

Η λύση

Αφού ο σχεδιασμός του προγράμματος σταθεροποιήθηκε, μπορούμε να γράψουμε τον κώδικα που αποτελεί την υλοποίηση της λύσης μας.

#!/usr/bin/python
# Filename: backup_ver1.py

import os
import time

# 1. Τα προς δημιουργία αντιγράφων ασφαλείας αρχεία και φάκελοι καθορίζονται σε μια λίστα
source = ['"C:\My Documents"', 'C:\Code']
# Προσέξτε τη χρήση διπλών εισαγωγικών εντός της συμβολοσειράς για ονόματα αρχείων με κενούς χαρακτήρες

# 2. Τα αντίγραφα ασφαλείας πρέπει να αποθηκευτούν σε ένα κεντρικό φάκελο
target_dir = 'E:\Backup' # Θυμηθείτε να αλλάξετε τον φάκελο προορισμού σε αυτόν που θα χρησιμοποιήσετε

# 3. Τα αντίγραφα ασφαλείας αποθηκεύονται σε ένα συμπιεσμένο αρχείο
# 4. Το όνομα του συμπιεσμένου αρχείου είναι η τρέχουσα ημερομηνία και ώρα
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'

# 5. Εκτελούμε την εντολή zip για την εισαγωγή των αρχείων στο συμπιεσμένο αρχείο
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

# Εκτέλεση του προγράμματος
if os.system(zip_command) == 0:
    print('Successful backup to', target)
else:
    print('Backup FAILED')

Έξοδος:

   $ python backup_ver1.py
   Successful backup to E:Backup20080702185040.zip

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

Αν το παραπάνω πρόγραμμα δε λειτουργεί, προσθέστε μια εντολή print(zip_command) πριν την κλήση του αρθρώματος os.system και εκτελέστε το. Τώρα, αντιγράψτε την εκτέλεση της zip_command και επικολλήστε την στο τερματικό για να δείτε αν εκτελείται μόνη της σωστά. Αν αποτύχει, δείτε το εγχειρίδιο της zip εντολής για πιθανά σφάλματα. Αν επιτύχει, ελέγξτε τον πηγαίο κώδικα αν ταιριάζει απόλυτα με τον κώδικα του προγράμματος παραπάνω.

Πώς λειτουργεί:

Θα παρατηρήσετε πώς έχουμε μετατρέψει τη σχεδίαση σε κώδικα σταδιακά.

Πρώτα χρησιμοποιούμε τα αρθρώματα os και time με την εισαγωγή τους. Στη συνέχεια, ορίζουμε τα αρχεία και τους φακέλους προς αρχειοθέτηση στη λίστα source. Ο φάκελος προορισμού, όπου αποθηκεύονται τα αντίγραφα ασφαλείας, ορίζεται στη μεταβλητή target_dir. Το όνομα του συμπιεσμένου αρχείου που θα δημιουργηθεί είναι η τρέχουσα ημερομηνία και ώρα και παράγεται αυτόματα από τη συνάρτηση time.strftime(). Το αρχείο θα έχει επίσης την κατάληξη .zip και θα αποθηκευτεί στο φάκελο target_dir.

Παρατηρήστε τη χρήση της μεταβλητής os.sep – ορίζει το διαχωριστή καταλόγου δηλαδή θα είναι '/' για Linux και Unix, '\' για Windows και ':' για Mac OS. Η χρήση της os.sep μεταβλητής στη θέση αυτών των χαρακτήρων επιτρέπει τη φορητότητα του προγράμματός μας μεταξύ όλων αυτών των λειτουργικών συστημάτων.

Η συνάρτηση time.strftime() δέχεται προδιαγραφές όπως αυτές που έχουμε χρησιμοποιήσει στο παραπάνω πρόγραμμα. Η προδιαγραφή %Y αντικαθίσταται από το έτος μαζί με τον αιώνα. Η προδιαγραφή %m θα αντικατασταθεί από το μήνα ως δεκαδικός αριθμός μεταξύ 01 και 12 και ούτω καθ’ εξής. Η πλήρης λίστα αυτών των προδιαγραφών βρίσκεται στο εγχειρίδιο αναφοράς Python.

Δημιουργούμε το όνομα του συμπιεσμένου αρχείου προορισμού με τη χρήση του τελεστή πρόσθεσης (+), ο οποίος συνενώνει τις συμβολοσειρές, δηλαδή ενώνει τις δύο συμβολοσειρές και επιστρέφει μια νέα. Στη συνέχεια, δημιουργούμε τη συμβολοσειρά zip_command και η οποία περιέχει την εντολή που θέλουμε να εκτελεστεί. Μπορείτε να ελέγξετε αν λειτουργεί η εντολή εκτελώντας την στο κέλυφος (Τερματικό Linux ή γραμμή εντολών DOS).

Η χρήση της εντολής zip δέχεται κάποιες επιλογές και παραμέτρους. Η επιλογή -q δηλώνει ότι πρέπει να εκτελεστεί αθόρυβα (quietly). Η επιλογή -r προσδιορίζει ότι η εντολή πρέπει να εκτελεστεί αναδρομικά (recursively) για καταλόγους, δηλαδή να συμπεριλάβει όλους τους υποφακέλους και τα αρχεία. Οι δύο επιλογές συνδυάζονται και προσδιορίζονται με τη συντόμευση -qr. Μετά τις επιλογές αυτές ακολουθεί το όνομα του συμπιεσμένου αρχείου που θα δημιουργηθεί και έπεται η λίστα αρχείων και φακέλων προς αρχειοθέτηση. Μετατρέπουμε τη λίστα source σε μια συμβολοσειρά με τη χρήση της μεθόδου join των συμβολοσειρών. Έχουμε ήδη αναφερθεί στον τρόπο χρήσης της.

Τέλος, εκτελούμε την εντολή με τη χρήση της συνάρτησης os.system και η οποία τρέχει την εντολή σαν να είχε εκτελεστεί από το ίδιο το σύστημα, δηλαδή επιστρέφει στο κέλυφος 0 αν η εκτέλεση ήταν επιτυχής, ειδάλλως επιστρέφει κάποιον αριθμό σφάλματος.

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

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

Σημείωση για χρήστες Windows
Αντί για διπλούς αριστερούς πλάγιους καθέτους ως ακολουθίες διαφυγής, μπορείτε επίσης να χρησιμοποιήσετε ανεπεξέργαστες συμβολοσειρές. Για παράδειγμα, χρησιμοποιήστε τη σύνταξη 'C:\Documents' ή r'C:Documents'. Ωστόσο, μη χρησιμοποιήσετε τη σύνταξη 'C:Documents', διότι θα καταλήξετε με μια άγνωστη ακολουθία διαφυγής D.

Τώρα που το σενάριο είναι πλήρως λειτουργικό, μπορούμε να δημιουργήσουμε όποτε θέλουμε ένα αντίγραφο ασφαλείας των αρχείων μας. Για χρήστες Linux/Unix συστήνεται η μέθοδος εκτελέσιμων προγραμμάτων, όπως συζητήθηκε πριν, ώστε να εκτελεστεί το σενάριο δημιουργίας αντιγράφων ασφαλείας οποτεδήποτε, οπουδήποτε. Αποκαλείται στάδιο λειτουργίας της ανάπτυξης λογισμικού.

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

Δεύτερη έκδοση

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

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

#!/usr/bin/python
# Filename: backup_ver2.py

import os
import time

# 1. Τα προς δημιουργία αντιγράφων ασφάλειας αρχεία και φάκελοι καθορίζονται σε μια λίστα
source = ['"C:\My Documents"', 'C:\Code']
# Προσέξτε τη χρήση διπλών εισαγωγικών εντός της συμβολοσειράς για ονόματα αρχείων με κενούς χαρακτήρες

# 2. Τα αντίγραφα ασφαλείας πρέπει να αποθηκευτούν σε ένα κεντρικό φάκελο
target_dir = 'E:\Backup' # Θυμηθείτε να αλλάξετε τον φάκελο προορισμού σε αυτόν που θα χρησιμοποιήσετε

# 3. Τα αντίγραφα ασφαλείας αποθηκεύονται σε ένα συμπιεσμένο αρχείο
# 4. Η τρέχουσα ημέρα είναι το όνομα του υποφακέλου στον κεντρικό φάκελο
today = target_dir + os.sep + time.strftime('%Y%m%d')
# Το όνομα του συμπιεσμένου αρχείου είναι η τρέχουσα ώρα
now = time.strftime('%H%M%S')

# Δημιουργία του υποφακέλου αν δεν υπάρχει ήδη
if not os.path.exists(today):
    os.mkdir(today) # make directory
    print('Successfully created directory', today)

# Το όνομα του συμπιεσμένου αρχείου
target = today + os.sep + now + '.zip'

# 5. Εκτελούμε την εντολή zip για την εισαγωγή των αρχείων στο συμπιεσμένο αρχείο
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

# Εκτέλεση του προγράμματος
if os.system(zip_command) == 0:
    print('Successful backup to', target)
else:
    print('Backup FAILED')

Έξοδος:

   $ python backup_ver2.py
   Successfully created directory E:Backup20080702
   Successful backup to E:Backup20080702202311.zip

   $ python backup_ver2.py
   Successful backup to E:Backup20080702202325.zip

Πώς λειτουργεί:

Το μεγαλύτερο μέρος του προγράμματος παραμένει ίδιο. Οι αλλαγές είναι ότι ελέγχουμε αν υπάρχει φάκελος με όνομα την τρέχουσα ημέρα εντός του κεντρικού φακέλου των αντιγράφων ασφαλείας με τη χρήση της συνάρτησης os.path.exists. Αν δεν υπάρχει, το δημιουργούμε με τη συνάρτηση os.mkdir.

Τρίτη έκδοση

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

Σημείωση
Το παρακάτω πρόγραμμα δεν λειτουργεί, οπότε μην ανησυχήσετε, παρακαλώ παρακολουθήστε γιατί υπάρχει ένα μάθημα εδώ.
#!/usr/bin/python
# Filename: backup_ver3.py

import os
import time

# 1. Τα προς δημιουργία αντιγράφων ασφάλειας αρχεία και φάκελοι καθορίζονται σε μια λίστα
source = ['"C:\My Documents"', 'C:\Code']
# Προσέξτε τη χρήση διπλών εισαγωγικών εντός της συμβολοσειράς για ονόματα αρχείων με κενούς χαρακτήρες

# 2. Τα αντίγραφα ασφαλείας πρέπει να αποθηκευτούν σε ένα κεντρικό φάκελο
target_dir = 'E:\Backup' # Θυμηθείτε να αλλάξετε τον φάκελο προορισμού σε αυτόν που θα χρησιμοποιήσετε

# 3. Τα αντίγραφα ασφαλείας αποθηκεύονται σε ένα συμπιεσμένο αρχείο
# 4. Η τρέχουσα ημέρα είναι το όνομα του υποφακέλου στον κεντρικό φάκελο
today = target_dir + os.sep + time.strftime('%Y%m%d')
# The current time is the name of the zip archive
now = time.strftime('%H%M%S')

# Ζητήστε από το χρήστη ένα σχόλιο για την επισύναψή του στο όνομα του συμπιεσμένου αρχείου
comment = input('Enter a comment --> ')
if len(comment) == 0: # Έλεγχος για την προσθήκη του σχολίου
    target = today + os.sep + now + '.zip'
else:
    target = today + os.sep + now + '_' +
        comment.replace(' ', '_') + '.zip'

# Δημιουργία του υποφακέλου αν δεν υπάρχει ήδη
if not os.path.exists(today):
    os.mkdir(today) # make directory
    print('Successfully created directory', today)

# 5. Εκτελούμε την εντολή zip για την εισαγωγή των αρχείων στο συμπιεσμένο αρχείο
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

# Εκτέλεση του προγράμματος
if os.system(zip_command) == 0:
    print('Successful backup to', target)
else:
    print('Backup FAILED')

Έξοδος:

   $ python backup_ver3.py
     File "backup_ver3.py", line 25
       target = today + os.sep + now + '_' +
                                           ^
   SyntaxError: invalid syntax

Πώς (δεν) λειτουργεί:

Το πρόγραμμα αυτό δεν λειτουργεί! Η Python αναφέρει ότι υπάρχει συντακτικό σφάλμα, που σημαίνει ότι το σενάριο δεν πληροί την αναμενόμενη δομή της Python. Αν παρατηρήσουμε το σφάλμα που αναφέρεται, θα δούμε και πού εντοπίστηκε. Ξεκινούμε λοιπόν την αποσφαλμάτωση του προγράμματος από αυτή τη γραμμή.

Με προσεκτική παρατήρηση, θα δούμε ότι η μονή λογική γραμμή έχει χωριστεί σε δύο φυσικές γραμμές χωρίς να ορίσουμε ότι αυτές οι δύο πάνε μαζί. Βασικά, η Python βρήκε τον τελεστή πρόσθεσης (+) χωρίς κάποιον τελεστέο σ’αυτή τη λογική γραμμή και κατά συνέπεια δεν ξέρει πώς να συνεχίσει. Θυμηθείτε ότι μπορούμε να δηλώσουμε τη συνέχιση της λογικής γραμμής στην επόμενη φυσική γραμμή με τη χρήση μιας δεξιάς πλάγιας καθέτου στο τέλος της φυσικής γραμμής. Έτσι διορθώνουμε το πρόγραμμά μας. Αυτή η διόρθωση, όταν εντοπίζουμε σφάλματα, αποκαλείται διόρθωση σφαλμάτων.

Τέταρτη έκδοση

#!/usr/bin/python
# Filename: backup_ver4.py

import os
import time

# 1. Τα προς δημιουργία αντιγράφων ασφάλειας αρχεία και φάκελοι καθορίζονται σε μια λίστα
source = ['"C:\My Documents"', 'C:\Code']
# Προσέξτε τη χρήση διπλών εισαγωγικών εντός της συμβολοσειράς για ονόματα αρχείων με κενούς χαρακτήρες

# 2. Τα αντίγραφα ασφαλείας πρέπει να αποθηκευτούν σε ένα κεντρικό φάκελο
target_dir = 'E:\Backup' # Θυμηθείτε να αλλάξετε τον φάκελο προορισμού σε αυτόν που θα χρησιμοποιήσετε

# 3. Τα αντίγραφα ασφαλείας αποθηκεύονται σε ένα συμπιεσμένο αρχείο
# 4. Η τρέχουσα ημέρα είναι το όνομα του υποφακέλου στον κεντρικό φάκελο
today = target_dir + os.sep + time.strftime('%Y%m%d')
# The current time is the name of the zip archive
now = time.strftime('%H%M%S')

# Ζητήστε από το χρήστη ένα σχόλιο για την επισύναψή του στο όνομα του συμπιεσμένου αρχείου
comment = input('Enter a comment --> ')
if len(comment) == 0: # check if a comment was entered
    target = today + os.sep + now + '.zip'
else:
    target = today + os.sep + now + '_' + 
        comment.replace(' ', '_') + '.zip'

# Δημιουργία του υποφακέλου αν δεν υπάρχει ήδη
if not os.path.exists(today):
    os.mkdir(today) # make directory
    print('Successfully created directory', today)

# 5. Εκτελούμε την εντολή zip για την εισαγωγή των αρχείων στο συμπιεσμένο αρχείο
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

# Εκτέλεση του προγράμματος
if os.system(zip_command) == 0:
    print('Successful backup to', target)
else:
    print('Backup FAILED')

Έξοδος:

   $ python backup_ver4.py
   Enter a comment --> added new examples
   Successful backup to E:Backup20080702202836_added_new_examples.zip

   $ python backup_ver4.py
   Enter a comment -->
   Successful backup to E:Backup20080702202839.zip

Πώς λειτουργεί:

Λειτουργεί τώρα! Ας δούμε τις ουσιαστικές βελτιώσεις που κάναμε στην τρίτη έκδοση. Επισυνάπτουμε τα σχόλια χρήστη με τη συνάρτηση input και κατόπιν ελέγχουμε αν ο χρήστης πράγματι πληκτρολόγησε κάτι ελέγχοντας το μέγεθος της πληκτρολόγησης με τη χρήση της len συνάρτησης. Αν ο χρήστης πληκτρολόγησε μόνο enter και τίποτα άλλο (ίσως πρόκειται απλά για ένα αντίγραφο ρουτίνας ή δεν υπήρξαν κάποιες ιδιαίτερες αλλαγές), τότε θα προχωρήσουμε με τον προηγούμενο τρόπο.

Ωστόσο, αν πληκτρολογήσαμε ένα σχόλιο, επισυνάπτεται στο όνομα του συμπιεσμένου αρχείου ακριβώς πριν την κατάληξη .zip. Παρατηρήστε ότι οι κενοί χαρακτήρες αντικαθίστανται με κάτω παύλες (underscores), διότι η διαχείριση ονομάτων αρχείων χωρίς κενούς χαρακτήρες είναι ευκολότερη.

Περισσότερες βελτιώσεις

Η τέταρτη έκδοση του σεναρίου λειτουργεί ικανοποιητικά για τους περισσότερους χρήστες, αλλά υπάρχουν πάντα περιθώρια βελτίωσης. Για παράδειγμα, μπορείτε να συμπεριλάβετε ένα λεκτικό επίπεδο στο πρόγραμμα σας, όπου η παράμετρος -v θα το κάνει πιο ομιλητικό.

Μια άλλη πιθανή βελτίωση θα ήταν να επιτραπεί σε επιπλέον αρχεία και φακέλους η πρόσβασή τους στο σενάριο από τη γραμμή εντολών. Μπορούμε να εξάγουμε τα ονόματα αυτά με τη λίστα sys.argv και να τα προσθέσουμε στη λίστα source με τη χρήση της μεθόδου extend της κλάσης list.

Η σημαντικότερη βελτίωση θα ήταν να μην χρησιμοποιούσαμε το άρθρωμα os.system για τη δημιουργία αρχείων, αλλά αντ’ αυτού τα ενσωματωμένα αρθρώματα zipfile ή tarfile. Είναι μέρος της πρότυπης βιβλιοθήκης και διαθέσιμα άμεσα προς χρήση, χωρίς εξωτερικές εξαρτήσεις, όπως η διαθεσιμότητα του προγράμματος συμπίεσης στον υπολογιστή μας.

Ωστόσο, χρησιμοποίησα για τη δημιουργία αντιγράφου ασφαλείας τον τρόπο με το άρθρωμα os.system στα παραπάνω παραδείγματα καθαρά για παιδαγωγικούς σκοπούς, ώστε να γίνει κατανοητό στον καθένα και να είναι χρηστικό παράλληλα.

Θα δοκιμάσετε την συγγραφή της πέμπτης έκδοσης με τη χρήση του αρθρώματος zipfile αντί για την κλήση του os.system;

Η διαδικασία ανάπτυξης λογισμικού

Έχουμε ολοκληρώσει τα διάφορα στάδια της διαδικασίας συγγραφής λογισμικού. Ακολουθεί μια σύνοψη παρακάτω:

  1. Τι (Ανάλυση)
  2. Πώς (Σχεδιασμός)
  3. Συγγραφή (Υλοποίηση)
  4. Έλεγχος (Δοκιμές και αποσφαλμάτωση)
  5. Χρήση (Λειτουργία ή ανάπτυξη)
  6. Συντήρηση (Βελτίωση)

Ο συνιστώμενος τρόπος δημιουργίας προγραμμάτων είναι η διαδικασία που ακολουθήσαμε για τη συγγραφή του σεναρίου δημιουργίας αντιγράφων ασφάλειας: Αναλύστε και σχεδιάστε. Ξεκινήστε την εφαρμογή με μια απλή έκδοση. Δοκιμάστε και ελέγξτε για σφάλματα. Χρησιμοποιήστε την εφαρμογή για να δείτε αν λειτουργεί όπως θα θέλατε. Προσθέστε νέα χαρακτηριστικά και συνεχίστε επαναλαμβάνοντας τον κύκλο Συγγραφή-Έλεγχος-Χρήση όσες φορές απαιτείται. Να θυμάστε ότι το λογισμικό καλλιεργείται, δεν κατασκευάζεται.

Σύνοψη

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

Στη συνέχεια θα συζητήσουμε για τον αντικειμενοστρεφή προγραμματισμό.


Πίσω στα περιεχόμενα

Advertisements