Python 8. Δομές Δεδομένων ΙΙ

Σχετικά έγγραφα
Διορθώσεις σελ

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΡΙΤΗ 13 ΙΟΥΝΙΟΥ 2017

Ασκήσεις στις Δομές Δεδομένων (Λίστες-Συμβολοσειρές)

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Δραστηριότητα 2.2 Δομές επανάληψης και επιλογής

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΕΤΑΡΤΗ 20 ΙΟΥΝΙΟΥ 2018

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Φύλλο Εργασίας 3. Μια γρήγορη επανάληψη από τα προηγούμενα

ΑΕΠΠ 7o Επαναληπτικό Διαγώνισμα

ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

Θέματα Προγραμματισμού Η/Υ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ. Πίνακες και βασικές επεξεργασίες αυτών

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

επιµέλεια Θοδωρής Πιερράτος

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Α1. 1-Σωστό 2-Λάθος 3-Λάθος 4-Σωστό 5-Σωστό

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Θέματα Προγραμματισμού Η/Υ

α. Οι συμβολοσειρές είναι μια ακολουθία από χαρακτήρες. Μια συμβολοσειρά μπορεί να αποτελείται από περισσότερες από μία λέξεις.

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ ΥΠΟΛΕΙΠΟΜΕΝΕΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ

Ανάπτυξη και Σχεδίαση Λογισμικού

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Συλλογές, Στοίβες και Ουρές

ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

Σημειωματάριο Δευτέρας 13 Νοε. 2017

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

ΣΥΝΟΛΟ ΣΕΛΙ ΩΝ: ΕΠΤΑ (7)

Α1. Να γράψετε τον αριθμό καθεμιάς από τις παρακάτω προτάσεις 1-5 και δίπλα τη λέξη ΣΩΣΤΟ, αν είναι σωστή ή τη λέξη ΛΑΘΟΣ, αν είναι λανθασμένη.

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Εισαγωγή στον Προγ/μό Υπολογιστών

Βασικές Έννοιες Δοµών Δεδοµένων

Η γλώσσα προγραμματισμού C

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Επαναληπτικές Ασκήσεις Χειµερινό Εξάµηνο 2014

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 (ΕΠΤΑ)

Ενδεικτικές Ερωτήσεις Θεωρίας

Ανακτήθηκε από την ΕΚΠΑΙΔΕΥΤΙΚΗ ΚΛΙΜΑΚΑ

Θέματα Προγραμματισμού Η/Υ

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Γλώσσα Προγραμματισμού C

ΘΕΜΑΤΑ ΚΑΙ ΛΥΣΕΙΣ. 1) Έστω η λογική συνάρτηση F = A' + Β'. D + B. C' + C. D' (όπου οι τόνοι δηλώνουν συμπληρώματα).

Κάθε στοιχείο που γίνεται αντιληπτό με μία από τις πέντε αισθήσεις μας

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Πληροφορική ΙΙ Θεματική Ενότητα 11

ΦΡΟΝΤΙΣΤΗΡΙΟ ΦΑΣΜΑ 21/4/2013

ΕΠΑΝΑΛΗΨΗ ΧΩΡΙΣ ΠΡΟΚΑΘΟΡΙΣΜΕΝΑ ΒΗΜΑΤΑ,ΜΕΤΡΗΤΕΣ,ΜΕΓΙΣΤΟΣ,ΜΕΓΙΣΤΟ ΟΝΟΜΑ Χαμηλόμισθος

Πληρουορική Γ Γσμμασίοσ

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

Η γλώσσα προγραμματισμού C

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Να γράψετε τους αριθμούς 1, 2, 3 από τη Στήλη Α και δίπλα το γράμμα α, β, γ, δ, ε από τη Στήλη Β που δίνει τη σωστή αντιστοιχία.

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Β7.1.4 Δομές Επανάληψης. Β Λυκείου Κατεύθυνσης

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Επαναληπτικές Ασκήσεις Χειμερινό Εξάμηνο 2016

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Στοίβες με Δυναμική Δέσμευση Μνήμης

Γλώσσες Προγραμματισμού Εφαρμογών - ΜΕΠΒ20

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Μεθόδων Επίλυσης Προβλημάτων

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Python - Δομή επανάληψης

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι

Α4. Όσο επανάλαβε Τέλος_επανάληψης Εμφάνισε Για από μέχρι με_βήμα. Όσο επανάλαβε (Μονάδες 5) Α5. Α[10, 5] Π, Για από μέχρι (1) Για από μέχρι (2) Αν

4. Επιλογή και Επανάληψη

Θέματα Προγραμματισμού Η/Υ

Βασικά Στοιχεία Python 3

Δομές Δεδομένων (Data Structures)

Transcript:

Συμβολοσειρές (strings) Τα αλφαριθμητικά ή συμβολοσειρές στην Python είναι ακολουθίες από χαρακτήρες που έχουν σταθερό μέγεθος και μη μεταβαλλόμενα περιεχόμενα. Δηλαδή, δεν μπορούμε να προσθέσουμε ή να αφαιρέσουμε χαρακτήρες, ούτε να τροποποιήσουμε τα περιεχόμενα του αλφαριθμητικού. Γι αυτό λέμε ότι η δομή αυτή ανήκει στις μη μεταβαλλόμενες (immutable) δομές της Python. Η αρίθμηση των χαρακτήρων σε ένα αλφαριθμητικό ξεκινάει από το 0. Για παράδειγμα: word = "PYTHON" 0 1 2 3 4 5 P Y T H O N word[0] word[1] word[2] word[3] word[4] word[5] Η συνάρτηση len επιστρέφει το μήκος, δηλαδή το πλήθος των χαρακτήρων του αλφαριθμητικού. Παράδειγμα: >>> word = "PYTHON" >>> len(word) 6 Ο τελεστής + όταν εφαρμόζεται σε αντικείμενα τύπου string, έχει σαν αποτέλεσμα τη συνένωσή τους σε μια συμβολοσειρά. Παράδειγμα: >>> word = "PYTHON" >>> print word[5]+word[0] NP Η συνάρτηση str μετατρέπει μια τιμή σε συμβολοσειρά. Παράδειγμα: >>> str(28) == "28" Η συνάρτηση int μετατρέπει ένα αλφαριθμητικό στον ακέραιο αριθμό που αναπαριστά. Παράδειγμα: >>> print int("6") + 4 10 Έλεγχος ύπαρξης Ο τελεστής in ελέγχει αν ένα αντικείμενο ανήκει σε ένα σύνολο αντικειμένων. Δεδομένου ότι οι συμβολοσειρές μπορούν να θεωρηθούν ως σύνολα χαρακτήρων, μπορούμε να τον χρησιμοποιήσουμε: >>> "Py" in "Python" >>> "a" in "Python" False >>> "a" not in "Python" Οι συγκριτικοί τελεστές (<, <=, >, >=, ==) ισχύουν και στις συμβολοσειρές, η λειτουργία των οποίων βασίζεται στη λεξικογραφική διάταξη των χαρακτήρων. >>> "Xara" > "Anna" >>> "1000" < "8" >>> "X5" > "X4" Σάρωση χαρακτήρων και απαλοιφή κενών def trimspaces(sentence): result = "" for char in sentence : if char!= " " : result += char return result >>> phrase = "Houston we have a problem" >>> trimspaces(phrase) 'Houstonwehaveaproblem' Σάρωση χαρακτήρων και έλεγχος ύπαρξης (καταμέτρηση φωνηέντων) def countvowels(word): vowels = "AEIOUaeiou" count = 0 for letter in word : if letter in vowels: count += 1 return count >>> phrase = "Houston we have a problem" >>> countvowels(phrase) 9 Άσκηση 1η Δημιουργήστε μια συνάρτηση που δέχεται ένα string και επιστρέφει το αντίστροφό του. Για παράδειγμα, δέχεται το "ΑΒΓ" και επιστρέφει το "ΓΒΑ". Με τη χρήση αυτής της συνάρτησης γράψτε πρόγραμμα το οποίο διαβάζει μία λέξη και ελέγχει αν είναι καρκινική ή όχι (διαβάζεται το ίδιο αν πάμε από το τέλος στην αρχή π.χ. "ΑΝΝΑ"). def InvStr(st): N=len(st) new="" for i in range(n-1,-1,-1): new = new+st[i] return new s1=raw_input("text:") s2=invstr(s1) if s1==s2: print "καρκινική" print "όχι καρκινική" Άσκηση 2η Δημιουργήστε μια συνάρτηση που δέχεται μία πρόταση και επιστρέφει το πλήθος των λέξεων που περιέχει. Σημείωση: Μία πρόταση τελειώνει με τελεία (".") και κάθε λέξη διαχωρίζεται από την άλλη με ένα space (" "). 1η λύση def LexeisSeProt(keimeno): diax="." lexeis=0-1 -

Python - 8. Δομές Δεδομένων ΙΙ for xar in keimeno: if xar in diax: lexeis += 1 return lexeis prot=raw_input("...") print LexeisSeProt(prot) 2η λύση def LexeisSeProt(keimeno): lexeis=0 for xar in keimeno: if xar == " ": lexeis += 1 lexeis += 1 return lexeis prot=raw_input("...") print LexeisSeProt(prot) Άσκηση 3η Δημιουργήστε μια συνάρτηση που δέχεται ελληνικές φράσεις και μετρά το πλήθος των φωνηέντων που περιέχουν. Σημείωση: Θεωρήστε ότι τα φωνήεντα είναι χωρίς τόνους και διαλυτικά. def countgrvowels(word): vowels = "ΑΕΟΩΥΙΗαεοωυιηΆΈΌΏΎΊΉάέόώύίήΪΫϊϋΐΰ" count = 0 for letter in word : if letter in vowels: count += 1 return count s=raw_input("δώσε φράση στα Ελληνικά:") print "Σε αυτήν, υπάρχουν", countgrvowels(s),"φωνήεντα" Άσκηση 4η Δημιουργήστε μια συνάρτηση που δέχεται μία φράση και επιστρέφει τους 10 πρώτους χαρακτήρες της αντικαθιστώντας τυχόν κενά με την κάτω παύλα ("_"). Π.χ. Αν διαβάσει "ένα δύο τρία τέσσερα πέντε γάιδαροι" επιστρέφει "ένα_δύο_τρ". Σημείωση: Αν η φράση έχει λιγότερους από 10 χαρακτήρες τότε επιστρέφει τόσους χαρακτήρες όσους δέχτηκε... def Put_(sentence): result = "" for char in sentence : if char!= " " : result += char result += "_" return result def trim10str(sentence): if len(sentence)<=10: result = sentence result="" for i in range(10): result += sentence[i] return result s=raw_input("string: ") s = Put_(s) s = trim10str(s) print s Άσκηση 5η Δημιουργήστε μια συνάρτηση που δέχεται μία φράση και την επιστρέφει αφαιρώντας τα κενά και κάνοντας κεφαλαίο το πρώτο γράμμα κάθε λέξης. Σημείωση 1η: Αν διαβάσει "one two three four five donkeys" επιστρέφει "OneTwoThreeFourFiveDonkeys". Σημείωση 2η: Χρησιμοποιείστε τη συνάρτηση upper() που επιστρέφει κεφαλαία, εφόσον οι χαρακτήρες είναι αγγλικοί! Αν s είναι ένα μη κενό string τότε το s.upper() το επιστρέφει με κεφαλαίους χαρακτήρες και το s[2].upper() επιστρέφει κεφαλαίο τον χαρακτήρα της θέσης 2. def NewString(s): N = len(s) new = s[0].upper() #1ος χαρακτήρας πρέπει να είναι κεφαλαίος for i in range(1,n): # αν προηγούμενος χαρακτήρας κενό, τρέχον αντιγράφεται κεφαλαίος if s[i-1] == ' ': new += s[i].upper() # αν τρέχον χαρακτήρας μη κενό, αντιγράφεται elif s[i]!= ' ': new += s[i] return new Άσκηση 6η Να γράψετε ένα πρόγραμμα το οποίο θα διαβάζει λέξεις από το πληκτρολόγιο και θα μετράει και θα εμφανίζει πόσες λέξεις ξεκινούν από το γράμμα Α (κεφαλαίο ή μικρό). Όταν δοθεί λέξη που να τελειώνει με το γράμμα Ω (κεφαλαίο ή μικρό) θα τερματίζει. Σημείωση: δεν θα υπάρχει λέξη που να ξεκινά με το γράμμα Α και να τελειώνει με το γράμμα Ω. alpha = 'αάαά' omega = 'ωώωώ' lexeis_me_alpha = 0 lexi = raw_input('δώσε λέξη:') while lexi[len(lexi)-1] not in omega: if lexi[0] in alpha: lexeis_me_alpha += 1 lexi = raw_input('δώσε λέξη:') print 'Λέξεις από "Α"', lexeis_me_alpha ή count=0 alpha="αάαά" omega="ωώωώ" LexiOmega=False st=raw_input("δώσε λέξη: ") while LexiOmega==False: L=len(st) if st[l-1] in omega: LexiOmega= elif st[0] in alpha: count += 1 st=raw_input("δώσε λέξη: ") - 2 -

st=raw_input("δώσε λέξη: ") print count Άσκηση 7η Να γράψετε μια συνάρτηση η οποία θα ελέγχει αν μια συμβολοσειρά αποτελεί ηλεκτρονική διεύθυνση αλληλογραφίας ελληνικού ιστότοπου, δηλαδή: περιέχει το σύμβολο @, δεν περιέχει κενά και έχει κατάληξη.gr. def email(s): T = len(s) IsEmail = '@' in s if IsEmail: IsEmail = ' ' not in s if IsEmail: IsEmail = '.' == s[t-3] if IsEmail: IsEmail = 'g' == s[t-2] if IsEmail: IsEmail = 'r' == s[t-1] return IsEmail ή def email(s): T = len(s) if ('@' in s) and (' ' not in s) and ('.' == s[t-3]) and ('g' == s[t-2]) and ('r' == s[t-1]): IsEmail = IsEmail = False return IsEmail Άσκηση 8η Να γράψετε ένα πρόγραμμα το οποίο θα διαβάζει λέξεις από το πληκτρολόγιο και θα τις ενώνει σε μια μεγάλη πρόταση, την οποία στη συνέχεια θα εμφανίζει στην οθόνη. Η εισαγωγή των λέξεων τερματίζεται όταν ως λέξη δοθεί η τελεία.. Σημείωση: Στην πρόταση οι λέξεις θα χωρίζονται μεταξύ τους με κενά και η πρόταση θα τελειώνει με τελεία.. protasi = '' lexi=raw_input('δώσε λέξη, "." για τέλος:') while lexi!= '.': protasi += lexi + ' ' lexi=raw_input('δώσε λέξη, "." για τέλος:') protasi += '.' print protasi ή protasi = '' FirstTime = lexi=raw_input('δώσε λέξη, "." για τέλος:') while lexi!= '.': if FirstTime: protasi += lexi FirstTime = False protasi += ' ' + lexi lexi=raw_input('δώσε λέξη, "." για τέλος:') protasi += '.' print protasi Λίστες (lists) Είναι μια διατεταγμένη ακολουθία αντικειμένων, όχι απαραίτητα του ίδιου τύπου. Σε αντίθεση με το string, είναι μια δυναμική δομή στην οποία μπορούμε να προσθέτουμε ή να αφαιρούμε στοιχεία. Κάθε αντικείμενο της λίστας χαρακτηρίζεται από ένα μοναδικό αύξοντα αριθμό, ο οποίος ορίζει τη θέση του στη λίστα. Η προσπέλαση στα στοιχεία της λίστας γίνεται όπως στα string, με το όνομα της λίστας και τον αύξοντα αριθμό του αντικείμενου μέσα σε αγκύλες. Η εντολή L = [ 5, 3, 8, 21, 13, 34 ] δημιουργεί τη μεταβλητή L που αναφέρεται στη λίστα [ 5, 3, 8, 21, 13, 34 ] 0 1 2 3 4 5 5 3 8 21 13 34 L[0] L[1] L[2] L[3] L[4] L[5] Παράδειγμα >>> DaysOfWeek = ["ΔΕΥ","ΤΡΙ","ΤΕΤ","ΠΕΜ","ΠΑΡ"] >>> DaysOfWeek = DaysOfWeek + ["ΣΑΒ"] >>> print DaysOfWeek # Έκδοση 2.7 ['\xc4\xc5\xd5\xd4\xc5\xd1\xc1', '\xd4\xd1\ xc9\xd4\xc7', '\xd4\xc5\xd4\xc1\xd1\xd4\ xc7', '\xd0\xc5\xcc\xd0\xd4\xc7', '\xd0\ xc1\xd1\xc1\xd3\xca\xc5\xd5\xc7', '\xd3\ xc1\xc2\xc2\xc1\xd4\xcf'] >>> print DaysOfWeek # Έκδοση 3.4 ['ΔΕΥ','ΤΡΙ','ΤΕΤ','ΠΕΜ','ΠΑΡ','ΣΑΒ'] Αν θέλουμε να προσθέσουμε ένα στοιχείο στο τέλος της λίστας γράφουμε: Λίστα = Λίστα + [ στοιχείο ] Αν θέλουμε να προσθέσουμε ένα στοιχείο στην αρχή της λίστας γράφουμε: Λίστα = [ στοιχείο ] + Λίστα Για τις λίστες: Δεν έχουν σταθερό μέγεθος, δηλαδή μπορούν να αυξάνονται και να μειώνονται κατά την εκτέλεση του προγράμματος. Η αρίθμηση των δεικτών ξεκινάει από το 0, όπως ακριβώς στα string (συμβολοσειρές). Είναι δυναμικές δομές και χαρακτηρίζονται από μεγάλη ευελιξία. Έτσι για παράδειγμα, μπορούμε να έχουμε σε μια λίστα ακόμα και στοιχεία διαφορετικού τύπου. Στις λίστες μπορούμε να χρησιμοποιήσουμε τον τελεστή in, τη συνάρτηση len ή και τον τελεστή συνένωσης '+' όπως ακριβώς και στα string (συμβολοσειρές). - 3 -

Python - 8. Δομές Δεδομένων ΙΙ Παράδειγμα >>> fruits = ['apple','orange'] >>> len(fruits) 2 >>> 'apple' in fruits >>> powers = [2, 4, 8, 16] >>> powers + fruits [2,4,8,16,'apple','orange'] >>> powers = [2, 4, 8, 16] >>> fib = [3, 5, 8, 13, 21] >>> fib + powers [3, 5, 8, 13, 21, 2, 4, 8, 16] >>> powers = powers + [ powers[3] * 2 ] >>> print powers [2, 4, 8, 16, 32] item in List επιστρέφει, αν το στοιχείο item υπάρχει μέσα στη λίστα List, αλλιώς επιστρέφει False. item not in List επιστρέφει, αν το στοιχείο item δεν υπάρχει μέσα στη λίστα List, αλλιώς, αν υπάρχει επιστρέφει False. len ( List ) Επιστρέφει το πλήθος των στοιχείων (ή μέγεθος) της λίστας. list ( String ) Επιστρέφει μια λίστα με στοιχεία τους χαρακτήρες της συμβολοσειράς string. Η συνάρτηση αυτή μπορεί να μετατρέψει και άλλα είδη δομών σε λίστα. Μέθοδοι Οι λίστες διαθέτουν μεγάλη ποικιλία μεθόδων: L.append( object ) προσθήκη του στοιχείου object στο τέλος της λίστας L L.insert( index, object ) προσθήκη του στοιχείου object, στη θέση index της λίστας L L.pop( index ) αφαίρεση από τη λίστα L του στοιχείου που βρίσκεται στη θέση index. Αν δεν δοθεί θέση, τότε θα αφαιρεθεί το τελευταίο στοιχείο της λίστας. Η pop επιστρέφει τιμή! Διάσχιση Λίστας Μπορούμε να επεξεργαστούμε τα στοιχεία μιας λίστας, ένα κάθε φορά, κάνοντας χρήση του παρακάτω ιδιώματος της δομής επανάληψης for: for item in List : Εντολές Επεξεργασίας του αντικειμένου item Δημιουργία και εμφάνιση στοιχείων λίστας Οι παρακάτω εντολές αρχικά κατασκευάζουν μια λίστα η οποία περιέχει όλους τους αριθμούς από το 1 έως και το 6 και στη συνέχεια εμφανίζουν κάθε αριθμό σε διαφορετική γραμμή. L = [1, 2, 3, 4, 5, 6] for number in L : print number Μέσος όρος των στοιχείων μιας λίστας Για να υπολογίσουμε το μέσο όρο των στοιχείων μιας λίστας, πρώτα χρειάζεται να υπολογίσουμε το άθροισμα των στοιχείων, χρησιμοποιώντας μια μεταβλητή στην οποία προσθέτουμε, κάθε φορά, το επόμενο στοιχείο της λίστας: sum = 0.0 for number in L : sum = sum + number average = sum / len( L ) print average Μέγιστη τιμή σε μια λίστα maximum = L[0] for number in L : if number > maximum : maximum = number print maximum Παράδειγμα: Ρέστα [Δ] Καλούμαστε να σχεδιάσουμε το λογισμικό μιας ταμειακής μηχανής, το οποίο θα διαβάζει το ποσό που έδωσε ο πελάτης και το κόστος των αγορών του και θα εμφανίζει το πλήθος των κερμάτων ή χαρτονομισμάτων που θα δοθούν για ρέστα. Θεωρήστε ότι όλες οι τιμές είναι σε ακέραια πολλαπλάσια του ευρώ. nomismata = [100, 50, 20, 10, 5, 2, 1] cost = input( "Κόστος αγορών: " ) payment = input( "Ποσό της πληρωμής:" ) change = payment - cost counter = 0 for value in nomismata : counter = counter + ( change // value ) change = change % value print counter Διαχωρισμός λίστας αριθμών σε ΘΕΤΙΚΟΥΣ, ΑΡΝΗΤΙΚΟΥΣ positives = negatives = [ ] for stoixeio in Lista : if stoixeio > 0 : positives = positives + [ stoixeio ] elif stoixeio < 0 : negatives = negatives + [ stoixeio ] print positives, negatives Συγχώνευση διατεταγμένων λιστών def merge( A, B ) : L = [ ] while A!= [ ] and B!= [ ] : if A[0] < B[0] : L = L + [ A.pop(0) ] else : L = L + [ B.pop(0) ] return L + A + B Η συνάρτηση range Παραδείγματα >>> range(4) - 4 -

[0, 1, 2, 3] >>> range(0,4) [0, 1, 2, 3] >>> range(0,4,1) [0, 1, 2, 3] >>> range(10,30,5) [10, 15, 20, 25] >>> range(30,10, 5) [30, 25, 20, 15] >>> range(1,2,100) [1] >>> range(1, 1, 100) [ ] >>> range(1, 5, 1) [ ] >>> range(5, 1, 1) [ ] >>> range(0) [ ] Τα παρακάτω τμήματα κώδικα εκτελούν την ίδια λειτουργία: >>> L = [ 6, 28, 496, 8128 ] >>> for item in L: print item >>> for index in range(0,4): print L[index] >>> for index in [0,1,2,3]: print L[index] 6 28 496 8128 Στοίβα (stack) Last In First Out - LIFO def push(st,item): st.insert(0, item) def pop(st): return st.pop(0) def isempty(st): return len(st) == 0 def createstack(): return [] Αντιστροφή αριθμών Έστω πρόγραμμα που δέχεται από το χρήστη αριθμούς μέχρι να δοθεί το 0 και τους εμφανίζει σε αντίστροφη σειρά από αυτή με την οποία δόθηκαν. Θέλουμε κάθε φορά να εμφανίσουμε πρώτο τον αριθμό που δόθηκε τελευταίος. Χρειαζόμαστε μια δομή δεδομένων που να υποστηρίζει τη λειτουργία LIFO, όπως η στοίβα. S = createstack() num = input() while num!= 0: push(s,num) num = input() while not isempty(s): num = pop(s) print num Ουρά (queue) First In First Out - FIFO Όταν η στοίβα είναι άδεια, είναι προφανές ότι δεν μπορεί να γίνει απώθηση. Άρα, όταν απωθούμε ένα στοιχείο από τη στοίβα, θα πρέπει προηγουμένως να έχουμε εξασφαλίσει ότι η στοίβα δεν είναι κενή. Για αυτό το λόγο, εκτός από την ώθηση και την απώθηση, πρέπει να υλοποιήσουμε και τον έλεγχο, αν η στοίβα είναι κενή. Οι βασικές λειτουργίες που πρέπει να υποστηρίζει η υλοποίηση μιας στοίβας είναι: Δημιουργία μιας κενής στοίβας. Έλεγχος, αν η στοίβα είναι κενή. Ώθηση ενός στοιχείου στη στοίβα. Απώθηση ενός στοιχείου από τη στοίβα. Δύο είναι οι βασικές λειτουργίες μιας ουράς: Εισαγωγή στοιχείου, η οποία γίνεται στο πίσω μέρος της ουράς. Εξαγωγή στοιχείου, η οποία γίνεται από το εμπρός μέρος της ουράς. Οι βασικές λειτουργίες που πρέπει να υποστηρίζει η υλοποίηση μιας ουράς είναι: Δημιουργία μιας κενής ουράς. Έλεγχος, αν η ουρά είναι κενή. Εισαγωγή στοιχείου. Εξαγωγή στοιχείου. def enqueue(q,item): q.append(item) def dequeue(q): return q.pop(0) - 5 -

Python - 8. Δομές Δεδομένων ΙΙ def isempty(q): return len(q) == 0 def createqueue(): return [] Ασκήσεις με λίστες Δραστηριότητα 7 [Ε] Να γράψετε μια συνάρτηση σε Python η οποία θα δέχεται μια λίστα από λέξεις και θα επιστρέφει τη λέξη με το μεγαλύτερο μήκος. def maxword(l): max_str=l[0] max_len=len(max_str) for i in range(len(l)): if len(l[i]) > max_len: max_str = L[i] max_len = len(max_str) return max_str Lista=["123","123456789","12345"] print maxword(lista) ΛΙΣΤΕΣ: Εισαγωγή Στοιχείων Άσκηση 1η Δημιουργήστε μια λίστα με τους βαθμούς στο μάθημα του Προγραμματισμού των 20 μαθητών της τάξης. L = [] for i in range(20): v = input("δώστε βαθμό: ") L += [v] Άσκηση 2η Δημιουργήστε μια λίστα με τα ονόματα των μαθητών της τάξης. Η εισαγωγή ονομάτων σταματά όταν δοθεί το όνομα ΤΕΛΟΣ. N = [] name = raw_input("δώσε όνομα: ") while name!= "ΤΕΛΟΣ": N += [name] name = raw_input("δώσε όνομα: ") ΛΙΣΤΕΣ: Εύρεση Άσκηση 3η Έστω λίστα με τους βαθμούς των μαθητών της τάξης στο μάθημα του Προγραμματισμού. Να γραφεί συνάρτηση η οποία θα δέχεται τη λίστα και θα επιστρέφει τον μεγαλύτερο από από αυτούς. 1η def maxlist(l): N = len(l) maxl = L[0] for i in range(1,n): if L[i] > maxl: maxl = L[i] return maxl Παρατηρήσεις 1. Παρατηρήστε ότι η παραπάνω συνάρτηση επιστρέφει το μέγιστο στοιχείο οποιασδήποτε λίστας έχει διατεταγμένα στοιχεία (δηλαδή στοιχεία στα οποία μπορεί να χρησιμοποιηθεί ο τελεστής >). 2. Για τη συγκεκριμένη άσκηση θα μπορούσε να είχε δοθεί αρχική τιμή ίση με μηδέν: maxl = 0. 3. Αν η for γραφόταν for i in range(n) δεν θα ήταν λάθος. 2η def maxlist(l): maxl = L[0] for stoixeio in L: if stoixeio > maxl: maxl = stoixeio return maxl Σημείωση Για να ελέγξουμε τα παραπάνω γράφουμε π.χ.: Lista = [12,10.5,15,18,9,6,19.5] def maxlist(l):... print maxlist(lista) Άσκηση 4η Έστω λίστα με τους βαθμούς των μαθητών της τάξης στο μάθημα του Προγραμματισμού. Να γραφεί συνάρτηση η οποία θα δέχεται τη λίστα και θα επιστρέφει τη θέση μέσα στη λίστα στην οποία βρίσκεται ο μεγαλύτερος. Σημείωση: Θεωρούμε ότι όλοι οι βαθμοί είναι διαφορετικοί μεταξύ τους και άρα, ο μεγαλύτερος είναι ένας και άρα... η θέση στην οποία βρίσκεται μοναδική! def maxlistpos(l): N = len(l) maxl = L[0] maxpos = 0 for i in range(1,n): if L[i] > maxl: maxl = L[i] maxpos = i return maxpos ΛΙΣΤΕΣ: Επεξεργασία Άσκηση 5η Έστω λίστα με τους βαθμούς των μαθητών της τάξης στο μάθημα του Προγραμματισμού. Να γραφεί συνάρτηση η οποία θα επιστρέφει τον μέσο όρο τους. def ListAverage(L): S = 0.0 for stoixeio in L: S += stoixeio return S / len(l) Άσκηση 6η - 6 -

Έστω λίστα με τους βαθμούς των μαθητών της τάξης στο μάθημα του Προγραμματισμού. Να γραφεί συνάρτηση η οποία θα επιστρέφει το πλήθος όσων είναι κάτω από τη βάση (10). def KatoApo10(L): n = 0 for stoixeio in L: if stoixeio < 10: n += 1 return n Άσκηση 7η Να γραφεί πρόγραμμα το οποίο: 1. Διαβάζει τα ονόματα και τον τελικό βαθμό των 10 μαθητών της τάξης. 2. Υπολογίζει και εμφανίζει το μέσο όρο της βαθμολογίας τους. 3. Εμφανίζει τα ονόματα των μαθητών που έχουν τελικό βαθμό κάτω από 10. 1η N = 25 O = [] V = [] S = 0.0 for i in range(n): onoma = raw_input("ονομα:") vathmos = input("βαθμός:") O += [onoma] V += [vathmos] S += vathmos mo = S / N print "Μέσος Όρος:", mo print "Μαθητές κάτω από βάση" for i in range(n): if V[i] < 10: print O[i] 2η N = 25 O = [] V = [] Kato10 = [] S = 0.0 for i in range(n): onoma = raw_input("ονομα:") vathmos = input("βαθμός:") O += [onoma] V += [vathmos] S += vathmos if vathmos < 10: Kato10 += [onoma] mo = S / N print "Μέσος Όρος:", mo print "Μαθητές κάτω από βάση" for stoixeio in Kato10: print stoixeio Άσκηση 8η Να γραφεί πρόγραμμα το οποίο: 1. Διαβάζει τα ονόματα και τις μέγιστες θερμοκρασίες 20 πόλεων της Ευρώπης. 2. Υπολογίζει και εμφανίζει το μέσο όρο της θερμοκρασίας στις πόλεις αυτές. 3. Εμφανίζει το πλήθος και τα ονόματα των πόλεων όπου η θερμοκρασία ήταν πάνω από 20 ο C.... ΛΙΣΤΕΣ: Ταξινόμηση Συνάρτηση Ταξινόμησης Ευθείας Ανταλλαγής ή Ταξινόμησης Φυσαλίδας (Bubble Short) Η ταξινόμηση που γίνεται είναι αύξουσα. def BubbleSort(L): N = len(l) for i in range(1,n,1): for j in range(n-1,i-1,-1): if L[j] < L[j-1]: L[j],L[j-1] = L[j-1],L[j] return L Άσκηση 11η Να γραφεί πρόγραμμα σε python το οποίο διαβάζει τα ονόματα και τον τελικό μέσο όρο της βαθμολογίας των 25 μαθητών μιας τάξης και εμφανίζει με φθίνουσα σειρά βαθμολογίας τα ονόματα και το βαθμό των μαθητών που έχουν τελικό μέσο όρο πάνω από 18. Σε περίπτωση ισοβαθμίας τα στοιχεία να εμφανίζονται με αλφαβητική σειρά. N = 25 for i in range(n): O[i] = raw_input('όνομα: ') V[i] = input('βαθμός: ') for i in range(1,n,1): for j in range(n-1,i-1,-1): if V[j] > V[j-1]: V[j],V[j-1] = V[j-1],V[j] O[j],O[j-1] = O[j-1],O[j] elif V[j] == V[j-1] and O[j] < O[j-1]: O[j],O[j-1] = O[j-1],O[j] i = 0 while V[i] > 18: print O[i], V[i] i += 1-7 -

Python - 8. Δομές Δεδομένων ΙΙ - 8 -