ΓΕ0170 -Αλγόριθμοι και Προηγμένες Προγραμματικές Τεχνικές Object Oriented Programming με Python Νίκος Αθανάσης e-mail: athanasis@geo.aegean.gr
i = 1 while i<=10: print(i, end="\t") i+=1 Υλοποιήστε το ισοδύναμο με for Να γράψετε πρόγραμμα όπου θα ζητείται η ηλικία του χρήστη και θα γίνεται έλεγχος εγκυρότητας i = 1 while i<=10: print(i, end="\t") i+=1 for i in range(1, 11): print(i, end="\t") age = int(input("age:")) while age<=0: print("invalid input. Type again your age") age = int(input("age:")) print("your age is: {0}". format(age))
import math x = int(input("give x :")) print("done 1") print(x) y = 1/x print("done 2") print (y) z = math.sqrt(-1*y) print("done 3") print (z) try: filename = input("give Filename: ") fp = open(filename) print ("Content of the file: ". format (fp.name)) line = fp.readlines() print ("Read Line: {0}". format (line)) fp.close() except IOError as e: print("unable to open the file:", e) try: val = int(input( "Give me a number:" )) except (Exception): print( "Invalid response") for i in range(1,20): print(i,end='') for i in range(5,100, 5): print(i,end='\t') for season in ["Spring", "Summer", "Autumn", "Winter"]: print("season" + season)
import math try: x = int(input("give x :")) print("done 1") print(x) y = 1/x print("done 2") print (y) z = math.sqrt(-1*y) print("done 3") print (z) except (ValueError): print("invalid value") except (ZeroDivisionError): print("division by 0") import math try: x = int(input("give x :")) print("done 1") print(x) y = 1/x print("done 2") print (y) z = math.sqrt(-1*y) print("done 3") print (z) except ValueError as e: print(e) except ZeroDivisionError as e: print(e)
for i in range(1,20): print(i,end='') print() for i in range(5,100, 5): print(i,end='\t') print() name = input("give name :") for char in name: print (char, end=",") print() for season in ["Spring", "Summer", "Autumn", "Winter"]: print(season) Να γραφτεί πρόγραμμα στην Python που θα δίνεται ένα string και να υπολογίζει το πλήθος των ψηφίων και το πλήθος των γραμμάτων def calcalphadigits(s): d=l=0 for c in s: if c.isdigit(): d=d+1 elif c.isalpha(): l=l+1 print("letters", l) print("digits", d) s = input("give a string") calcalphadigits(s)
(Ι) Να γράψετε μια συνάρτηση που θα υπολογίζει το άθροισμα τριών δοθέντων αριθμών εάν οι τιμές δεν είναι ίσες μεταξύ τους και το τριπλάσιο τους σε περίπτωση που είναι ίσες. (ΙΙ) Να γράψετε μια συνάρτηση που θα δέχεται μια φράση και θα την αντιστρέφει (ΙΙΙ) Να γράψετε μια συνάρτηση που θα ελέγχει αν μια διεύθυνση IP είναι έγκυρη. Για περισσότερες πληροφορίες σχετικά με την εγκυρότητα IPs: http://www.noip.com/support/knowledg ebase/what-is-a-valid-ip-address/ (ΙV) Δίνεται μια σειρά από αριθμούς χωρισμένους από, πχ 4,5,6,2 από όπου θα κατασκευάζεται το παρακάτω σχήμα **** ***** ****** **
def sum_thrice(x, y, z): Λύση I sum = x + y + z if x == y == z: sum = sum * 3 return sum a = int(input("give a number")) b =int(input("give a number")) c =int(input("give a number")) sum = sum_thrice(a,b,c) print(sum)
Λύση II word = input("dwse string:") cnt = 0 for i in range(len(word)): print(word[len(word)-1-cnt], end="") cnt+=1 OR word = input("input a word to reverse: ") cnt=1 for i in range(1,len(word)+1): print(word[-i], end="") OR word = input("input a word to reverse: ") for char in range(len(word) - 1, -1, -1): print(word[char], end="")
Αντικειμενοστραφής Προγραμματισμός Περιγραφή και αναπαράσταση των στοιχείων του πραγµατικού χώρου ως αντικείµενα έτσι ώστε η επίλυση ενός προβλήµατος να χρησιµοποιεί έννοιες οι οποίες πηγάζουν άµεσα από το πρόβληµα. Έτσι η περιγραφή του προβλήµατος µέσω του προγράµµατος γίνεται µέ τους όρους του προβλήµατος και όχι της µηχανής.
Αντικειμενοστραφής Προγραμματισμός Έμφαση δίνεται στα αντικείμενα και στον τρόπο αλληλεπίδρασής τους Κλάση (class): Μια αφηρημένη έννοια (οντότητα) που περιγράφει τον τρόπο με τον οποίο τα αντικείμενα επικοινωνούν με το περιβάλλον Στιγμιότυπo (instance / object): το πραγματικό αντικείμενο που περιγράφεται αφαιρετικά από την κλάση. Τα αντίκείμενα ανήκουν σε μια (τουλάχιστον) κλάση (an object is an instance of a class) Κάθε οντότητα χαρακτηρίζεται από Χαρακτηριστικά (attributes / fields): όπως για παράδειγµα το µέγεθος, το χρώµα, το βάρος κλπ. Αλλιώς λέγονται instance variables ή data members Συµπεριφορές (behaviours): τι δηλαδή µπορεί να κάνει ένα αντικείµενο, πως ανταποκρίνεται και πως λειτουργεί. Τα behaviours ρίζονται από τις member functions
Χαρακτηριστικά Object Oriented Programming Ευρωστία Προσαρμοστικότητα portability επαναχρησιμοποίηση Τμηματοποίηση Math, δομές δεομένων Αφαιρετικότητα Ενθυλάκωση
Χαρακτηριστικά Robustness (Ευρωστία): Το σύστημα μπορεί να χειρίζεται απροσδόκητες ροές πληροφορίας Adaptability (Προσαρμοστικότητα): Το σύστημα μπορεί να προσαρμόζεται με βάση τις υπάρχουσες ανάγκες της τεχνολογίας
Χαρακτηριστικά Reusability (επαναχρησιμοποίηση): Ο ίδιος κώδικας μπορεί να χρησιμοποιηθεί από διαφορετικά συστήματα και εφαρμογές Modularity (Τμηματοποίηση ): Το σύνθετο σύστημα αποτελείται από επιμέρους τμήματα που αλληλεπιδρούν μεταξύ τους
Χαρακτηριστικά Abstraction (Αφαιρετικότητα): Το σύνθετο σύστημα αποτελείται από επιμέρους τμήματα σε μια ιεραρχική δομή
Χαρακτηριστικά Encapsulation (Ενθυλάκωση): Το κάθε τμήμα «κρύβει» τα χαρακτηριστικά του από τα υπόλοιπα
Class Diagram για την κλάση CreditCard
Παραδείγματα Credit Card Cars University Εργασία
Arrays (Πίνακες) Lists [1,2,3] Tuples (1,2,3) Strings 1,2,3 Όλα υποστηρίζουν δείκτες (πχ l[1], t[0], s[2])
Αναπαράσταση μνήμης RAM του υπολογιστή Συνεχόμενες θέσεις μνήμης v Οι 6 χαρακτήρες του αλφαριθμητικού SAMPLE αποθηκεύονται σε 12 bytes μνήμης Κάθε θέση (κελί) στο array χρησιμοποιεί τον ίδιο αριθμό από bytes Κάθε κελί είναι άμεσα προσβάσιμο μέσω του τύπου Start + (Cellsize) * index
temp[2] = 15
Όλα τα κελιά αναφέρονται στο ίδιο αντικείμενο Counters = [0] * 8 counters[2]+=1 Το κελί στη θέση 2 δείχνει σε μια νέα θέση μνήμης.
primes = [2,3,5,7,11,13,17,19] extras = [23,29,31] primes.extend(extras) print(primes)
fruits = ['apple', 'pear', 'banana', 'kiwi', 'apple', 'pineapple'] print (fruits) print (len(fruits)) print (fruits.count('grape')) print(fruits[0:2]) print(fruits.count('apple')) print(fruits.count('anana')) fruits.reverse() print(fruits) fruits.append('grape') fruits.insert(1, "grape fruit") print(fruits) fruits.sort() print(fruits) forest_fruits = ['strawberries', 'raspberries', 'blueberries'] fruits.extend(forest_fruits) print(fruits) fruits.remove("apple") for fruit in fruits: print(fruit,end=',')
vec = [-4, -2, 0, 2, 4] vec2 = [x*2 for x in vec] print (vec2) vec3 = [x for x in vec if x >= 0] print(vec3) vec4 = [abs(x) for x in vec] print(vec4) names = [' nick dimitriou', ' jack zahariou', ' maria anastasiou '] names2= [name.strip() for name in names] print (names2) vec5 = [(x, x+1) for x in range(6)] print(vec5)
Tuples (πλειάδες) t = 12345, 54321, 'hello! u = t, (1, 2, 3, 4, 5) Οι λίστες είναι are mutable (μεταβλητά αντικείμενα), και περιέχουν στοιχεια ίδιου τύπου Οι πλειάδες είναι μη μεταβλητά αντικείμενα (immutable) και συνήθως διαφορετικών τύπων
Sets (σειρές): Μη διατεταγμένα στοιχεία, χωρίς διπλότυπες εγγραφές basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} print (basket) print (sorted(basket)) has_orange = ' orange' in basket print("has organge:{}".format(has_orange)) a = set('abcdd') b = set('abcce') print(a) c = a-b print(c)
Dictionaries (λεξικά) Αντί να χρησιμοποιούν ως δείκτη έναν αριθμό, χρησιμοποιούν ένα key tel = {'nick': 697112233, 'jim': 697445566} print (tel) print (tel['nick']) dict([("nick", 697112233), ("jim", 697445566)]) dict(nick= 697112233, jim= 697445566) tel['sofia'] = 698119988 print (tel) del tel['jim'] tel['nick'] = 698667755 keys_list = list(tel.keys()) print(keys_list) keys_list = sorted(keys_list) print(keys_list) print('jim' in tel) print('jack' not in tel)
Iterations names = ['Nick', 'Jack', 'Jim'] for i, v in enumerate(names): print(i, v) LastNames = ['Athanasis', 'Dimitriou', 'Zahariou'] for n, l in zip(names, LastNames): print('name: {0}.\tLast name: {1}.'.format(n, l))