Post Pic

Μαθαίνοντας Python – Μέρος 4ο

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

Στο τέλος του σημερινού οδηγού θα μπορούμε:

  • Να εκτελούμε εντολές υπό συνθήκη με την εντολή if
  • Να δημιουργούμε βρόγχους επαναλήψεων κάνοντας χρήση των εντολών
    • For
    • While
    • Να δημιουργούμε ακολουθίες αριθμών με την συνάρτηση range()

Προαπαιτούμενα

Μαθαίνοντας Python:  Μέρος Ι, Μέρος  ΙΙ, Μέρος ΙΙΙ

Πριν ξεκινήσουμε…

… θα ήθελα να επισημάνω ένα – δύο πρακτικά ζητήματα.

Στη συνέχεια παρουσιάζεται ο τρόπος για να επιτευχθούν οι στόχοι που περιγράψαμε στην εισαγωγή. Θα παρατηρήσετε ότι το άρθρο ακολουθεί τη δομή:

Μικρή περιγραφή του τι θέλουμε να επιτύχουμε (+ επιπλέον σχόλια)

Παράδειγμα κώδικα

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

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

Βεβαιωθείτε ότι δεν ξεχάσατε το μάτι της κουζίνας ανοικτό, ετοιμάστε μία κούπα καφέ ή τσάι, βάλτε απαλή μουσική και ξεκινάμε…

Εντολές υπό συνθήκη

Στην Python, όπως και στις περισσότερες γλώσσες υψηλού επιπέδου οι εντολές υπό συνθήκη πραγματοποιούνται κάνοντας χρήση της δήλωσης if.

Η σύνταξή της είναι η ακόλουθη:


if συνθήκη1:
    εντολή1
    εντολή2
    …

elif συνθήκη2:
    εντολή3
    εντολή4
    …

else:
    εντολή5
    εντολή6
    …

Παρατηρήσεις:

  • Το τμήμα if … θα πρέπει να εμφανίζεται αυστηρά μία μόνον φορά σε μια δήλωση if
  • Το τμήμα elif… μπορεί να εμφανίζεται καμία, μία, ή περισσότερες φορές
  • Το τμήμα else μπορεί να εμφανιστεί καμία ή μία φορά
  • Τα τμήματα if και elif πρέπει να ακολουθούνται υποχρεωτικά από μία συνθήκη και το σύμβολο ‘:’
  • Το τμήμα else ακολουθείται μόνον από το σύμβολο ‘:’ (χωρίς συνθήκη)
  • Οι εντολές στο σώμα1 κάθε τμήματος πρέπει να εισέχουν ένα tab απόσταση από το αντίστοιχο τμήμα τους (If, elif, else)

[1] Σώμα ενός τμήματος καλούμε την εντολή ή τις εντολές που αφορούν το τμήμα αυτό. Στην Python ένα σώμα κειμένου διακρίνεται με τις εσοχές. Κάθε σύνολο εντολών που εισέχουν αποτελούν σώμα της αμέσως προηγούμενης γραμμής, που η δήλωσής της ξεκινά μία εσοχή αριστερότερα.

Ας δούμε ένα παράδειγμα:

number = int(input("Please enter an integer: "))
if number < 0:
    print("The number is a negative")
elif number > 0:
    print("The number is a positive")
else:
    print("The number is a zero")

Σας υποσχέθηκα ότι από αυτή τη φορά θα αρχίσουμε να γράφουμε mini προγράμματα και διατείνομαι ότι είμαι άνθρωπος που κρατά τον λόγο του. Στον παραπάνω κώδικα η πρώτη γραμμή ζητά έναν ακέραιο αριθμό από τον χρήστη. Επειδή όπως είπαμε η Python δεν έχει τύπους ουσιαστικά ζητούμε από τον χρήστη μια ροή χαρακτήρων με την input(“Please enter an integer: ”) και περικλείουμε την εντολή αυτή στην int( ) ώστε οι χαρακτήρες που δίνει ο χρήστης να μετατραπούν σε ακέραιο. Προφανώς δεν γίνεται κανένας έλεγχος για το αν πράγματι ο χρήστης έδωσε ακέραιο αλλά δεδομένου ότι ο σημερινός οδηγός έχει σαν θέμα τον έλεγχο ροής θα θεωρήσουμε δεδομένο ότι οι τιμές που θα δοθούν θα είναι ακέραιοι (αν θέλετε να δείτε τι γίνεται αν δώσετε κάποια άκυρη τιμή, π.χ. αλφαριθμητικό, δοκιμάστε το, απλά για πειραματισμό).

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

Δημιουργία βρόγχων επαναλήψεων (for)

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

Η σύνταξή της είναι η ακόλουθη:

for μεταβλητή in ακολουθία:
    εντολή1
    εντολή2
    …

Παρατηρήσεις:

  • Με τον όρο “ακολουθία” στην Python εννοούμε τα αλφαριθμητικά και τις λίστες
  • Η “μεταβλητή” μπορεί να ονομάζεται όπως θέλετε και το μόνο που κάνει είναι να παίρνει σαν τιμή, με τη σειρά, την τιμή κάθε ενός από τα στοιχεία που απαρτίζουν την ακολουθία

Για παράδειγμα:

fruits = ['apple', 'orange', 'strawbery', 'pineapple', 'cranberries']

for fruit in fruits:
    print(fruit)

Έχουμε την λίστα fruits που αποτελείται από τα στοιχεία που μπορείτε να δείτε στην πρώτη γραμμή του κώδικά μας. Δημιουργούμε ένα for (δηλαδή έναν βρόγχο επανάληψης) στον οποίο η μεταβλητή fruit θα πάρει μία – μία τις τιμές των στοιχείων της λίστας fruits και όπως ορίζει η εντολή στο σώμα της δήλωσης for, θα τις εκτυπώσει. Έτσι το αποτέλεσμά σας θα μοιάζει κάπως έτσι:

apple

orange

strawbery

pineapple

cranberries

Δημιουργία βρόγχων επαναλήψεων (while)

Με τον ίδιο ακριβώς τρόπο συντάσσεται δήλωση while.

while συνθήκη:
    εντολή1
    εντολή2
    …

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

Ας ρίξουμε μια ματιά στον παρακάτω κώδικα:

number = 500

current, next = 0, 1

while next < number:

    print(current, end=' ')

        current, next = next, current + next

Για όσους δεν τον αναγνώρισαν πρόκειται για τον αλγόριθμο υπολογισμού της ακολουθίας Fibonacci. Στην ακολουθία αυτή τα δύο πρώτα στοιχεία είναι τα 0 και 1 ενώ κάθε επόμενο στοιχείο αποτελεί το άθροισμα των δύο προηγούμενων στοιχείων. Έχουμε δηλαδή:

0

1

1 + 0 = 1

1 + 1 = 2

3 + 2 = 3

2 + 3 = 5

κλπ.

Στο παράδειγμά μας ορίζουμε σαν όριο τον αριθμό 500 δηλαδή ζητούμε τους αριθμούς Fibonacci που είναι μικρότεροι του 500. Στην δεύτερη γραμμή αναθέτουμε τις τιμές 0, 1 στις μεταβλητές current και next αντιστοίχως.

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

Όσο η μεταβλητή next είναι μικρότερη από τη μεταβλητή number (το όριο δηλαδή που θέσαμε στην αρχή), εκτελείτε το σώμα του while. Δηλαδή:

  • Τυπώνεται ο αριθμός current
  • Γίνονται δύο ταυτόχρονες αναθέσεις τιμών
    • Current γίνεται ο αριθμός next
    • Ο next παίρνει την τιμή current + next

Αν νιώθετε μπερδεμένοι, είναι λογικό και φταίει η Python για αυτό. Στην Python υπάρχει η «ψυχεδελική» ανάθεση μεταβλητών (π.χ. a, b = 5, 12 ). Οι τιμές όμως των μεταβλητών αλλάζουν πραγματικά από την αμέσως επόμενη εντολή.

Έτσι, στο παράδειγμα μας τα αποτελέσματα της εντολής current, next = next, current + next θα ισχύσουν από την επόμενη γραμμή κώδικα. Ας παρακολουθήσουμε τώρα κάτι το παρανοϊκό:

Η μεταβλητή current θα πάρει την τιμή next αφότου τελειώσει η εντολή current, next = next, current + next. Έτσι για την ανάθεση τιμής στην next (που βρίσκεται στην ίδια εντολή) η current έχει ακόμη την παλιά της τιμή.

Την πρώτη φορά που εισερχόμαστε στο while η μεταβλητή current έχει την τιμή 0 και η next την τιμή 1. Αφότου τυπωθεί 0 (η τιμή της current δηλαδή) η μεταβλητή current ΘΑ πάρει την τιμή την μεταβλητής next. Στην ίδια εντολή η μεταβλητή next θα πάρει την τιμή του αθροίσματος current + next (δηλαδή 0 + 1 αφού η ανάθεση της τιμής στην current δεν έχει ισχύ ακόμη εφόσον δεν άλλαξε η εντολή). Έτσι μετά την εκτέλεση της μυστήριας αυτής ανάθεσης, η μεταβλητή current έχει γίνει 1 και η next (0+1=) 1.

Για όσους προβληματίστηκαν με την εντολή print(current, end=’ ‘), το end=’ ‘ ουσιαστικά επιβάλει τις τιμές να εκτυπώνονται η μία δίπλα στην άλλη διαχωριζόμενες από τον κενό χαρακτήρα ‘ ‘. Αν στην θέση της βάλετε print(current) θα διαπιστώσετε ότι οι τιμές της ακολουθίας Fibonacci σας θα εμφανίζονται κατακόρυφα.

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

Η συνάρτηση range() δημιουργεί ακολουθίες αριθμών. Έχει διάφορες μορφές:

  • range(number) : Δημιουργείται μια ακολουθία αριθμών από το 0 ως την προηγούμενη ακέραια τιμή της μεταβλητής number
  • range(from, to) : Δημιουργείται μια ακολουθία αριθμών από την τιμή της μεταβλητής from μέχρι την προηγούμενη ακέραια τιμή της μεταβλητής to
  • range(from, to, step) : Δημιουργείται μια ακολουθία αριθμών από την τιμή της μεταβλητής from μέχρι την προηγούμενη ακέραια τιμή της μεταβλητής to με βήμα step.

Στην πράξη:

for iterator in range(10):

    print(iterator, end=' ')

Θα δώσει σαν αποτέλεσμα: 0 1 2 3 4 5 6 7 8 9

for iterator in range(4, 10):

    print(iterator, end=' ')

Θα δώσει σαν αποτέλεσμα: 4 5 6 7 8 9

for iterator in range(1, 11, 2):

    print(iterator, end=' ')

Θα δώσει σαν αποτέλεσμα: 1 3 5 7 9

Η συνάρτηση range() αν συνδυαστεί με την συνάρτηση len() μπορεί να μας δώσει έναν πολύ ωραίο τρόπο να απαριθμούμε τα αποτελέσματα που τυπώνονται μέσα σε έναν βρόγχο επανάληψης.

Έχουμε το ακόλουθο πρόγραμμα που τυπώνει στην οθόνη τις 10+2 εντολές αγοράς gadget.

commandments = ["Thou shalt use a standard plug (preferably USB)",

    "Thou shalt have good battery life",

    "Thou shalt give nothing unneeded in the box, but always give necessary items",

    "Thou shalt offer accessories, or at least help partners to",

    "Thine gadgetry shall make sense",

    "Thou shalt have a reasonable price for the life of thine gadget",

    "Thou shalt not package crap software",

    "Thou shalt allow thine gadgetry to be hacked",

    "Thou shalt make thine gadgetry easy to interface",

    "Thou shalt allow thine gadgetry to be acted upon by standard OS means",

    "Thou shalt not cripple thine feature set",

    "Thou shalt allow thine gadget to do whatever it needs to on its own"]

print("The 10+2 commandments of Geek Gadgetry")

print()

for iterator in range(len(commandments)):

    print(iterator, commandments[iterator])

Δέχομαι την κατηγορία ότι ο ορισμός της λίστας των 10+2 εντολών πιάνει περισσότερο χώρο από το πρόγραμμα αυτό κάθε αυτό (μία δήλωση for των δύο γραμμών) αλλά πρέπει να παραδεχθείτε ότι είναι cool εντολές…

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

Ο iterator είναι η μεταβλητή που θα πάρει την τιμή των στοιχείων που βρίσκονται μέσα στην λίστα commandments. Ωστόσο αντί να πούμε for iterator in commandments (πράγμα που θα ήταν απόλυτα σωστό) περικλείουμε το commandments σε μία συνάρτηση len() που θα μας επιστρέψει τον αριθμό τον στοιχείων της λίστας commandments. Η len() με τη σειρά της περικλείεται σε μια συνάρτηση range() η οποία θα μας επιστρέψει μια ακολουθία αριθμών με τόσα στοιχεία όσα και αυτά της λίστας commandments.

Στη συνέχεια η εντολή print τυπώνει:

  • Τον αριθμό της θέσης του στοιχείου στη λίστα (0, 1, 2, 3). Υπενθυμίζουμε ότι στην Python η πρώτη θέση πινάκων και λιστών θεωρείται η θέση 0.
  • Το στοιχείο που βρίσκεται στην εκάστοτε θέση της λίστας, στην περίπτωσή μας δηλαδή κάθε μία από τις 10 + 2 εντολές.

Αν όλα πήγαν καλά το αποτέλεσμά σας πρέπει να μοιάζει με το παρακάτω:

0 Thou shalt use a standard plug (preferably USB)

1 Thou shalt have good battery life

2 Thou shalt give nothing unneeded in the box, but always give necessary items

3 Thou shalt offer accessories, or at least help partners to

4 Thine gadgetry shall make sense

5 Thou shalt have a reasonable price for the life of thine gadget

6 Thou shalt not package crap software

7 Thou shalt allow thine gadgetry to be hacked

8 Thou shalt make thine gadgetry easy to interface

9 Thou shalt allow thine gadgetry to be acted upon by standard OS means

10 Thou shalt not cripple thine feature set

11 Thou shalt allow thine gadget to do whatever it needs to on its own

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

Να είστε καλά και να φροντίζεται τον εαυτό σας.

Μπορείτε να κατεβάσετε τα αρχεία του βοηθήματος εδώ

download

Trackbacks - Pingbacks

Αφήστε ένα σχόλιο

* Το όνομα σας, το Email, και το σχόλιο είναι απαιτούμενα

Γραφτείτε στις Email Ενημερώσεις

Εισάγετε το email σας:

Powered by FeedBurner

Log In

Register

Lost your Password?

Tag Cloud

Οι Φίλοι μας στο Twitter

gkapraras
tophostGR
jsclavos
gegenos
papaki
FORADA
lennondtps
wdfgr
nfountas
zouri9
Th3Ag3nt
ThodorisV
thevoyager
techfansGR
wp2blog
St0iK
andreas_m68
herath72
silve992
Dimitraakis
kymagr
papano
amorphis_
nikos171984
kalliophhhh
g_argyrakis
gstam78
GamesHellasGR
dimsim7
gkatsampirhs
giorgioret
Zoitsa_2010
ultrathunder
Weird_AL
splusgr
payne4life
fotisk
bartvii
LewisHowes
Chrysanthospro
Serderides
ideodoxeio
hambos227
BeBestT
gamosgamos
Φίλοι: 271 Μας ακολουθούν: 221

To GreekTuts Στο Διαδύκτιο

Bookmark & Share

Γίνε Συνδρομητής Στο GreekTuts


Κερδίστε πρόσβαση σε επιπλέον υλικό και άρθρα, αλλά και πολλές άλλες παροχές και προσφορές αγοράζοντας μία απο τις συνδρομές που σας προσφέρει το GreekTuts.

Γράψτε Για Το GreekTuts


Θέλετε και εσείς να γράψετε άρθρα για το GreekTuts; Διαβάστε περισσότερα εδώ. Οποιοσδήποτε μπορεί να στείλει, γι'αυτό αδράξτε την ευκαιρία και στείλτε μας και εσείς.