Εδώ βλέπετε τις διαφορές μεταξύ της επιλεγμένης έκδοσης και της τρέχουσας έκδοσης της σελίδας.
Προηγούμενος έλεγχος και από τις δύο πλευρές Προηγούμενη αναθεώρηση | |||
python [2021/01/30 13:59] 62.210.151.70 παλαιότερη έκδοση επαναφέρθηκε (2017/03/21 12:12) |
python [2021/03/18 10:49] 176.58.194.132 [Λίγα Μαθηματικά] |
||
---|---|---|---|
Γραμμή 1: | Γραμμή 1: | ||
+ | ======Καλωσορίσατε στην Python!====== | ||
+ | To wiki αυτό έγινε για να προσφέρει υποστήριξη για την Python, μια εναλλακτική και ανοιχτή γλώσσα προγραμματισμού που πραγματικά μπορεί κανείς να μάθει να προγραμματίζει σε αυτήν σε 20 λεπτά! Για πιο σοβαρή ενασχόληση με την γλώσσα είναι καλύτερο κάποιος να διαβάσει το [[http:// | ||
+ | |||
+ | Αρχικά να πούμε μερικά λόγια για την Python. | ||
+ | |||
+ | Καταρχήν το όνομα δεν προέρχεται από το γνωστό ερπετό της οικογένειας Pythonidae αλλά από κάτι πιο χαρούμενο και προσβάσιμο, | ||
+ | H Python πρωτοεκδόθηκε από τον Ολλανδό προγραμματιστή Guido van Rossum το 1991 και αναπτύσσεται ως ανοιχτό λογισμικό (free software) και η διαχείρισή της γίνεται από τον μη κερδοσκοπικό οργανισμό [[http:// | ||
+ | |||
+ | |||
+ | ======Update====== | ||
+ | |||
+ | Πάει αρκετός καιρός από τότε που ανανεώθηκε το συγκεκριμένο Wiki και παρόλο που δεν έχουμε (σαν forum) κάνει σημαντική βελτίωση στην Python, νομίζω ότι έχoυν γίνει καλύτερα κατανοητές κάποιες βασικες λειτουργίες της, με αποτέλεσμα ο κώδικας των προηγούμενων παραδειγμάτων να είναι παροχυμένος. Αυτό όμως δεν πάει να πει ότι είναι άχρηστος ή ότι δεν δουλεύει. Ίσα ίσα, ένα πρόβλημα που διαπιστώθηκε είναι οτι στα περισσότερα βιβλία χρησιμοποιείται πάντα ο πιο εκλεπτυσμένος τρόπος ώστε να γίνει κάτι, αφήνωντας τους αρχάριους κάπως χαμένους! Πάει όμως να πει ότι είναι σχετικά λάθος επειδή υπάρχουν καλύτερα εργαλεία στην Python για να αντιμετωπιστούν τα προβλήματα που παρουσιάστηκαν. | ||
+ | |||
+ | Επομένως, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ======Τέλειωνε, | ||
+ | |||
+ | Για να προγραμματίσει κάποιος σε Python θα πρέπει αρχικά να την έχει εγκατεστημένη στον υπολογιστή του. | ||
+ | |||
+ | Η εγκατάσταση είναι μια πάρα πολύ απλή διαδικασία, | ||
+ | |||
+ | Για όποιον χρησιμοποιεί GNU/Linux η εγκατάσταση είναι ακόμα πιο εύκολη: | ||
+ | $ python | ||
+ | και πατήστε enter. Αν η γλώσσα είναι εγκατεστημένη θα πρέπει να δείτε κάτι τέτοιο: | ||
+ | |||
+ | Python 3.6.0 (default, Jan 16 2017, 12: | ||
+ | [GCC 6.3.1 20170109] on linux | ||
+ | Type " | ||
+ | >>> | ||
+ | |||
+ | Να σημειωθεί εδώ ότι η πιο πρόσφατη έκδοση της Python πλέον είναι η 3. Tο tutorial σήμερα είναι γραμμένο για 3 και αναφέρει τις διαφορές με την 2 όπου υπάρχουν. Επειδή υπάρχουν κάποιες βασικές διαφορές (π.χ. η raw_input αντί για την input της έκδοσης 3), αν σκοπεύετε να δουλέψετε στην 2 καλό είναι να τις διαβάσετε και να τροποποιήσετε τα προγράμματα αναλόγως. | ||
+ | |||
+ | Όταν λοιπόν είστε έτοιμοι να γράψετε το πρόγραμμά σας θα χρειαστείτε επεξεργαστή κειμένου. Αυτός μπορεί να είναι από τα απλά Notepad και gedit ή να είναι πιο " | ||
+ | |||
+ | Επειδή το να γράφεις κώδικα σε απλό κειμενογράφο δεν είναι πρακτικό, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ======Γράφουμε Κώδικα!====== | ||
+ | |||
+ | Παραδοσιακά το πρώτο πρόγραμμα που γράφει κανείς σε μια νέα γλώσσα προγραμματισμού, | ||
+ | |||
+ | Τα πράγματα στην Python είναι τόσο απλά: | ||
+ | print(' | ||
+ | |||
+ | Όταν λοιπόν γράψουμε το παραπάνω στον IDLE και πατήσουμε enter στην οθόνη μας θα εμφανιστεί το παρακάτω: | ||
+ | Geia sou ntounia! | ||
+ | |||
+ | Από εδώ και πέρα ο κώδικας θα έχει τη μορφή | ||
+ | |||
+ | >>> | ||
+ | Geia sou ntounia! | ||
+ | |||
+ | τα 3 > αποτελεί σημάδι ότι αυτή τη σειρά την **εισάγουμε εμείς** | ||
+ | ενώ αυτή που δεν έχει μας την επιστρέφει ο υπολογιστής | ||
+ | |||
+ | Σε αυτό το σημείο να αναφέρουμε επίσης ότι οτιδήποτε και να γράψουμε πίσω από το σύμβολο # ο υπολογιστής το αγνοεί. Ουσιαστικά το # χρησιμοποιείται για να εισάγουμε σχόλια μέσα στον κώδικα μας για να διευκολύνουν κάποιον που τον διαβάζει. | ||
+ | |||
+ | >>> | ||
+ | Geia sou ntounia! | ||
+ | |||
+ | |||
+ | |||
+ | παρατηρούμε ότι το print είναι χρωματισμένο πορτοκαλί που υποδηλώνει ότι είναι μια εντολή ενώ το 'Geia sou ntounia!' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ======Λίγα Μαθηματικά====== | ||
+ | |||
+ | Αργά ή γρήγορα (μάλλον γρήγορα) θα φτάσετε στο σημείο όπου θα πρέπει να εκτελέσετε μαθηματικές πράξεις! | ||
+ | Οι πράξεις στην Python είναι σχετικά απλές: | ||
+ | >>> | ||
+ | 5 | ||
+ | >>> | ||
+ | -1 | ||
+ | >>> | ||
+ | 6 | ||
+ | Η μήπως όχι; | ||
+ | >>> | ||
+ | 0 | ||
+ | Όπα! Τοπογράφος είμαι ρε παιδιά, | ||
+ | Μην ανησυχείτε συνάδελφοι δεν πρόκειται για αστείο των Monty Python (άλλωστε δεν έχουν κακόγουστα) αλλά για ιδιότητες των αριθμών. Όταν γράφουμε στην Python έναν αριθμό " | ||
+ | |||
+ | Για να δοκιμάσουμε κάπως διαφορετικά: | ||
+ | >>> | ||
+ | 1.5 | ||
+ | >>> | ||
+ | 1.5 | ||
+ | >>> | ||
+ | 1.5 | ||
+ | Αχά! Ώστε έτσι δουλεύει. | ||
+ | Ναι, δουλεύει γιατί πλέον η γλώσσα αντιλαμβάνεται τον αριθμό ως //float//, δηλαδή ως floating point number, δηλαδή ως πραγματικό. | ||
+ | |||
+ | Ευτυχώς στην έκδοση 3 δεν υπάρχει αυτό το θέμα. Η διαίρεση δίνει το σωστό αποτέλεσμα όπως κι αν είναι γραμμένοι οι αριθμοί: | ||
+ | >>> | ||
+ | 0.6666666666666666 | ||
+ | |||
+ | Μπορούμε επίσης να βάλουμε μεταβλητές | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 60 | ||
+ | >>> | ||
+ | 0 | ||
+ | βλέπουμε πως και εδώ έχουμε πρόβλημα με τους //int// αριθμούς. Για να παίρναμε το αναμενόμενο αποτέλεσμα θα έπρεπε ή να δίναμε τους αριθμούς ως floats (δλδ 5.0 και 12.0 αντίστοιχα) ή να ορίζαμε στη γλώσσα ότι είναι //float// ενώ τους εισάγαμε ως //int//. Αυτό γίνεται έτσι: | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 0.41666666666666669 | ||
+ | Όπως σκεφτήκατε θα δούλευε και αν μετατρέπαμε μόνο τον έναν από τους δυο σε //float//. Καλό είναι όμως σε ένα πρόγραμμα να τους μετατρέπουμε όλους γιατί πάλι θα είχαμε πρόβλημα αν χρειαζόταν να γίνει η διαίρεση y/100. Επίσης η μετατροπή των μεταβλητών σε //float// μας εξοικονομεί χρόνο (δεν χρειάζεται κάθε φορά να γράφουμε 5.0) αλλά και προσφέρει λειτουργικότητα στον χρήστη ο οποίος δεν ξέρει πως λειτουργεί ο μηχανισμός της Python. | ||
+ | |||
+ | Όπως είπαμε και πριν στην Python3 δεν έχουμε θέμα: | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 60 | ||
+ | >>> | ||
+ | 0.4166666666666669 | ||
+ | |||
+ | σημείωση: | ||
+ | |||
+ | |||
+ | |||
+ | ======Import Math====== | ||
+ | |||
+ | Και μόλις μάθατε πως καλούμε το //module// **math**, το οποίο μας βοηθά να κάνουμε πιο πολύπλοκες πράξεις και υπολογισμούς, | ||
+ | Το μόνο, λοιπόν, | ||
+ | import math | ||
+ | Τότε ο IDLE αλλάζει γραμμή και έχει καλέσει το **math**. | ||
+ | Εκτός του ότι τώρα μπορούμε να κάνουμε πιο πολύπλοκες και τοπογραφικές πράξεις, | ||
+ | |||
+ | Παρακάτω ακολουθεί μια λίστα επιλεγμένων συναρτήσεων του **math**. | ||
+ | Για να δείτε όλη τη λίστα επισκεφτείτε το : [[http:// | ||
+ | |||
+ | =====Λίστα Γενικών Συναρτήσεων===== | ||
+ | **math.ceil(x)** | ||
+ | Επιστρέφει τον x σαν //float//, στρογγυλοποιημένο κατά πάνω (στον κοντινότερο ακέραιο). | ||
+ | |||
+ | |||
+ | **math.floor(x)** | ||
+ | Επιστρέφει τον x σαν //float//, στρογγυλοποιημένο κατά κάτω (στον κοντινότερο ακέραιο). | ||
+ | |||
+ | **math.fabs(x)** | ||
+ | Επιστρέφει την απόλυτη τιμή του x. | ||
+ | |||
+ | **math.hypot(x, | ||
+ | Επιστρέφει την υποτείνουσα των κάθετων πλευρών x και y. (καλό ε;) | ||
+ | |||
+ | =====Λίστα Εκθετικών και Λογαριθμικών Συναρτήσεων===== | ||
+ | **math.exp(x)** | ||
+ | Επιστρέφει το e^x. | ||
+ | |||
+ | **math.log(x)** | ||
+ | Επιστρέφει τον λογάριθμο του x με βάση το e. | ||
+ | |||
+ | **math.log10(x)** | ||
+ | Επιστρέφει τον λογάριθμο του x με βάση το 10. | ||
+ | |||
+ | **math.pow(x, | ||
+ | Επιστρέφει το x^y. | ||
+ | |||
+ | **math.sqrt(x)** | ||
+ | Επιστρέφει την τετραγωνική ρίζα του x. | ||
+ | |||
+ | |||
+ | =====Λίστα Τριγωνομετρικών Συναρτήσεων (προσοχή αποτελέσματα σε rad)===== | ||
+ | |||
+ | **math.sin(x)** | ||
+ | Ημίτονο x (σε rad). | ||
+ | |||
+ | **math.cos(x)** | ||
+ | Συνημίτονο x (σε rad). | ||
+ | |||
+ | **math.tan(x)** | ||
+ | Εφαπτομένη x (σε rad). | ||
+ | |||
+ | Για τα αντίστοιχα τόξα απλά προσθέτουμε ένα a μπροστά από την συνάρτηση (πχ. arctan = math.atan(x)) | ||
+ | |||
+ | **Μετατροπή Γωνιών: | ||
+ | |||
+ | **math.degrees(x)** | ||
+ | Μετατρέπει την γωνία x από rad σε μοίρες. | ||
+ | |||
+ | **math.radians(x)** | ||
+ | Μετατρέπει την γωνία x από μοίρες σε rad. | ||
+ | |||
+ | =====Μαθηματικές Σταθερές===== | ||
+ | |||
+ | το **math** συμπεριλαμβάνει επίσης και τις μαθηματικές σταθερές των | ||
+ | |||
+ | **π (math.pi)** και | ||
+ | |||
+ | **e (math.e)**. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ======Το πρώτο αληθινό μας πρόγραμμα!====== | ||
+ | |||
+ | Λοιπόν νομίζω ότι σε αυτό το σημείο έχουν περάσει γύρω στα 17 λεπτά και όπως ειπώθηκε παραπάνω θα προγραμματίσουμε σε 20! Τα προηγούμενα ήταν λίγο βαρετά αλλά απαραίτητα για να μπορέσουμε να προχωρήσουμε σε πιο " | ||
+ | |||
+ | Το πρόγραμμα που θα φτιάξουμε δεν είναι άλλο από το 1ο θεμελιώδες πρόβλημα της πολυαγαπημένης μας Γεωδαισίας (γνωρίζουμε τις συντεταγμένες του Α, την απόσταση ΑΒ και τη γωνία διεύθυνσης αΑΒ και ψάχνουμε τις συντεταγμένες του Β). | ||
+ | |||
+ | Σε αυτό το σημείο θα ήθελα να σας συστήσω μια πολύ καλή μας φίλη, την raw_input. Η raw_input είναι φοβερή γιατί μας βοηθάει να εισάγουμε μεταβλητές στον υπολογιστή πολύ πιο θεαματικά από το χ=5, για παράδειγμα! Ας το δούμε στην πράξη! | ||
+ | |||
+ | σημείωση: | ||
+ | |||
+ | //Φωνή από το πουθενά// | ||
+ | |||
+ | import math | ||
+ | xa=input(' | ||
+ | xa=float(xa) | ||
+ | ya=input(' | ||
+ | ya=float(ya) | ||
+ | sab=input(' | ||
+ | sab=float(sab) | ||
+ | aab=input(' | ||
+ | aab=float(aab) | ||
+ | aabr=math.pi*aab/ | ||
+ | xb= xa+sab*math.sin(aabr) # | ||
+ | yb= ya+sab*math.cos(aabr) # | ||
+ | print(' | ||
+ | |||
+ | Και αυτό ήταν! | ||
+ | Παρατηρείστε ότι αν το διαβάσετε είναι πολύ απλό να καταλάβετε τι κάνει περίπου ακόμη και αν λείπουν τα σχόλια! | ||
+ | |||
+ | Τώρα ας το κάνουμε λίγο πιο τακτοποιημένο, | ||
+ | |||
+ | import math | ||
+ | xa, ya=input(' | ||
+ | xa=float(xa) | ||
+ | ya=float(ya) | ||
+ | sab, aab=input(' | ||
+ | sab=float(sab) | ||
+ | aab=float(aab) | ||
+ | aabr=math.pi*aab/ | ||
+ | xb= xa+sab*math.sin(aabr) # | ||
+ | yb= ya+sab*math.cos(aabr) # | ||
+ | print(' | ||
+ | |||
+ | Τι έχουμε κάνει εδω; Ουσιαστικά εισάγουμε δυο μεταβλητές με μια input (raw_input), | ||
+ | |||
+ | Με το σύμβολο % ο υπολογιστής " | ||
+ | |||
+ | Δυστυχώς μέχρι τώρα η input στην Python2 δεν έχει αποκτήσει την split της οπότε πρέπει να χρησιμοποιήσουμε την raw_input με παρόμοιο τρόπο: | ||
+ | |||
+ | import math | ||
+ | xa, ya=raw_input(' | ||
+ | xa=float(xa) | ||
+ | ya=float(ya) | ||
+ | sab, aab=raw_input(' | ||
+ | sab=float(sab) | ||
+ | aab=float(aab) | ||
+ | aabr=math.pi*aab/ | ||
+ | xb= xa+sab*math.sin(aabr) # | ||
+ | yb= ya+sab*math.cos(aabr) # | ||
+ | print(' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ======If Statement====== | ||
+ | |||
+ | Ας προχωρήσουμε λίγο βαθύτερα στα νερά του προγραμματισμού! | ||
+ | Στο κεφάλαιο αυτό παρουσιάζεται το If. Ουσιαστικά πρόκειται για μια δήλωση συνθήκης στο πρόγραμμα μας! | ||
+ | |||
+ | Ένα παράδειγμα ψευτο-κώδικα θα μπορούσε να είναι αυτό: | ||
+ | Τι ώρα είναι? | ||
+ | Αν η ώρα είναι ανάμεσα στις 00:00 και 12:00 : | ||
+ | | ||
+ | Αλλιώς : | ||
+ | | ||
+ | |||
+ | Απλό ε? Για να το δούμε και σε πραγματικό κώδικα: | ||
+ | |||
+ | |||
+ | password=input(' | ||
+ | if password.endswith(' | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | |||
+ | Παρατηρείστε ότι το print είναι πιο μέσα από το if. Αυτό σημαίνει ότι θα εκτελεστεί μόνο όταν ο χρήστης εισάγει το σωστό σύνθημα. Αλλιώς είναι σαν να μην υπάρχει. | ||
+ | |||
+ | Φυσικά μπορούμε να βάλουμε όσα if θέλουμε, | ||
+ | |||
+ | (Στην Python2 πρέπει να κάνουμε raw_input με παρόμοιο τρόπο: | ||
+ | |||
+ | password=raw_input(' | ||
+ | |||
+ | και ίδιο το υπόλοιπο παράδειγμα) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ======While Statement====== | ||
+ | |||
+ | Το if μπορεί να είναι πολύ βολικό αλλά έχει ένα βασικό μειονέκτημα. Μόλις ολοκληρωθεί η διαδικασία το πρόγραμμα τερματίζεται. Φανταστείτε πόσο άβολα θα ήταν τα πράγματα αν εισάγατε των κωδικό του e-mail σας λάθος και το πρόγραμμα δεν σας έδινε δεύτερη ευκαιρία! | ||
+ | |||
+ | Το μεγάλο αυτό κενό έρχεται να καλύψει η while, που ουσιαστικά επαναλαμβάνει το κομμάτι του κώδικα που θέλουμε μέχρι να βρούμε το σωστό σύνθημα. | ||
+ | |||
+ | Για να δούμε πως θα δούλευε το παραπάνω πρόγραμμα με την while: | ||
+ | while 1: | ||
+ | password=input(' | ||
+ | if password.endswith(' | ||
+ | print(' | ||
+ | break | ||
+ | else: | ||
+ | print(' | ||
+ | |||
+ | Τα καινούρια στοιχεία εδώ είναι το while και το break. | ||
+ | |||
+ | Το while ορίζει από ποιο σημείο και έπειτα αρχίζουν οι επαναλήψεις. Προσέξτε ότι όλες οι υπόλοιπες γραμμές είναι " | ||
+ | |||
+ | To break ουσιαστικά " | ||
+ | |||
+ | Και αν θέλουμε να βάλουμε περιορισμό στο while? Αν στο παράδειγμα μας θέλαμε να δίναμε 3 ευκαιρίες στον χρήστη να βρεί τον κωδικό; | ||
+ | |||
+ | x=1 | ||
+ | while x <= 3: | ||
+ | password=input(' | ||
+ | if password.endswith(' | ||
+ | print(' | ||
+ | break | ||
+ | else: | ||
+ | print(' | ||
+ | x=x+1 | ||
+ | else: | ||
+ | print 'You failed three times. The gates are closed forever.' | ||
+ | |||
+ | ( Όσοι επιμένετε σε Python2 μην ξεχάσετε την χρήση της raw_input αντί της input. ) | ||
+ | |||
+ | **Άραγε μετά από αυτά, μπορείτε να γράψετε ενα πρόγραμμα που να επιλύει το 2ο Θεμελιώδες Πρόβλημα; | ||
+ | |||
+ | |||
+ | |||
+ | ======Exceptions : όταν αρμενίζουμε στραβά====== | ||
+ | |||
+ | Σίγουρα μέχρι τώρα στα πειράματα σας με τη γλώσσα θα έχετε συναντήσει αυτό το μήνυμα: | ||
+ | Traceback (most recent call last): | ||
+ | File "< | ||
+ | 5/0 | ||
+ | ZeroDivisionError: | ||
+ | |||
+ | Όπου και τερματίζεται το πρόραγαμμα. | ||
+ | Τις περισσότερες φορές είναι συντακτικό λάθος (syntax error) που σημαίνει ότι έχετε γράψει κάτι λάθος στον κώδικα σας. | ||
+ | |||
+ | Αν δεν είναι όμως; Αν διαβάσετε πιο προσεκτικά το παραπάνω σφάλμα θα δείτε ότι στην τελευταία του γραμμή εμφανίζει το λόγο του σφάλματος : ZeroDivisionError , δηλαδη διαιρέσαμε με το 0. | ||
+ | |||
+ | Υπάρχουν διάφοροι τύποι σφαλμάτων. Για παράδειγμα αν στο πρόγραμμα επίλυσης του 1ου θεμελιώδους Προβλήματος, | ||
+ | |||
+ | Dose mou to Xa kai Ya -xwrismena me komma kai keno-:32 132 | ||
+ | Traceback (most recent call last): | ||
+ | File "/ | ||
+ | xa, xb=input(' | ||
+ | ValueError: need more than 1 value to unpack | ||
+ | |||
+ | Αυτό που περιμέναμε! ValueError: Μας λέει ότι χρειάζεται ακόμα μια μεταβλητή. | ||
+ | |||
+ | Μπορούσαμε να το είχαμε προβλέψει ότι κάποιος δεν θα έβαζε κόμμα και να είχαμε προετοιμάσει το πρόγραμμα να αντιδράσει ανάλογα! Για συντομία, | ||
+ | |||
+ | try: | ||
+ | xa, ya=input(' | ||
+ | except ValueError: | ||
+ | print(' | ||
+ | raise | ||
+ | |||
+ | Τώρα σε περίπτωση που εισάγουμε μια μεταβλητή ή εισάγουμε δυο αλλα δεν τις χωρίσουμε με κόμμα το πρόγραμμα θα βρεθεί μπροστά σε ένα // | ||
+ | |||
+ | Τι θα γινόταν αν δεν είχαμε βάλει το raise? Δοκιμάστε το! | ||
+ | |||
+ | Προφανώς αν δεν είχαμε βάλει το raise το πρόγραμμα θα συνέχιζε κανονικά και θα μας κυνηγούσε όλος ο τομέας Γεωδαισίας. | ||
+ | Άραγε μπορούμε να συνδυάσουμε μια επαναληπτική διαδικασία (while) με το except ώστε το πρόγραμμα να μην προχωράει παρακάτω μέχρι να του δηλώσουμε σωστά τις μεταβλητές; | ||
+ | |||
+ | Φυσικά! | ||
+ | |||
+ | import math | ||
+ | while 1: | ||
+ | try: | ||
+ | xa, ya=input(' | ||
+ | except ValueError: | ||
+ | print(' | ||
+ | else: | ||
+ | break | ||
+ | |||
+ | ======H Python όπως πρέπει να είναι!====== | ||
+ | |||
+ | |||
+ | Αρχίζοντας πρέπει να ξέρετε 3 βασικά πράγματα για την Python και καλο είναι να μην τα ξεχάσετε ποτέ! | ||
+ | |||
+ | 0) οι λίστες (lists) είναι ένα απο τα πιο ισχυρά εργαλεία της python | ||
+ | 1) βολεύει να γράφουμε χρησιμοποιώντας συναρτήσεις (functions) | ||
+ | 2) τα πάντα στην python είναι αντικείμενα (objects) | ||
+ | |||
+ | |||
+ | |||
+ | =====Lists===== | ||
+ | |||
+ | Η λίστα είναι μια από τις τρεις δομές δεδομένων (data structures) της Python μαζί με τα dictionaries και τα tuples. Πιο σημαντικό είναι ότι η λίστα είναι object (αντικείμενο) και ως object έχει ιδιότητες! Τα στοιχεία της λίστας βρίσκονται μέσα σε [] και είναι χωρισμένα με κόμμα. Στοιχεία μιας λίστας μπορεί να είναι αριθμοί, | ||
+ | |||
+ | Να μια λίστα: | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | [1, 2, 3, ' | ||
+ | |||
+ | >>> | ||
+ | 1 | ||
+ | |||
+ | >>> | ||
+ | 3 | ||
+ | |||
+ | >>> | ||
+ | [5, 4, 3] # επιστρέφει το τελευταίο στοιχείο της λίστας! | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | 8 | ||
+ | |||
+ | >>> | ||
+ | Traceback (most recent call last): | ||
+ | File "< | ||
+ | IndexError: list index out of range | ||
+ | |||
+ | Όπως καταλάβατε, | ||
+ | |||
+ | |||
+ | |||
+ | Ας ξαναφτιάξουμε μια πιο ορθόδοξη λίστα, σαν αυτές που θα χρησιμοποιείται συνήθως, | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | [1, 6, 3, 8, 3, 8, 4, 9] | ||
+ | |||
+ | Τι άλλο ενδιαφέρον μπορούμε να κάνουμε με τις λίστες; | ||
+ | |||
+ | >>> | ||
+ | [1, 6, 3] | ||
+ | |||
+ | >>> | ||
+ | [1, 6, 3, 8, 3, 8] | ||
+ | |||
+ | >>> | ||
+ | [4, 9] | ||
+ | |||
+ | >>> | ||
+ | [3, 8] | ||
+ | |||
+ | >>> | ||
+ | [1, 6, 3, 8, 3, 8, 4, 9] # όλα τα στοιχεία | ||
+ | |||
+ | >>> | ||
+ | [1, 3, 3] | ||
+ | |||
+ | >>> | ||
+ | [8, 4] | ||
+ | |||
+ | List Methods | ||
+ | |||
+ | Μεθόδοι είναι διάφορες " | ||
+ | |||
+ | >>> | ||
+ | [1, 6, 3, 8, 3, 8, 4, 9] | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | [1, 6, 3, 8, 3, 8, 4, 9, 5] | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | [1, 6, 3, 8, 3, 8, 4, 9, 5, 3, 2, 6] | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | [1, 6, 10, 3, 8, 3, 8, 4, 9, 5, 3, 2, 6] | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | [1, 6, 3, 3, 8, 4, 9, 5, 3, 2, 6] | ||
+ | |||
+ | >>> | ||
+ | 6 | ||
+ | |||
+ | >>> | ||
+ | 3 | ||
+ | |||
+ | >>> | ||
+ | 8 | ||
+ | |||
+ | >>> | ||
+ | 2 | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | [1, 2, 3, 3, 4, 5, 6, 8, 8, 9, 10] | ||
+ | |||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | [10, 9, 8, 8, 6, 5, 4, 3, 3, 2, 1] | ||
+ | |||
+ | |||
+ | =====Συναρτήσεις===== | ||
+ | |||
+ | Η ιδέα των συναρτήσεων είναι ιδιαίτερα απλή και εύχρηστη. Μια συνάρτηση είναι ενα block, το οποίο όποτε και όπου το καλείς κάνει πάντα την ίδια δουλειά. Για παράδειγμα, | ||
+ | |||
+ | Γράφω εδω έναν ψευδοκώδικα για να δείτε τι εννοώ | ||
+ | |||
+ | # | ||
+ | Δώσε συντεταγμένες σημείων | ||
+ | Υπολογισμός ΔX/ΔΥ | ||
+ | Διερεύνηση | ||
+ | Τελική Γωνία | ||
+ | |||
+ | Αυτό θα πρέπει να το κάνετε κάθε φορά που θέλετε να υπολογίσετε μια γωνία διεύθυνσης. Αν όμως είχατε κάνει μια συνάρτηση θα σασ λυνόταν τα χέρια: | ||
+ | |||
+ | def ΥπολογισμοςΓωνίαςΔιεύθυνσης(x1, | ||
+ | Υπολογισμός ΔΧ/ΔΥ | ||
+ | Διερεύνηση | ||
+ | Τελική Γωνία | ||
+ | |||
+ | Έτσι, όποτε θέλετε να υπολογίσετε μια ακόμη γωνία διεύθυνσης, | ||
+ | |||
+ | Ορισμός της Συνάρτησης | ||
+ | |||
+ | Όπως είδαμε παραπάνω τα βασικά μέρη για να οριστεί μια συνάρτηση είναι το όνομα της και η λειτουργία της. Τίποτα άλλο δεν είναι υποχρεωτικό. Να η πιο απλή συνάρτηση. Λέγεται simple (to def -define- μπροστά είναι υποχρεωτικό κατα τον ορισμό της) και όταν εκτελέιται..δεν κάνει τίποτα! | ||
+ | |||
+ | def simple(): | ||
+ | pass | ||
+ | |||
+ | Οι πραγματικές συναρτήσεις είναι λίγο πιο πολύπλοκες από αυτήν. | ||
+ | |||
+ | def freefall(t, g=9.81): | ||
+ | " | ||
+ | S=0.5*g*pow(t, | ||
+ | print(S) | ||
+ | |||
+ | Ας αναλύσουμε την λειτουργία της συνάρτησης: | ||
+ | |||
+ | Στην γραμμή 1 ορίζεται η συνάρτηση freefall(), η οποία παίρνει ως μεταβλητές το t (χρόνος) και το g (επιταχυνση της βαρύτητας). Επειδή στα απλά προβλήματα το g έχει συνήθως την τιμή 9,81 μπορείτε να το αγνοήσετε και να δηλώσετε μόνο τον χρόνο και η Python θα δωσει την τιμή 9,81. Αν όμως θέλετε να κάνετε ένα πείραμα στο φεγγάρι, | ||
+ | |||
+ | Η 2η γραμμή ονομάζεται docstring και περιγράφει με λίγα λόγια την λειτουργία της συνάρτησης. Η χρήση της είναι προεραιτική, | ||
+ | |||
+ | Η 3η γραμμή, | ||
+ | |||
+ | Μόλις εκτλέσετε το πρόγραμμα, | ||
+ | |||
+ | >>> | ||
+ | 78.480000000000004 | ||
+ | |||
+ | Το οποίο επιστρέφει το ύψος στο οποίο βρισκόταν ένα αντικείμενο, | ||
+ | |||
+ | >>> | ||
+ | 56.0 | ||
+ | |||
+ | Το οποίο σου επιστρέφει το ύψος στο οποίο βρισκόταν ένα αντικείμενο, | ||
+ | |||
+ | Θυμάστε το docstring? Μπορείτε να το δείτε ακόμα και στο runtime, γράφοντας: | ||
+ | |||
+ | >>> | ||
+ | Ypologizei to ypsos ptwsis enos antikeimenou se eley8eri ptwsi, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | =====Βιβλιοθήκες===== | ||
+ | |||
+ | Αυτό για το οποίο είναι φημισμένη η Python, είναι η πληθώρα των βιβλιοθηκών της. Πέρα απ' | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | και πολλές πολλές άλλες :-) | ||
+ | |||
+ | Επίσης, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ======Μέτα την παράσταση====== | ||
+ | |||
+ | Με όλα όσα αναφέρθηκαν παραπάνω, | ||
+ | |||
+ | Επίσης να σημειωθεί ότι αυτό το wiki είναι // | ||
+ | |||
+ | Επιπρόσθετα θα σας ενθαρρύναμε ότι πρόγραμμα γράφετε να είναι ανοιχτό και ελεύθερο προς όλους. Να μπορεί δηλαδή ο καθένας να διαβάσει τον κώδικα του και να τον τροποποιήσει ανάλογα με τις ανάγκες του. | ||
+ | |||
+ | Μεταφράζοντας τα 4 στοιχεία τα οποία πρέπει να έχει ένα πρόγραμμα για να θεωρείται ελεύθερο (όλη την φιλοσοφία μπορείτε να την βρείτε εδώ : http:// | ||
+ | |||
+ | => Πρέπει να παρέχει την ελευθερία σε τρίτους να το εκτελούν για οποιοδήποτε λόγο. | ||
+ | |||
+ | => Πρέπει να παρέχει την ελευθερία σε τρίτους να μελετούν πως δουλεύει το πρόγραμμα και να το προσαρμόζουν στις δικές τους ανάγκες. Η ελεύθερη πρόσβαση στον κώδικα είναι προαπαιτούμενη | ||
+ | |||
+ | => Πρέπει να παρέχει την ελευθερία σε τρίτους να διανέμουν αντίτυπα του προγράμματος για να βοηθήσουν τον πλησίον τους. | ||
+ | |||
+ | => Πρέπει να παρέχει την ελευθερία σε τρίτους να βελτιώνουν το πρόγραμμα και να δημοσιεύουν τις βελτιώσεις στο ευρύ κοινό, ώστε να επωφελείται από αυτές ολόκληρη η κοινότητα. Η ελεύθερη πρόσβαση στον κώδικα είναι προαπαιτούμενη. | ||
+ | |||
+ | **Τέλος ας σημειωθεί ότι ο όρος //free software// πρέπει να αντιλαμβάνεται ως //freedom of speech// και όχι ως //free beer//. ;)** | ||
+ | |||
+ | |||